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:
2021-05-28 17:25:31 +02:00
parent 1bc326cfd2
commit 111b4e576f
5 changed files with 232 additions and 194 deletions

View File

@@ -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;