added vrapoten and changed some nbs stuff
This commit is contained in:
@@ -10,10 +10,17 @@ namespace FarmmapsApiSamples
|
||||
public const string SHAPE_PROCESSED_ITEMTYPE = "vnd.farmmaps.itemtype.shape.processed";
|
||||
public const string SHAPE_ITEMTYPE = "vnd.farmmaps.itemtype.shape";
|
||||
public const string GEOJSON_ITEMTYPE = "vnd.farmmaps.itemtype.geojson";
|
||||
|
||||
|
||||
public const string VRANBS_TASK = "vnd.farmmaps.task.vranbs";
|
||||
public const string VRAHERBICIDE_TASK = "vnd.farmmaps.task.vraherbicide";
|
||||
public const string VRAHAULMKILLING_TASK = "vnd.farmmaps.task.vrahaulmkilling";
|
||||
public const string VRAPLANTING_TASK = "vnd.farmmaps.task.vrapoten";
|
||||
public const string SATELLITE_TASK = "vnd.farmmaps.task.satellite";
|
||||
public const string TASKMAP_TASK = "vnd.farmmaps.task.taskmap";
|
||||
public const string WORKFLOW_TASK = "vnd.farmmaps.task.workflow";
|
||||
public const string BOFEK_TASK = "vnd.farmmaps.task.bofek";
|
||||
public const string SHADOW_TASK = "vnd.farmmaps.task.shadow";
|
||||
public const string AHN_TASK = "vnd.farmmaps.task.ahn";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,8 +22,9 @@ namespace FarmmapsApi.Services
|
||||
_logger = logger;
|
||||
_farmmapsApiService = farmmapsApiService;
|
||||
}
|
||||
|
||||
public async Task<Item> CreateCropfieldItemAsync(string parentItemCode, string name, int year, string fieldGeomJson)
|
||||
|
||||
public async Task<Item> CreateCropfieldItemAsync(string parentItemCode, string name, int year,
|
||||
string fieldGeomJson)
|
||||
{
|
||||
var currentYear = new DateTime(year, 1, 1);
|
||||
var cropfieldItemRequest = new ItemRequest()
|
||||
@@ -39,7 +40,7 @@ namespace FarmmapsApi.Services
|
||||
|
||||
return await _farmmapsApiService.CreateItemAsync(cropfieldItemRequest);
|
||||
}
|
||||
|
||||
|
||||
public async Task<Item> UploadDataAsync(UserRoot root, string itemType, string filePath, string itemName)
|
||||
{
|
||||
var startUpload = DateTime.UtcNow;
|
||||
@@ -49,8 +50,8 @@ namespace FarmmapsApi.Services
|
||||
if (result.Progress.Status == UploadStatus.Failed)
|
||||
return null;
|
||||
|
||||
return await FindChildItemAsync(root.Code, itemType, itemName,
|
||||
i => i.Created >= startUpload &&
|
||||
return await FindChildItemAsync(root.Code, itemType, itemName,
|
||||
i => i.Created >= startUpload &&
|
||||
i.Name.ToLower().Contains(itemName.ToLower()));
|
||||
}
|
||||
|
||||
@@ -77,11 +78,11 @@ namespace FarmmapsApi.Services
|
||||
SHAPE_PROCESSED_ITEMTYPE);
|
||||
|
||||
items = items.Where(i => i.Created >= startUpload).OrderByDescending(i => i.Created).ToList();
|
||||
|
||||
|
||||
if (items.Any())
|
||||
{
|
||||
shapeItem = items.First(i => i.Name.Contains(itemName));
|
||||
if(shapeItem != null)
|
||||
if (shapeItem != null)
|
||||
{
|
||||
source.Cancel();
|
||||
break;
|
||||
@@ -102,7 +103,43 @@ namespace FarmmapsApi.Services
|
||||
return await _farmmapsApiService.GetItemAsync(shapeItem.ParentCode);
|
||||
}
|
||||
|
||||
public async Task<ItemTaskStatus> RunAndWaitForTask(Item subjectItem, string taskIdentifier,
|
||||
|
||||
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) =>
|
||||
{
|
||||
var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(tiffItem.Code, itemTaskCode);
|
||||
_logger.LogInformation($"Waiting on converting geotiff to shape; status: {itemTaskStatus.State}");
|
||||
if (itemTaskStatus.IsFinished)
|
||||
tokenSource.Cancel();
|
||||
});
|
||||
|
||||
var itemTask = await _farmmapsApiService.GetTaskStatusAsync(tiffItem.Code, itemTaskCode);
|
||||
if (itemTask.State == ItemTaskState.Error)
|
||||
{
|
||||
_logger.LogError($"Something went wrong with task execution: {itemTask.Message}");
|
||||
return null;
|
||||
}
|
||||
|
||||
//the taskmap is a child of the input tiff
|
||||
var itemName = "Taskmap";
|
||||
var taskMapItem = await FindChildItemAsync(tiffItem.Code,
|
||||
SHAPE_PROCESSED_ITEMTYPE, itemName);
|
||||
if (taskMapItem == null)
|
||||
{
|
||||
_logger.LogError("Could not find the shape taskmap as a child item under the input");
|
||||
return null;
|
||||
}
|
||||
|
||||
return taskMapItem;
|
||||
}
|
||||
|
||||
|
||||
public async Task<ItemTaskStatus> RunAndWaitForTask(Item subjectItem, string taskIdentifier,
|
||||
Action<TaskRequest> configureCallback = null, int retrySeconds = 3)
|
||||
{
|
||||
var taskRequest = new TaskRequest()
|
||||
@@ -110,7 +147,7 @@ namespace FarmmapsApi.Services
|
||||
TaskType = taskIdentifier
|
||||
};
|
||||
configureCallback?.Invoke(taskRequest);
|
||||
|
||||
|
||||
var taskCode = await _farmmapsApiService.QueueTaskAsync(subjectItem.Code, taskRequest);
|
||||
|
||||
await PollTask(TimeSpan.FromSeconds(retrySeconds), async (tokenSource) =>
|
||||
@@ -120,9 +157,9 @@ namespace FarmmapsApi.Services
|
||||
if (itemTaskStatus.IsFinished)
|
||||
tokenSource.Cancel();
|
||||
});
|
||||
|
||||
|
||||
_logger.LogInformation($"{taskIdentifier} finished");
|
||||
|
||||
|
||||
return await _farmmapsApiService.GetTaskStatusAsync(subjectItem.Code, taskCode);
|
||||
}
|
||||
|
||||
@@ -158,5 +195,107 @@ namespace FarmmapsApi.Services
|
||||
_logger.LogInformation($"Found {containsName} item");
|
||||
return dataItem;
|
||||
}
|
||||
|
||||
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) =>
|
||||
{
|
||||
var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
|
||||
_logger.LogInformation($"Waiting on retreiving BOFEK 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 with task execution: {itemTask.Message}");
|
||||
return null;
|
||||
}
|
||||
|
||||
//the BOFEK data is a child of the cropfield
|
||||
var itemName = "bofek";
|
||||
var bofekItem = await FindChildItemAsync(cropfieldItem.Code,
|
||||
SHAPE_PROCESSED_ITEMTYPE, itemName);
|
||||
if (bofekItem == null)
|
||||
{
|
||||
_logger.LogError("Could not find the BOFEK data as a child item under the cropfield");
|
||||
return null;
|
||||
}
|
||||
|
||||
return bofekItem;
|
||||
}
|
||||
|
||||
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) =>
|
||||
{
|
||||
var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
|
||||
_logger.LogInformation($"Waiting on retreiving AHN 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 with task execution: {itemTask.Message}");
|
||||
return null;
|
||||
}
|
||||
|
||||
//the AHN data is a child of the cropfield
|
||||
var itemName = "ahn";
|
||||
var ahnItem = await FindChildItemAsync(cropfieldItem.Code,
|
||||
GEOTIFF_PROCESSED_ITEMTYPE, itemName);
|
||||
if (ahnItem == null)
|
||||
{
|
||||
_logger.LogError("Could not find the AHN data as a child item under the cropfield");
|
||||
return null;
|
||||
}
|
||||
|
||||
return ahnItem;
|
||||
}
|
||||
|
||||
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) =>
|
||||
{
|
||||
var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
|
||||
_logger.LogInformation($"Waiting on calculation shadow 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 with task execution: {itemTask.Message}");
|
||||
return null;
|
||||
}
|
||||
|
||||
//the shadow data is a child of the cropfield
|
||||
var itemName = "shadow";
|
||||
var shadowItem = await FindChildItemAsync(cropfieldItem.Code,
|
||||
GEOTIFF_PROCESSED_ITEMTYPE, itemName);
|
||||
if (shadowItem == null)
|
||||
{
|
||||
_logger.LogError("Could not find the shadow data as a child item under the cropfield");
|
||||
return null;
|
||||
}
|
||||
|
||||
return shadowItem;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user