diff --git a/FarmmapsApi/Services/GeneralService.cs b/FarmmapsApi/Services/GeneralService.cs index b122253..ac0574a 100644 --- a/FarmmapsApi/Services/GeneralService.cs +++ b/FarmmapsApi/Services/GeneralService.cs @@ -345,7 +345,7 @@ namespace FarmmapsApi.Services } - public async Task FindSatelliteItem(Item cropfieldItem, string satelliteTaskCode, string FieldName, bool StoreStatistics) { + public async Task FindSatelliteItem(Item cropfieldItem, string satelliteTaskCode) { var taskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, satelliteTaskCode); @@ -384,11 +384,6 @@ namespace FarmmapsApi.Services } return selectedSatelliteItem; - - - - - } //VanDerSat @@ -416,32 +411,6 @@ namespace FarmmapsApi.Services return itemTask.Code; } - - public async Task RunWatBalTask(Item cropfieldItem) { - - _logger.LogInformation("Gathering WatBal information for cropfield, this might take a while!"); - - var taskmapRequest = new TaskRequest { TaskType = WATBAL_TASK }; - string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest); - - await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { - var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); - _logger.LogInformation($"Waiting on VanDerSat data; status: {itemTaskStatus.State}"); - if (itemTaskStatus.IsFinished) - tokenSource.Cancel(); - - }); - - var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); - - if (itemTask.State == ItemTaskState.Error) { - _logger.LogError($"Something went wrong when trying to process WatBal data; {itemTask.Message}"); - - } - - return itemTask.Code; - } - public async Task FindVanDerSatItem(Item cropfieldItem, string VanDerSatTaskCode, string FieldName, bool StoreStatistics) { var taskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, VanDerSatTaskCode); @@ -478,7 +447,6 @@ namespace FarmmapsApi.Services Console.WriteLine($"{numbervandersat} Van der Sat images found"); } - var VanderSatStatistics = item.Data["layers"][0]["renderer"]["band"]["statistics"]; var VanDerSatImageDate = (DateTime)item.DataDate; var VanderSatDate = VanDerSatImageDate.ToString("yyyy-MM-dd"); @@ -512,6 +480,32 @@ namespace FarmmapsApi.Services } + public async Task RunWatBalTask(Item cropfieldItem) { + + _logger.LogInformation("Gathering WatBal information for cropfield, this might take a while!"); + + var taskmapRequest = new TaskRequest { TaskType = WATBAL_TASK }; + string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest); + + await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { + var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); + _logger.LogInformation($"Waiting on VanDerSat data; status: {itemTaskStatus.State}"); + if (itemTaskStatus.IsFinished) + tokenSource.Cancel(); + + }); + + var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); + + if (itemTask.State == ItemTaskState.Error) { + _logger.LogError($"Something went wrong when trying to process WatBal data; {itemTask.Message}"); + + } + + return itemTask.Code; + } + + public async Task FindWatBalItem(Item cropfieldItem, string WatBalTaskCode, string FieldName, bool StoreStatistics) { @@ -519,10 +513,8 @@ namespace FarmmapsApi.Services // find WatBal data temporal - var temporalItem = await FindChildItemAsync(cropfieldItem.Code, TEMPORAL_ITEMTYPE, "WatBal");//, item => item.SourceTask == VANDERSAT_TASK && - // taskStatus.Finished >= item.Created && - // taskStatus.Finished <= item.Created.Value.AddHours(1)); - + var temporalItem = await FindChildItemAsync(cropfieldItem.Code, TEMPORAL_ITEMTYPE, "Watbal", + item => item.SourceTask == WATBAL_TASK && taskStatus.Finished >= item.Created && taskStatus.Finished <= item.Created.Value.AddHours(1)); if (temporalItem == null) { _logger.LogError("Temporal item not found"); diff --git a/FarmmapsNbs/NbsApplication.cs b/FarmmapsNbs/NbsApplication.cs index 196f9f4..1000354 100644 --- a/FarmmapsNbs/NbsApplication.cs +++ b/FarmmapsNbs/NbsApplication.cs @@ -120,7 +120,7 @@ namespace FarmmapsNbs // Select a particular satellite item from satelliteTask - Item satalliteItem = await _generalService.FindSatelliteItem(cropfieldItem, _settings.SatelliteTaskCode, FieldName, StoreStatistics); + Item satalliteItem = await _generalService.FindSatelliteItem(cropfieldItem, _settings.SatelliteTaskCode); var satelliteBand = satalliteItem.Data["layers"][0]["name"]; var satelliteStatistics = satalliteItem.Data["layers"][0]["renderer"]["band"]["statistics"]; @@ -130,21 +130,18 @@ namespace FarmmapsNbs //Store data to csv if (StoreStatistics == true) { - var SatelliteFile = $"\\Downloads\\DataSatellite_{FieldName}.csv"; - var NewLineField = $"\"Field\":{FieldName}" + Environment.NewLine; - var NewLineDate = $"\"date\":{satalliteItem.DataDate}" + Environment.NewLine; - var i = 0; - foreach (var item in satelliteStatistics) - { - //var NewLines2; - if (i == 0) - { - File.AppendAllText(SatelliteFile, NewLineDate); - i++; - } - File.AppendAllText(SatelliteFile, $"{item}" + Environment.NewLine); + var SatelliteStatsFile = $"{DownloadFolder}/SatelliteDataStatistics_{FieldName}_{satalliteItem.DataDate.Value:d}.csv"; + using var w = new StreamWriter(SatelliteStatsFile); + { + foreach (var item in satelliteStatistics) + { + var line = string.Format("{0}", item); + w.WriteLine(line); + w.Flush(); + } } + } @@ -216,22 +213,6 @@ namespace FarmmapsNbs } - //// check if vandersat task not yet done, do here and save taskcode - //if (useCreatedCropfield == false || string.IsNullOrEmpty(_settings.VanDerSatTaskCode)) { - // var VanDerSatTaskCode = await _generalService.RunVanDerSatTask(cropfieldItem); - // _settings.VanDerSatTaskCode = VanDerSatTaskCode; - // SaveSettings(settingsfile); - //} - - //// Select a particular image item from VanDerSat - //Item VanDerSatItem = await _generalService.FindVanDerSatItem(cropfieldItem, _settings.VanDerSatTaskCode, FieldName, StoreStatistics); - - - //// download the geotiff - //_logger.LogInformation("Downloading geotiff file"); - //await _farmmapsApiService.DownloadItemAsync(VanDerSatItem.Code, - // Path.Combine(DownloadFolder, $"nbs_VanDerSatGeotiff_{input.OutputFileName}.zip")); - _logger.LogInformation($"Calculating targetN with targetYield: {input.TargetYield}"); var targetNItem = await _nitrogenService.CreateTargetNItem(cropfieldItem); var targetNData = await _nitrogenService.CalculateTargetN(cropfieldItem, targetNItem, plantingDate, diff --git a/FarmmapsNbs/NitrogenInput.json b/FarmmapsNbs/NitrogenInput.json index 416d05b..064956d 100644 --- a/FarmmapsNbs/NitrogenInput.json +++ b/FarmmapsNbs/NitrogenInput.json @@ -1,83 +1,42 @@ [ - { - "file": "Scan_1_20190605.json", - "inputVariable": "irmi", - "inputLayerName": "", - "outputFileName": "vranbs1", - "plantingDate": "2019-04-18", - "measurementDate": "2019-06-05", - "potatoPurposeType": "consumption", - "targetYield": 45, - "geometryJson": { - "type": "Polygon", - "coordinates": [ - [ - [ 3.40843828875524, 50.638966444680605 ], - [ 3.408953272886064, 50.639197789621612 ], - [ 3.409242951459603, 50.639469958681836 ], - [ 3.409328782148028, 50.639612846807708 ], - [ 3.409457528180712, 50.639789755314411 ], - [ 3.409639918393741, 50.640014292074966 ], - [ 3.409833037442765, 50.640211611372706 ], - [ 3.410069071836049, 50.640395321698435 ], - [ 3.410380208081761, 50.640572227259661 ], - [ 3.410605513638958, 50.640715112034222 ], - [ 3.411925160474145, 50.641177783561204 ], - [ 3.411935889310142, 50.640728720085136 ], - [ 3.412590348309737, 50.63948356709389 ], - [ 3.413244807309242, 50.638224772339846 ], - [ 3.413400375432099, 50.637901562841307 ], - [ 3.413539850300779, 50.637449065809889 ], - [ 3.413475477284437, 50.637418445552932 ], - [ 3.40999396998362, 50.637449065810451 ], - [ 3.409940325803365, 50.638102293212661 ], - [ 3.409575545377398, 50.638483338338325 ], - [ 3.409060561246574, 50.638707881340494 ], - [ 3.40843828875524, 50.638966444680605 ] - ] - ] - }, - - "GenerateTaskmap": true, - "OutputType": "shape", // "shape" or "isoxml" if isoxml also add ddiCode - "Precision": "2", - "MaximumClasses": "4", - "DdiCode": "0006", - "CellWidth": "3", - "CellHeight": "10", - "Centered": "true", - "StartPoint": { - "type": "Point", - "coordinates": [ 3.409341600000000, 50.638991900000001 ] - }, - "EndPoint": { // if no angle - "type": "Point", - "coordinates": [ 3.411897000000000, 50.638981500000000 ] - } - //"Angle": "317.0" // if no endpoint - - }, - //{ - // "file": "", // keep emptpy to use satellite image - // "inputVariable": "wdvi", - // "InputLayerName": "wdvi", - // "outputFileName": "rtest1", - // "plantingDate": "2020-05-01", - // "measurementDate": "2020-06-14", + // "UseCreatedCropfield": true, + // "file": "Scan_1_20190605.json", + // "inputVariable": "irmi", + // "inputLayerName": "", + // "outputFileName": "vranbs1", + // "fieldName": "testJson_irmi", + // "storeSatelliteStatistics": true, + // "plantingDate": "2019-04-18", + // "measurementDate": "2019-06-05", // "potatoPurposeType": "consumption", - // "targetYield": 60, + // "targetYield": 45, // "geometryJson": { // "type": "Polygon", // "coordinates": [ // [ - // [ 4.960707146896585, 52.800583669708487 ], - // [ 4.960645975538824, 52.800470217610922 ], - // [ 4.962140695752897, 52.799177147194797 ], - // [ 4.967523821195745, 52.801502400041208 ], - // [ 4.966336768950911, 52.802543735879809 ], - // [ 4.961711880764330, 52.801009996856429 ], - // [ 4.960707146896585, 52.800583669708487 ] + // [ 3.40843828875524, 50.638966444680605 ], + // [ 3.408953272886064, 50.639197789621612 ], + // [ 3.409242951459603, 50.639469958681836 ], + // [ 3.409328782148028, 50.639612846807708 ], + // [ 3.409457528180712, 50.639789755314411 ], + // [ 3.409639918393741, 50.640014292074966 ], + // [ 3.409833037442765, 50.640211611372706 ], + // [ 3.410069071836049, 50.640395321698435 ], + // [ 3.410380208081761, 50.640572227259661 ], + // [ 3.410605513638958, 50.640715112034222 ], + // [ 3.411925160474145, 50.641177783561204 ], + // [ 3.411935889310142, 50.640728720085136 ], + // [ 3.412590348309737, 50.63948356709389 ], + // [ 3.413244807309242, 50.638224772339846 ], + // [ 3.413400375432099, 50.637901562841307 ], + // [ 3.413539850300779, 50.637449065809889 ], + // [ 3.413475477284437, 50.637418445552932 ], + // [ 3.40999396998362, 50.637449065810451 ], + // [ 3.409940325803365, 50.638102293212661 ], + // [ 3.409575545377398, 50.638483338338325 ], + // [ 3.409060561246574, 50.638707881340494 ], + // [ 3.40843828875524, 50.638966444680605 ] // ] // ] // }, @@ -92,14 +51,61 @@ // "Centered": "true", // "StartPoint": { // "type": "Point", - // "coordinates": [ 4.960707146896585, 52.800583669708487 ] + // "coordinates": [ 3.409341600000000, 50.638991900000001 ] // }, // "EndPoint": { // if no angle // "type": "Point", - // "coordinates": [ 4.961711880764330, 52.801009996856429 ] + // "coordinates": [ 3.411897000000000, 50.638981500000000 ] // } // //"Angle": "317.0" // if no endpoint - //} + + //}, + + { + "UseCreatedCropfield": true, + "file": "", // keep emptpy to use satellite image + "inputVariable": "wdvi", + "InputLayerName": "wdvi", + "outputFileName": "rtest1", + "fieldName": "test_satelliteWDVI", + "storeSatelliteStatistics": true, + "plantingDate": "2020-05-01", + "measurementDate": "2020-06-14", + "potatoPurposeType": "consumption", + "targetYield": 60, + "geometryJson": { + "type": "Polygon", + "coordinates": [ + [ + [ 4.960707146896585, 52.800583669708487 ], + [ 4.960645975538824, 52.800470217610922 ], + [ 4.962140695752897, 52.799177147194797 ], + [ 4.967523821195745, 52.801502400041208 ], + [ 4.966336768950911, 52.802543735879809 ], + [ 4.961711880764330, 52.801009996856429 ], + [ 4.960707146896585, 52.800583669708487 ] + ] + ] + }, + + "GenerateTaskmap": true, + "OutputType": "shape", // "shape" or "isoxml" if isoxml also add ddiCode + "Precision": "2", + "MaximumClasses": "4", + "DdiCode": "0006", + "CellWidth": "3", + "CellHeight": "10", + "Centered": "true", + "StartPoint": { + "type": "Point", + "coordinates": [ 4.960707146896585, 52.800583669708487 ] + }, + "EndPoint": { // if no angle + "type": "Point", + "coordinates": [ 4.961711880764330, 52.801009996856429 ] + } + //"Angle": "317.0" // if no endpoint + } ] \ No newline at end of file