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