added vandersat data to sample code
This commit is contained in:
		| @@ -12,23 +12,19 @@ using static FarmmapsApiSamples.Constants; | ||||
|  | ||||
| namespace FarmmapsApi.Services | ||||
| { | ||||
|     public class GeneralService | ||||
|     { | ||||
|     public class GeneralService { | ||||
|         private readonly ILogger<GeneralService> _logger; | ||||
|         private readonly FarmmapsApiService _farmmapsApiService; | ||||
|  | ||||
|         public GeneralService(ILogger<GeneralService> logger, FarmmapsApiService farmmapsApiService) | ||||
|         { | ||||
|         public GeneralService(ILogger<GeneralService> logger, FarmmapsApiService farmmapsApiService) { | ||||
|             _logger = logger; | ||||
|             _farmmapsApiService = farmmapsApiService; | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> CreateCropfieldItemAsync(string parentItemCode, string name, int year, | ||||
|             string fieldGeomJson, string data = "{}") | ||||
|         { | ||||
|             string fieldGeomJson, string data = "{}") { | ||||
|             var currentYear = new DateTime(year, 1, 1); | ||||
|             var cropfieldItemRequest = new ItemRequest() | ||||
|             { | ||||
|             var cropfieldItemRequest = new ItemRequest() { | ||||
|                 ParentCode = parentItemCode, | ||||
|                 ItemType = CROPFIELD_ITEMTYPE, | ||||
|                 Name = name, | ||||
| @@ -41,8 +37,7 @@ namespace FarmmapsApi.Services | ||||
|             return await _farmmapsApiService.CreateItemAsync(cropfieldItemRequest); | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> UploadDataAsync(UserRoot root, string itemType, string filePath, string itemName) | ||||
|         { | ||||
|         public async Task<Item> UploadDataAsync(UserRoot root, string itemType, string filePath, string itemName) { | ||||
|             var startUpload = DateTime.UtcNow; | ||||
|             var result = await _farmmapsApiService.UploadFile(filePath, root.Code, | ||||
|                 progress => _logger.LogInformation($"Status: {progress.Status} - BytesSent: {progress.BytesSent}")); | ||||
| @@ -55,8 +50,7 @@ namespace FarmmapsApi.Services | ||||
|                      i.Name.ToLower().Contains(itemName.ToLower())); | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> UploadZipWithShapeAsync(UserRoot root, string filePath, string itemName) | ||||
|         { | ||||
|         public async Task<Item> UploadZipWithShapeAsync(UserRoot root, string filePath, string itemName) { | ||||
|             var startUpload = DateTime.UtcNow; | ||||
|             var result = await _farmmapsApiService.UploadFile(filePath, root.Code, | ||||
|                 progress => _logger.LogInformation($"Status: {progress.Status} - BytesSent: {progress.BytesSent}")); | ||||
| @@ -66,11 +60,10 @@ namespace FarmmapsApi.Services | ||||
|  | ||||
|             return await FindChildItemAsync(root.Code, SHAPE_PROCESSED_ITEMTYPE, itemName, | ||||
|                 i => i.Created >= startUpload && | ||||
|                      i.Name.ToLower().Contains(itemName.ToLower()));; | ||||
|                      i.Name.ToLower().Contains(itemName.ToLower())); ; | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> ShapeToGeotiff(Item shapeItem) | ||||
|         { | ||||
|         public async Task<Item> ShapeToGeotiff(Item shapeItem) { | ||||
|             await RunAndWaitForTask(shapeItem, "vnd.farmmaps.task.shapetogeotiff"); | ||||
|  | ||||
|             // the parent of the shape item is now the tiff item | ||||
| @@ -79,14 +72,12 @@ namespace FarmmapsApi.Services | ||||
|         } | ||||
|  | ||||
|  | ||||
|         public async Task<Item> GeotiffToShape(Item tiffItem) | ||||
|         { | ||||
|             var taskmapRequest = new TaskRequest {TaskType = TASKMAP_TASK}; | ||||
|         public async Task<Item> GeotiffToShape(Item tiffItem) { | ||||
|             var taskmapRequest = new TaskRequest { TaskType = TASKMAP_TASK }; | ||||
|  | ||||
|             string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(tiffItem.Code, taskmapRequest); | ||||
|  | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { | ||||
|                 var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(tiffItem.Code, itemTaskCode); | ||||
|                 _logger.LogInformation($"Waiting on converting geotiff to shape; status: {itemTaskStatus.State}"); | ||||
|                 if (itemTaskStatus.IsFinished) | ||||
| @@ -94,8 +85,7 @@ namespace FarmmapsApi.Services | ||||
|             }); | ||||
|  | ||||
|             var itemTask = await _farmmapsApiService.GetTaskStatusAsync(tiffItem.Code, itemTaskCode); | ||||
|             if (itemTask.State == ItemTaskState.Error) | ||||
|             { | ||||
|             if (itemTask.State == ItemTaskState.Error) { | ||||
|                 _logger.LogError($"Something went wrong with task execution: {itemTask.Message}"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -104,8 +94,7 @@ namespace FarmmapsApi.Services | ||||
|             var itemName = "Taskmap"; | ||||
|             var taskMapItem = await FindChildItemAsync(tiffItem.Code, | ||||
|                 SHAPE_PROCESSED_ITEMTYPE, itemName); | ||||
|             if (taskMapItem == null) | ||||
|             { | ||||
|             if (taskMapItem == null) { | ||||
|                 _logger.LogError("Could not find the shape taskmap as a child item under the input"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -115,18 +104,15 @@ namespace FarmmapsApi.Services | ||||
|  | ||||
|  | ||||
|         public async Task<ItemTaskStatus> RunAndWaitForTask(Item subjectItem, string taskIdentifier, | ||||
|             Action<TaskRequest> configureCallback = null, int retrySeconds = 3) | ||||
|         { | ||||
|             var taskRequest = new TaskRequest() | ||||
|             { | ||||
|             Action<TaskRequest> configureCallback = null, int retrySeconds = 3) { | ||||
|             var taskRequest = new TaskRequest() { | ||||
|                 TaskType = taskIdentifier | ||||
|             }; | ||||
|             configureCallback?.Invoke(taskRequest); | ||||
|  | ||||
|             var taskCode = await _farmmapsApiService.QueueTaskAsync(subjectItem.Code, taskRequest); | ||||
|  | ||||
|             await PollTask(TimeSpan.FromSeconds(retrySeconds), async (tokenSource) => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(retrySeconds), async (tokenSource) => { | ||||
|                 _logger.LogInformation($"Checking {taskIdentifier} task status"); | ||||
|                 var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(subjectItem.Code, taskCode); | ||||
|                 if (itemTaskStatus.IsFinished) | ||||
| @@ -139,28 +125,24 @@ namespace FarmmapsApi.Services | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> FindChildItemAsync(string parentCode, string itemType, string containsName, | ||||
|             Func<Item, bool> filter = null, int maxTries = 10) | ||||
|         { | ||||
|             Func<Item, bool> filter = null, int maxTries = 10) { | ||||
|             Item dataItem = null; | ||||
|             int tries = 0; | ||||
|             await PollTask(TimeSpan.FromSeconds(3), async source => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(3), async source => { | ||||
|                 _logger.LogInformation($"Trying to get {containsName} data"); | ||||
|                 var uploadedFilesChildren = await _farmmapsApiService.GetItemChildrenAsync(parentCode, itemType); | ||||
|  | ||||
|  | ||||
|                 Func<Item, bool> func = filter ?? (i => i.Name.ToLower().Contains(containsName.ToLower())); | ||||
|                 dataItem = uploadedFilesChildren.FirstOrDefault(func); | ||||
|                 if (dataItem != null || tries == maxTries) | ||||
|                 { | ||||
|                 if (dataItem != null || tries == maxTries) { | ||||
|                     source.Cancel(); | ||||
|                 } | ||||
|  | ||||
|                 tries++; | ||||
|             }); | ||||
|  | ||||
|             if (dataItem == null) | ||||
|             { | ||||
|             if (dataItem == null) { | ||||
|                 _logger.LogError("dataItem not found"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -169,14 +151,12 @@ namespace FarmmapsApi.Services | ||||
|             return dataItem; | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> RunBofekTask(Item cropfieldItem) | ||||
|         { | ||||
|             var taskmapRequest = new TaskRequest {TaskType = BOFEK_TASK}; | ||||
|         public async Task<Item> RunBofekTask(Item cropfieldItem) { | ||||
|             var taskmapRequest = new TaskRequest { TaskType = BOFEK_TASK }; | ||||
|  | ||||
|             string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest); | ||||
|  | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { | ||||
|                 var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|                 _logger.LogInformation($"Waiting on retreiving BOFEK data; status: {itemTaskStatus.State}"); | ||||
|                 if (itemTaskStatus.IsFinished) | ||||
| @@ -184,8 +164,7 @@ namespace FarmmapsApi.Services | ||||
|             }); | ||||
|  | ||||
|             var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|             if (itemTask.State == ItemTaskState.Error) | ||||
|             { | ||||
|             if (itemTask.State == ItemTaskState.Error) { | ||||
|                 _logger.LogError($"Something went wrong with task execution: {itemTask.Message}"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -194,8 +173,7 @@ namespace FarmmapsApi.Services | ||||
|             var itemName = "bofek"; | ||||
|             var bofekItem = await FindChildItemAsync(cropfieldItem.Code, | ||||
|                 SHAPE_PROCESSED_ITEMTYPE, itemName); | ||||
|             if (bofekItem == null) | ||||
|             { | ||||
|             if (bofekItem == null) { | ||||
|                 _logger.LogError("Could not find the BOFEK data as a child item under the cropfield"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -203,14 +181,12 @@ namespace FarmmapsApi.Services | ||||
|             return bofekItem; | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> RunAhnTask(Item cropfieldItem) | ||||
|         { | ||||
|             var taskmapRequest = new TaskRequest {TaskType = AHN_TASK}; | ||||
|         public async Task<Item> RunAhnTask(Item cropfieldItem) { | ||||
|             var taskmapRequest = new TaskRequest { TaskType = AHN_TASK }; | ||||
|  | ||||
|             string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest); | ||||
|  | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { | ||||
|                 var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|                 _logger.LogInformation($"Waiting on retreiving AHN data; status: {itemTaskStatus.State}"); | ||||
|                 if (itemTaskStatus.IsFinished) | ||||
| @@ -218,8 +194,7 @@ namespace FarmmapsApi.Services | ||||
|             }); | ||||
|  | ||||
|             var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|             if (itemTask.State == ItemTaskState.Error) | ||||
|             { | ||||
|             if (itemTask.State == ItemTaskState.Error) { | ||||
|                 _logger.LogError($"Something went wrong with task execution: {itemTask.Message}"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -228,8 +203,7 @@ namespace FarmmapsApi.Services | ||||
|             var itemName = "ahn"; | ||||
|             var ahnItem = await FindChildItemAsync(cropfieldItem.Code, | ||||
|                 GEOTIFF_PROCESSED_ITEMTYPE, itemName); | ||||
|             if (ahnItem == null) | ||||
|             { | ||||
|             if (ahnItem == null) { | ||||
|                 _logger.LogError("Could not find the AHN data as a child item under the cropfield"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -237,14 +211,12 @@ namespace FarmmapsApi.Services | ||||
|             return ahnItem; | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> RunShadowTask(Item cropfieldItem) | ||||
|         { | ||||
|             var taskmapRequest = new TaskRequest {TaskType = SHADOW_TASK}; | ||||
|         public async Task<Item> RunShadowTask(Item cropfieldItem) { | ||||
|             var taskmapRequest = new TaskRequest { TaskType = SHADOW_TASK }; | ||||
|  | ||||
|             string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest); | ||||
|  | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { | ||||
|                 var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|                 _logger.LogInformation($"Waiting on calculation shadow data; status: {itemTaskStatus.State}"); | ||||
|                 if (itemTaskStatus.IsFinished) | ||||
| @@ -252,8 +224,7 @@ namespace FarmmapsApi.Services | ||||
|             }); | ||||
|  | ||||
|             var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|             if (itemTask.State == ItemTaskState.Error) | ||||
|             { | ||||
|             if (itemTask.State == ItemTaskState.Error) { | ||||
|                 _logger.LogError($"Something went wrong with task execution: {itemTask.Message}"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -262,8 +233,7 @@ namespace FarmmapsApi.Services | ||||
|             var itemName = "shadow"; | ||||
|             var shadowItem = await FindChildItemAsync(cropfieldItem.Code, | ||||
|                 GEOTIFF_PROCESSED_ITEMTYPE, itemName); | ||||
|             if (shadowItem == null) | ||||
|             { | ||||
|             if (shadowItem == null) { | ||||
|                 _logger.LogError("Could not find the shadow data as a child item under the cropfield"); | ||||
|                 return null; | ||||
|             } | ||||
| @@ -272,27 +242,24 @@ namespace FarmmapsApi.Services | ||||
|         } | ||||
|  | ||||
|  | ||||
|         public async Task<string> RunSatelliteTask(Item cropfieldItem) | ||||
|         { | ||||
|         public async Task<string> RunSatelliteTask(Item cropfieldItem) { | ||||
|  | ||||
|             _logger.LogInformation("Gathering satellite information for cropfield, this might take a while!"); | ||||
|  | ||||
|             var taskmapRequest = new TaskRequest { TaskType = SATELLITE_TASK }; | ||||
|             string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest); | ||||
|  | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => | ||||
|             { | ||||
|             await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) => { | ||||
|                 var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|                 _logger.LogInformation($"Waiting on satellite data; status: {itemTaskStatus.State}"); | ||||
|                 if (itemTaskStatus.IsFinished) | ||||
|                     tokenSource.Cancel(); | ||||
|                  | ||||
|  | ||||
|             }); | ||||
|  | ||||
|             var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode); | ||||
|  | ||||
|             if (itemTask.State == ItemTaskState.Error) | ||||
|             { | ||||
|             if (itemTask.State == ItemTaskState.Error) { | ||||
|                 _logger.LogError($"Something went wrong when trying to process satellite data; {itemTask.Message}"); | ||||
|  | ||||
|             } | ||||
| @@ -301,8 +268,7 @@ namespace FarmmapsApi.Services | ||||
|         } | ||||
|  | ||||
|  | ||||
|         public async Task<Item> FindSatelliteItem(Item cropfieldItem, string satelliteTaskCode) | ||||
|         { | ||||
|         public async Task<Item> FindSatelliteItem(Item cropfieldItem, string satelliteTaskCode, string FieldName, bool StoreStatistics) { | ||||
|  | ||||
|             var taskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, satelliteTaskCode); | ||||
|  | ||||
| @@ -314,8 +280,7 @@ namespace FarmmapsApi.Services | ||||
|                                                                  taskStatus.Finished <= item.Created.Value.AddHours(1)); | ||||
|  | ||||
|  | ||||
|             if (temporalItem == null) | ||||
|             { | ||||
|             if (temporalItem == null) { | ||||
|                 _logger.LogError("Temporal item not found"); | ||||
|  | ||||
|             } | ||||
| @@ -325,19 +290,18 @@ namespace FarmmapsApi.Services | ||||
|             _logger.LogInformation("Available satellite images:"); | ||||
|             var count = 0; | ||||
|             TimeSpan.FromSeconds(0.5); | ||||
|             foreach (var item in satelliteTiffs) | ||||
|             { | ||||
|             foreach (var item in satelliteTiffs) { | ||||
|  | ||||
|                 Console.WriteLine($"Satellite image #{count}: {item.DataDate}"); | ||||
|                 count++; | ||||
|             } | ||||
|  | ||||
|             _logger.LogInformation("Enter satellite image number for NBS application"); | ||||
|             int elment = Int32.Parse(Console.ReadLine()); | ||||
|  | ||||
|             var selectedSatelliteItem = satelliteTiffs[elment]; | ||||
|  | ||||
|             if (selectedSatelliteItem == null) | ||||
|             { | ||||
|             if (selectedSatelliteItem == null) { | ||||
|                 _logger.LogError("Satellite item not found"); | ||||
|  | ||||
|             } | ||||
| @@ -350,8 +314,168 @@ namespace FarmmapsApi.Services | ||||
|  | ||||
|         } | ||||
|  | ||||
|         //VanDerSat | ||||
|         public async Task<string> RunVanDerSatTask(Item cropfieldItem) { | ||||
|  | ||||
|             _logger.LogInformation("Gathering VanDerSat information for cropfield, this might take a while!"); | ||||
|  | ||||
|             var taskmapRequest = new TaskRequest { TaskType = VANDERSAT_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 VanDerSat data; {itemTask.Message}"); | ||||
|  | ||||
|             } | ||||
|  | ||||
|             return itemTask.Code; | ||||
|         } | ||||
|  | ||||
|         public async Task<string> 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<Item> FindVanDerSatItem(Item cropfieldItem, string VanDerSatTaskCode, string FieldName, bool StoreStatistics) { | ||||
|  | ||||
|             var taskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, VanDerSatTaskCode); | ||||
|  | ||||
|  | ||||
|             // find VanDerSat data temporal  | ||||
|             var temporalItem = await FindChildItemAsync(cropfieldItem.Code, TEMPORAL_ITEMTYPE, "Van der Sat"); | ||||
|  | ||||
|  | ||||
|             if (temporalItem == null) { | ||||
|                 _logger.LogError("Temporal item not found"); | ||||
|  | ||||
|             } | ||||
|  | ||||
|             var VanDerSatiffs = await _farmmapsApiService.GetItemChildrenAsync(temporalItem.Code); | ||||
|  | ||||
|             _logger.LogInformation("Available VanDerSat images:"); | ||||
|             var count = 0; | ||||
|             TimeSpan.FromSeconds(0.5); | ||||
|             foreach (var item in VanDerSatiffs) { | ||||
|  | ||||
|                 //Console.WriteLine($"Van der Sat image #{count}: {item.DataDate}"); | ||||
|                 //if (count == 0 ) { | ||||
|                 //    Console.WriteLine($"vandersat image #{count}: {item.Data}"); | ||||
|                 //} | ||||
|  | ||||
|                 if (StoreStatistics == true) { | ||||
|                     var VanDerSatBand = item.Data["layers"][0]["name"]; | ||||
|                     var VanderSatFile = $"C:\\Akkerweb\\{FieldName}_{VanDerSatBand}.csv"; | ||||
|                     var NewLineField = $"Field,Date,Mean,Min,Max,Standard deviation, ConfidenceInterval low, ConfidenceInterval high" + Environment.NewLine; | ||||
|                     if (count == 0) { | ||||
|                         File.AppendAllText(VanderSatFile, NewLineField); | ||||
|                         var numbervandersat = VanDerSatiffs.Count; | ||||
|                         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"); | ||||
|                     var NewLineDate = $"\"date\":{VanderSatDate}" + Environment.NewLine; | ||||
|                     if (VanderSatStatistics == null) { | ||||
|                         Console.WriteLine($"{VanderSatDate} no statistics found"); | ||||
|                         //Console.WriteLine($"Available data: {item.Data}"); | ||||
|                     } else { | ||||
|                         File.AppendAllText(VanderSatFile, $"{FieldName},{VanderSatDate},{VanderSatStatistics["mean"]},{VanderSatStatistics["min"]},{VanderSatStatistics["max"]},{VanderSatStatistics["stddev"]},{VanderSatStatistics["confidenceIntervalLow"]},{VanderSatStatistics["confidenceIntervalHigh"]}" + Environment.NewLine); | ||||
|                     } | ||||
|  | ||||
|  | ||||
|                 } | ||||
|  | ||||
|                 count++; | ||||
|             } | ||||
|             //_logger.LogInformation("Enter VanDerSat image number"); | ||||
|             //int element = Int32.Parse(Console.ReadLine()); | ||||
|             int element = 0; | ||||
|             var selectedVanDerSatItem = VanDerSatiffs[element]; | ||||
|  | ||||
|             if (selectedVanDerSatItem == null) { | ||||
|                 _logger.LogError("VanDerSat item not found"); | ||||
|  | ||||
|             } | ||||
|  | ||||
|             return selectedVanDerSatItem; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|         } | ||||
|  | ||||
|         public async Task<Item> FindWatBalItem(Item cropfieldItem, string WatBalTaskCode, string FieldName, bool StoreStatistics) { | ||||
|  | ||||
|             var taskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, WatBalTaskCode); | ||||
|  | ||||
|  | ||||
|             // 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)); | ||||
|  | ||||
|  | ||||
|             if (temporalItem == null) { | ||||
|                 _logger.LogError("Temporal item not found"); | ||||
|  | ||||
|             } | ||||
|  | ||||
|             var WatBalData = await _farmmapsApiService.GetItemChildrenAsync(temporalItem.Code); | ||||
|  | ||||
|             _logger.LogInformation("Available WatBal Data:"); | ||||
|             var count = 0; | ||||
|             TimeSpan.FromSeconds(0.5); | ||||
|             foreach (var item in WatBalData) { | ||||
|  | ||||
|                 Console.WriteLine($"WatBal data #{count}: {item.DataDate}"); | ||||
|                 if (count == 0) { | ||||
|                     Console.WriteLine($"WatBalData #{count}: {item.Data}"); | ||||
|                 } | ||||
|  | ||||
|                 count++; | ||||
|             } | ||||
|  | ||||
|             int element = 0; | ||||
|             var selectedWatBalItem = WatBalData[element]; | ||||
|  | ||||
|             if (selectedWatBalItem == null) { | ||||
|                 _logger.LogError("WatBal item not found"); | ||||
|  | ||||
|             } | ||||
|  | ||||
|             return selectedWatBalItem; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user