forked from FarmMaps/FarmMapsApiClient
		
	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