solved issue where sometimes satelliteItem contains only 2 layers
Normally 3 layers 0: ndvi, 1: wdvi, 2: natural. In some cases only 2 layers: 0: wdvi, 1: natural. Which caused error when requesting statistics. This happened for example for cropfieldItem.Code ‘e08d71bd92334dbab9e645ad6e72da63’
This commit is contained in:
		| @@ -423,32 +423,28 @@ namespace FarmmapsApi.Services | ||||
|  | ||||
|             string satelliteDataStatisticsFile = Path.Combine(downloadFolder, $"satelliteStats_{fieldName}.csv"); | ||||
|             File.Delete(satelliteDataStatisticsFile); // Delete the SatelliteFile file if exists | ||||
|             List<int> selectedLayers = new List<int>(); | ||||
|             foreach (string satelliteBand in satelliteBands) | ||||
|             { | ||||
|                 if (satelliteBand == "ndvi") selectedLayers.Add(0); | ||||
|                 if (satelliteBand == "wdvi") selectedLayers.Add(1); | ||||
|             }; | ||||
|             string headerLineStats = $"FieldName,satelliteDate,satelliteBand,max,min,mean,mode,median,stddev,minPlus,curtosis,maxMinus,skewness,variance,populationCount,variationCoefficient,confidenceIntervalLow, confidenceIntervalHigh,confidenceIntervalErrorMargin" + Environment.NewLine; | ||||
|             File.AppendAllText(satelliteDataStatisticsFile, headerLineStats); | ||||
|             foreach (var item in satelliteTiffs) | ||||
|                 foreach (int selectedLayer in selectedLayers) | ||||
|             foreach (var satelliteTiff in satelliteTiffs) | ||||
|             { | ||||
|                 List<JToken> layers = satelliteTiff.Data["layers"].Children().ToList(); | ||||
|                 foreach (JToken layer in layers) | ||||
|                 { | ||||
|                     DateTime satelliteImageDate = (DateTime)satelliteTiff.DataDate; | ||||
|                     string satelliteBand = layer["name"].ToString(); | ||||
|                     if (satelliteBands.Contains(satelliteBand)) | ||||
|                     { | ||||
|                         var satelliteBand = item.Data["layers"][selectedLayer]["name"]; | ||||
|                         var satelliteImageDate = (DateTime)item.DataDate; | ||||
|                         var satelliteStatisticsJtoken = item.Data["layers"][selectedLayer]["renderer"]["band"]["statistics"]; | ||||
|                         JToken satelliteStatisticsJtoken = layer["renderer"]["band"]["statistics"]; | ||||
|                         if (satelliteStatisticsJtoken == null) | ||||
|                         { | ||||
|                             _logger.LogWarning($"{satelliteImageDate.ToString("yyyy-MM-dd")} no statistics found");  | ||||
|                             //Console.WriteLine($"Available data: {item.Data}"); | ||||
|                             _logger.LogWarning($"{satelliteImageDate.ToString("yyyy-MM-dd")} no statistics found for satelliteBand '{satelliteBand}'"); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             SatelliteStatistics satelliteStatistics = satelliteStatisticsJtoken.ToObject<SatelliteStatistics>(); | ||||
|                             satelliteStatistics.fieldName = fieldName; | ||||
|                             satelliteStatistics.satelliteDate = satelliteImageDate; | ||||
|                             satelliteStatistics.satelliteBand = satelliteBand.ToString(); | ||||
|                             satelliteStatistics.satelliteBand = satelliteBand; | ||||
|                             File.AppendAllText(satelliteDataStatisticsFile, $"" + | ||||
|                                 $"{satelliteStatistics.fieldName}," + | ||||
|                                 $"{satelliteStatistics.satelliteDate.ToString("yyyy-MM-dd")}," + | ||||
| @@ -473,37 +469,41 @@ namespace FarmmapsApi.Services | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             return satelliteDataStatisticsFile; | ||||
|         } | ||||
|         public async Task<List<SatelliteStatistics>> ListSatelliteStatistics(Item satelliteTiff, List<string> satelliteBands = null, string fieldName = null) | ||||
|         { | ||||
|             SatelliteStatistics satelliteStatistics; | ||||
|             List<SatelliteStatistics> listSatelliteStatistics = new List<SatelliteStatistics>(); | ||||
|             List<int> selectedLayers = new List<int>(); | ||||
|             foreach (string satelliteBand in satelliteBands) | ||||
|             List<JToken> layers = satelliteTiff.Data["layers"].Children().ToList(); | ||||
|             foreach (JToken layer in layers) | ||||
|             { | ||||
|                 if (satelliteBand == "ndvi") selectedLayers.Add(0); | ||||
|                 if (satelliteBand == "wdvi") selectedLayers.Add(1); | ||||
|             }; | ||||
|  | ||||
|             foreach (int selectedLayer in selectedLayers) | ||||
|             { | ||||
|                 var satelliteBand = satelliteTiff.Data["layers"][selectedLayer]["name"]; | ||||
|                 var satelliteImageDate = (DateTime)satelliteTiff.DataDate; | ||||
|                 var satelliteStatisticsJtoken = satelliteTiff.Data["layers"][selectedLayer]["renderer"]["band"]["statistics"]; | ||||
|                 if (satelliteStatisticsJtoken == null) | ||||
|                 DateTime satelliteImageDate = (DateTime)satelliteTiff.DataDate; | ||||
|                 string satelliteBand = layer["name"].ToString(); | ||||
|                 //_logger.LogInformation($"Date '{satelliteImageDate.ToString("yyyy-MM-dd")}': satelliteBand: {satelliteBand}"); | ||||
|                 if (satelliteBands.Contains(satelliteBand)) | ||||
|                 { | ||||
|                     _logger.LogWarning($"{satelliteImageDate.ToString("yyyy-MM-dd")} no statistics found"); | ||||
|                     //Console.WriteLine($"Available data: {item.Data}"); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     satelliteStatistics = satelliteStatisticsJtoken.ToObject<SatelliteStatistics>(); | ||||
|                     satelliteStatistics.fieldName = fieldName.ToString(); | ||||
|                     satelliteStatistics.satelliteDate = satelliteImageDate; | ||||
|                     satelliteStatistics.satelliteBand = satelliteBand.ToString(); | ||||
|                     listSatelliteStatistics.Add(satelliteStatistics); | ||||
|                     JToken satelliteStatisticsJtoken = layer["renderer"]["band"]["statistics"]; | ||||
|                     if (satelliteStatisticsJtoken == null) | ||||
|                     { | ||||
|                         _logger.LogWarning($"{satelliteImageDate.ToString("yyyy-MM-dd")} no statistics found  for satelliteBand '{satelliteBand}'"); | ||||
|                         //Console.WriteLine($"Available data: {item.Data}"); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         //_logger.LogInformation($"Adding satelliteStatistics to listSatelliteStatistics"); | ||||
|                         satelliteStatistics = satelliteStatisticsJtoken.ToObject<SatelliteStatistics>(); | ||||
|                         satelliteStatistics.fieldName = fieldName; | ||||
|                         satelliteStatistics.satelliteDate = satelliteImageDate; | ||||
|                         satelliteStatistics.satelliteBand = satelliteBand; | ||||
|                         listSatelliteStatistics.Add(satelliteStatistics); | ||||
|                     } | ||||
|                 } | ||||
|                 //else | ||||
|                 //{ | ||||
|                 //    _logger.LogInformation($"this satelliteBand is not in your list satelliteBands"); | ||||
|                 //} | ||||
|             } | ||||
|                  | ||||
|             return listSatelliteStatistics; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user