public async void SubmitExecute() { ValidationSubmitError = null; List <string> validationSubmitErrors = new List <string>(); string aoi = null; if (_selectedAOILayer != null) { int featureCount = await QueuedTask.Run(() => { return(_selectedAOILayer.GetFeatureClass().GetCount()); }); if (featureCount == 0) { validationSubmitErrors.Add("AOI is empty."); } else { aoi = await Ag_Analytics_Module.GetGeoJSONFromFeatureLayer(_selectedAOILayer); } } else { validationSubmitErrors.Add("AOI parameter must be selected."); } if (DateTime.Compare(_plantingDay1, _harvestDay) >= 0) { validationSubmitErrors.Add("PlantingDay1 must be earlier than HarvestDay."); } if (_downloadPath == null || string.IsNullOrEmpty(_downloadPath)) { validationSubmitErrors.Add("Download path must be selected."); } else { if (!Directory.Exists(_downloadPath)) { validationSubmitErrors.Add("Download path doesn't exsist."); } } if (validationSubmitErrors.Count > 0) { ValidationSubmitError = string.Join("\n", validationSubmitErrors); return; } if (validationInputError != null) { return; } SubmitButtonEnabled = false; ResultBoxVisible = "Hidden"; ProgressVisible = "Visible"; ProgressMessage = "Request Calling..."; DateTime started_datetime = DateTime.Now; SubmitStartedTime = started_datetime.ToString(); ResultErrorMessage = ""; IRestResponse apiResponse = await BackgroundTask.Run <IRestResponse>(() => { var client = new RestClient("https://ag-analytics.azure-api.net/yieldforecast/"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AlwaysMultipartFormData = true; request.AddHeader("Content-Type", "application/json"); //request.AddHeader("Ocp-Apim-Subscription-Key", "35520095b0a7408784e712e278d036a7"); request.AddParameter("MODELNAME", _selectedModelName); request.AddParameter("SHAPE", aoi); var scalarVariables = new { CropSeason = _selectedCropSeason, PlantingDay1 = String.Format("{0:M/d/yyyy}", _plantingDay1), HarvestDay = String.Format("{0:M/d/yyyy}", _harvestDay), SeedingDensity = _seedingDensity }; string scalarVariables_string = JsonConvert.SerializeObject(scalarVariables); request.AddParameter("ScalarVariables", scalarVariables_string); SubmitMODELNAME = _selectedModelName; SubmitAOI = aoi; SubmitScalarVariables = scalarVariables_string; SubmitDownloadFolder = _downloadPath; IRestResponse response = client.Execute(request); return(response); }, BackgroundProgressor.None); if (!apiResponse.IsSuccessful) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(response.ErrorMessage); ResultErrorMessage += "Response Error\n"; ResultErrorMessage += apiResponse.ErrorMessage; DisplayFailed(started_datetime); return; } dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(apiResponse.Content); ProgressMessage = "Downloading file..."; try { string filename = jsonData.raster_filename; await ExportFile(_downloadPath, filename); } catch (Exception e) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("No Result"); ResultErrorMessage += "Download Error\n"; ResultErrorMessage += e.Message; DisplayFailed(started_datetime); return; } ProgressVisible = "Hidden"; DateTime ended_datetime = DateTime.Now; CompletedTime = ended_datetime.ToString(); int seconds = (int)(ended_datetime.Subtract(started_datetime).TotalSeconds); ElapsedTime = seconds.ToString() + " Seconds"; ResultBoxBGColor = "#3a593a"; ResultBoxImage = "pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/DataReviewerLifecycleVerified32.png"; ResultBoxMessage = "Completed"; ResultErrorMessage = "There are no errors or warnings."; ResultBoxVisible = "Visible"; SubmitButtonEnabled = true; }
public async Task SubmitExecute() { ValidationSubmitError = null; List <string> validationSubmitErrors = new List <string>(); string aoi = null; if (_selectedAOILayer != null) { if (_selectedAOILayer is FeatureLayer) { FeatureLayer lyr = _selectedAOILayer as FeatureLayer; int featureCount = await QueuedTask.Run(() => { return(lyr.GetFeatureClass().GetCount()); }); if (featureCount == 0) { validationSubmitErrors.Add("AOI is empty."); } else { aoi = await Ag_Analytics_Module.GetGeoJSONFromFeatureLayer(lyr); } } else if (_selectedAOILayer is RasterLayer) { RasterLayer lyr = _selectedAOILayer as RasterLayer; string default_path = Path.GetDirectoryName(Project.Current.URI); string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss"); string rasterFileName = "AOI_Raster_" + timestamp + ".tif"; string outputRaster = Path.Combine(default_path, rasterFileName); var parameters = Geoprocessing.MakeValueArray(lyr.Name, outputRaster, "", "", "", false, false, "", false, false, "TIFF"); IGPResult result = await Geoprocessing.ExecuteToolAsync("management.CopyRaster", parameters, null, null, null, GPExecuteToolFlags.None); aoi = outputRaster; } } else { validationSubmitErrors.Add("AOI parameter must be selected."); } string selectedBands = null; List <string> _selectedBands = new List <string>(); foreach (var band in _bands) { if (band.Check_Status == true) { _selectedBands.Add(band.Band_Name); } } if (_selectedBands.Count > 0) { selectedBands = JsonConvert.SerializeObject(_selectedBands); } else { validationSubmitErrors.Add("Bands must be selected"); } //satellite: _selectedSatellite int _showLatestValue = _showLatest ? 1 : 0; string startDate = String.Format("{0:M/d/yyyy}", _startDate); string endDate = String.Format("{0:M/d/yyyy}", _endDate); if (!_showLatest) { if (DateTime.Compare(_startDate, _endDate) >= 0) { validationSubmitErrors.Add("Start Date must be earlier than End Date."); } } if (_downloadPath == null || string.IsNullOrEmpty(_downloadPath)) { validationSubmitErrors.Add("Download path must be selected."); } else { if (!Directory.Exists(_downloadPath)) { validationSubmitErrors.Add("Download path doesn't exsist."); } } SpatialReference outputSpatialReference = null; if (selectedSpatialReference == null) { outputSpatialReference = await QueuedTask.Run(() => { return(_selectedAOILayer.GetSpatialReference()); }); } else { outputSpatialReference = selectedSpatialReference; } if (outputSpatialReference.IsGeographic && _cellSize > 1) { validationSubmitErrors.Add("Resolution must be < 1 in geographic coordinate system(ex:0.0001)"); } else if (outputSpatialReference.IsProjected && _cellSize < 1) { validationSubmitErrors.Add("Resolution must be > 1 in projected coordinate system(ex:10)"); } if (validationSubmitErrors.Count > 0) { ValidationSubmitError = string.Join("\n", validationSubmitErrors); return; } if (validationInputError != null) { return; } //ProgressDialog progressDialog = new ProgressDialog("Please wait for result response..."); //progressDialog.Show(); int byweekValue = _checkbyweek ? 1 : 0; int filterValue = _checkfilter ? 1 : 0; int qafilterValue = _checkqafilter ? 1 : 0; int flattendataValue = _checkflattendata ? 1 : 0; SubmitButtonEnabled = false; ResultBoxVisible = "Hidden"; ProgressVisible = "Visible"; ProgressMessage = "Request Calling..."; DateTime started_datetime = DateTime.Now; SubmitStartedTime = started_datetime.ToString(); ResultErrorMessage = ""; IRestResponse apiResponse = await BackgroundTask.Run <IRestResponse>(() => { var client = new RestClient("https://ag-analytics.azure-api.net/hls-service/"); client.Timeout = -1; var request = new RestRequest(Method.POST); //request.AlwaysMultipartFormData = true; //request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); if (_selectedAOILayer is FeatureLayer) { request.AddParameter("aoi", aoi); } else if (_selectedAOILayer is RasterLayer) { request.AddFile("aoi", aoi); } request.AddParameter("Band", selectedBands); request.AddParameter("satellite", _selectedSatellite); request.AddParameter("showlatest", _showLatestValue); request.AddParameter("Startdate", startDate); request.AddParameter("Enddate", endDate); request.AddParameter("resolution", _cellSize); request.AddParameter("displaynormalvalues", _displaynormalvalues); request.AddParameter("qacloudperc", _qacloudperc); request.AddParameter("byweek", byweekValue); request.AddParameter("filter", filterValue); request.AddParameter("qafilter", qafilterValue); request.AddParameter("flatten_data", flattendataValue); request.AddParameter("projection", outputSpatialReference.Wkt); // these parameter options no need on ArcGIS pro request.AddParameter("legendtype", "Relative"); request.AddParameter("statistics", 0); // set always 0 request.AddParameter("return_tif", 1); // set always 1 SubmitAOI = aoi; SubmitBand = selectedBands; SubmitSatellite = _selectedSatellite; SubmitShowLatest = _showLatestValue.ToString(); SubmitStartDate = startDate; SubmitEndDate = endDate; SubmitResolution = _cellSize.ToString(); SubmitDisplayNormalValues = _displaynormalvalues.ToString(); SubmitQacloudperc = _qacloudperc.ToString(); SubmitByWeek = byweekValue.ToString(); SubmitFilter = filterValue.ToString(); SubmitQaFilter = qafilterValue.ToString(); SubmitFlattenData = flattendataValue.ToString(); SubmitProjection = outputSpatialReference.Wkt; SubmitDownloadFolder = _downloadPath; IRestResponse response = client.Execute(request); return(response); }, BackgroundProgressor.None); if (File.Exists(aoi)) { string default_path = Path.GetDirectoryName(Project.Current.URI); string filesToDelete = Path.GetFileNameWithoutExtension(aoi) + ".*"; string[] fileList = Directory.GetFiles(default_path, filesToDelete); foreach (string file in fileList) { File.Delete(file); } } if (!apiResponse.IsSuccessful) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(response.ErrorMessage); //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed Result. Please try again."); ResultErrorMessage += "Response Error\n"; ResultErrorMessage += apiResponse.ErrorMessage; DisplayFailed(started_datetime); return; } dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(apiResponse.Content); ProgressMessage = "Downloading tif files..."; try { foreach (dynamic item in jsonData) { string filename = item.download_url; await ExportFile(_downloadPath, filename); } } catch (Exception e) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("HLS API Error. Please try again."); ResultErrorMessage += "Download Error\n"; ResultErrorMessage += e.Message; DisplayFailed(started_datetime); return; } //progressDialog.Hide(); ProgressVisible = "Hidden"; ProgressMessage = ""; DateTime ended_datetime = DateTime.Now; CompletedTime = ended_datetime.ToString(); int seconds = (int)(ended_datetime.Subtract(started_datetime).TotalSeconds); ElapsedTime = seconds.ToString() + " Seconds"; ResultBoxBGColor = "#3a593a"; ResultBoxImage = "pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/DataReviewerLifecycleVerified32.png"; ResultBoxMessage = "Completed"; ResultErrorMessage = "There are no errors or warnings."; ResultBoxVisible = "Visible"; SubmitButtonEnabled = true; }
public async void SubmitExecute() { ValidationSubmitError = null; List <string> validationSubmitErrors = new List <string>(); string aoi = null; if (_selectedAOILayer != null) { if (_selectedAOILayer is FeatureLayer) { FeatureLayer lyr = _selectedAOILayer as FeatureLayer; int featureCount = await QueuedTask.Run(() => { return(lyr.GetFeatureClass().GetCount()); }); if (featureCount == 0) { validationSubmitErrors.Add("AOI is empty."); } else { aoi = await Ag_Analytics_Module.GetGeoJSONFromFeatureLayer(lyr); } } else if (_selectedAOILayer is RasterLayer) { RasterLayer lyr = _selectedAOILayer as RasterLayer; string default_path = Path.GetDirectoryName(Project.Current.URI); string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss"); string rasterFileName = "AOI_Raster_" + timestamp + ".tif"; string outputRaster = Path.Combine(default_path, rasterFileName); var parameters = Geoprocessing.MakeValueArray(lyr.Name, outputRaster, "", "", "", false, false, "", false, false, "TIFF"); IGPResult result = await Geoprocessing.ExecuteToolAsync("management.CopyRaster", parameters, null, null, null, GPExecuteToolFlags.None); aoi = outputRaster; } } else { validationSubmitErrors.Add("AOI parameter must be selected."); } if (_downloadPath == null || string.IsNullOrEmpty(_downloadPath)) { validationSubmitErrors.Add("Download path must be selected."); } else { if (!Directory.Exists(_downloadPath)) { validationSubmitErrors.Add("Download path doesn't exsist."); } } SpatialReference outputSpatialReference = null; if (selectedSpatialReference == null) { outputSpatialReference = await QueuedTask.Run(() => { return(_selectedAOILayer.GetSpatialReference()); }); } else { outputSpatialReference = selectedSpatialReference; } if (outputSpatialReference.IsGeographic && _cellSize > 1) { validationSubmitErrors.Add("Resolution must be < 1 in geographic coordinate system(ex:0.0001)"); } else if (outputSpatialReference.IsProjected && _cellSize < 1) { validationSubmitErrors.Add("Resolution must be > 1 in projected coordinate system(ex:10)"); } if (validationSubmitErrors.Count > 0) { ValidationSubmitError = string.Join("\n", validationSubmitErrors); return; } if (validationInputError != null) { return; } SubmitButtonEnabled = false; ResultBoxVisible = "Hidden"; ProgressMessage = "Request Calling..."; ProgressVisible = "Visible"; DateTime started_datetime = DateTime.Now; SubmitStartedTime = started_datetime.ToString(); ResultErrorMessage = ""; IRestResponse apiResponse = await BackgroundTask.Run <IRestResponse>(() => { var client = new RestClient("https://ag-analytics.azure-api.net/dem-service/"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AlwaysMultipartFormData = true; //request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); if (_selectedAOILayer is FeatureLayer) { request.AddParameter("aoi", aoi); } else if (_selectedAOILayer is RasterLayer) { request.AddFile("aoi", aoi); } request.AddParameter("Resolution", _cellSize); request.AddParameter("Elevation_Index", _checkElevationIndex ? "True" : "False"); request.AddParameter("Projection", string.Format("EPSG:{0}", outputSpatialReference.GcsWkid)); // these parameter options no need on ArcGIS pro request.AddParameter("Legend_Ranges", 3); SubmitAOI = aoi; SubmitResolution = _cellSize.ToString(); SubmitElevationIndex = _checkElevationIndex ? "True" : "False"; SubmitProjection = string.Format("EPSG:{0}", outputSpatialReference.GcsWkid); SubmitDownloadFolder = _downloadPath; IRestResponse response = client.Execute(request); return(response); }, BackgroundProgressor.None); if (File.Exists(aoi)) { string default_path = Path.GetDirectoryName(Project.Current.URI); string filesToDelete = Path.GetFileNameWithoutExtension(aoi) + ".*"; string[] fileList = Directory.GetFiles(default_path, filesToDelete); foreach (string file in fileList) { File.Delete(file); } } if (!apiResponse.IsSuccessful) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed Result. Please try again."); ResultErrorMessage += "Response Error\n"; ResultErrorMessage += apiResponse.ErrorMessage; DisplayFailed(started_datetime); return; } dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(apiResponse.Content); // download elevation files ProgressMessage = "Downloading tif files..."; try { string filename = jsonData.FileName; await ExportFile(_downloadPath, filename); } catch (Exception e) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("API Error. Please try again."); ResultErrorMessage += "Download Error\n"; ResultErrorMessage += e.Message; DisplayFailed(started_datetime); return; } // if return elevation index if (_checkElevationIndex) { try { var Index_Files_list = jsonData.Index_Files; for (int i = 0; i < Index_Files_list.Count; i++) { string index_filename = Index_Files_list[i]; await ExportFile(_downloadPath, index_filename); } } catch (Exception e) { //ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("No Elevation Index returned. Please try again."); ResultErrorMessage += "Download Error\n"; ResultErrorMessage += e.Message; DisplayFailed(started_datetime); return; } } ProgressVisible = "Hidden"; ProgressMessage = ""; DateTime ended_datetime = DateTime.Now; CompletedTime = ended_datetime.ToString(); int seconds = (int)(ended_datetime.Subtract(started_datetime).TotalSeconds); ElapsedTime = seconds.ToString() + " Seconds"; ResultBoxBGColor = "#3a593a"; ResultBoxImage = "pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/DataReviewerLifecycleVerified32.png"; ResultBoxMessage = "Completed"; ResultErrorMessage = "There are no errors or warnings."; ResultBoxVisible = "Visible"; SubmitButtonEnabled = true; }