Compare commits
10 Commits
b6764c5e1a
...
fedde-patc
Author | SHA1 | Date | |
---|---|---|---|
0cce247538 | |||
cb999caf46 | |||
721b33b4e5 | |||
3da2b71d62 | |||
b7b669bcfd | |||
0f9fe0a433 | |||
5c38ff99dc | |||
|
c29f996d23 | ||
44cde0fe15 | |||
0767b3fff8 |
@@ -44,14 +44,14 @@ namespace FarmMapsBlight
|
||||
await _farmmapsApiService.GetCurrentUserCodeAsync();
|
||||
var roots = await _farmmapsApiService.GetCurrentUserRootsAsync();
|
||||
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDrive == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
|
@@ -12,13 +12,14 @@ namespace FarmmapsApiSamples
|
||||
public const string SHAPE_ITEMTYPE = "vnd.farmmaps.itemtype.shape";
|
||||
public const string GEOJSON_ITEMTYPE = "vnd.farmmaps.itemtype.geojson";
|
||||
public const string BLIGHT_ITEMTYPE = "vnd.farmmaps.itemtype.blight";
|
||||
public const string CROPREC_ITEMTYPE = "vnd.farmmaps.itemtype.crprec.operation";
|
||||
|
||||
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 VRAZONERING_TASK = "vnd.farmmaps.task.vrazonering";
|
||||
public const string SATELLITE_TASK = "vnd.farmmaps.task.satellite";
|
||||
public const string SATELLITE_TASK = "vnd.farmmaps.task.sentinelhub";
|
||||
public const string VANDERSAT_TASK = "vnd.farmmaps.task.vandersat";
|
||||
public const string TASKMAP_TASK = "vnd.farmmaps.task.taskmap";
|
||||
public const string WORKFLOW_TASK = "vnd.farmmaps.task.workflow";
|
||||
|
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
@@ -95,7 +96,19 @@ namespace FarmmapsApi.Services
|
||||
|
||||
var jsonString = await response.Content.ReadAsStringAsync();
|
||||
|
||||
return JsonConvert.DeserializeObject<List<UserRoot>>(jsonString);
|
||||
var roots = JsonConvert.DeserializeObject<List<UserRoot>>(jsonString);
|
||||
roots.ForEach(v =>
|
||||
{
|
||||
v.Name = GetSuffixFromSystemItemCode(v.Code);
|
||||
});
|
||||
|
||||
return roots;
|
||||
}
|
||||
|
||||
private static string GetSuffixFromSystemItemCode(string itemCode)
|
||||
{
|
||||
string[] strArray = itemCode.Split(":");
|
||||
return strArray.Length == 2 ? strArray[1] : throw new ArgumentException("No system item code :" + itemCode);
|
||||
}
|
||||
|
||||
public async Task<Item> GetItemAsync(string itemCode, string itemType = null, JObject dataFilter = null)
|
||||
|
@@ -225,14 +225,14 @@ LIMIT 5;", schemaname, parceltablename, groenmonitorlatestviewname); //LIMIT x
|
||||
|
||||
LoadSettings(settingsfile);
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var myDriveRoot = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDriveRoot = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDriveRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
|
@@ -82,14 +82,14 @@ namespace FarmmapsDataDownload
|
||||
|
||||
LoadSettings(settingsfile);
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var myDriveRoot = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDriveRoot = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDriveRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
@@ -112,9 +112,33 @@ namespace FarmmapsDataDownload
|
||||
cropfieldItem = await _farmmapsApiService.GetItemAsync(_settings.CropfieldItemCode);
|
||||
}
|
||||
|
||||
//Get croprecordings
|
||||
if (input.GetCropRecordings)
|
||||
{
|
||||
var crprecItem = input.CrprecItem;
|
||||
_logger.LogInformation($"Trying to get crop recordings of croprecording: {crprecItem}");
|
||||
|
||||
var cropRec = await _farmmapsApiService.GetItemChildrenAsync(crprecItem, CROPREC_ITEMTYPE);
|
||||
if (cropRec == null)
|
||||
{
|
||||
_logger.LogError("Something went wrong while obtaining the croprecordings");
|
||||
return;
|
||||
}
|
||||
|
||||
var cropRecPath = Path.Combine(downloadFolder, $"croprecordings_{crprecItem}.json");
|
||||
_logger.LogInformation($"Found {cropRec.Count} crop recordings");
|
||||
var count = 0;
|
||||
await Task.Delay(500);
|
||||
foreach (var item in cropRec)
|
||||
{
|
||||
Console.WriteLine($"Crop recording #{count}: {item.Name}");
|
||||
File.AppendAllText(cropRecPath, item.Data +Environment.NewLine);
|
||||
count++;
|
||||
}
|
||||
_logger.LogInformation($"Downloaded file {cropRecPath}");
|
||||
}
|
||||
|
||||
// Get shadow data
|
||||
|
||||
if (input.GetShadowData)
|
||||
{
|
||||
_logger.LogInformation("Calculate shadow map for field");
|
||||
@@ -221,9 +245,6 @@ namespace FarmmapsDataDownload
|
||||
|
||||
// Select a particular satellite item from satelliteTask
|
||||
Item vanDerSatItem = await _generalService.FindVanDerSatItem(cropfieldItem, _settings.VanDerSatTaskCode, fieldName, input.StoreVanDerSatStatistics);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,14 +1,16 @@
|
||||
[
|
||||
{
|
||||
"UseCreatedCropfield": true,
|
||||
"outputFileName": "testSatData2",
|
||||
"fieldName": "test_satData2",
|
||||
"DownloadFolder": "C:\\workdir\\groenmonitor\\", //"C:\\workdir\\groenmonitor\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_WURtest\FarmmapsDataDownload\bin\Debug\netcoreapp3.1\Downloads\
|
||||
"outputFileName": "TestData",
|
||||
"fieldName": "TestField",
|
||||
"DownloadFolder": "Downloads", //"C:\\workdir\\groenmonitor\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_WURtest\FarmmapsDataDownload\bin\Debug\netcoreapp3.1\Downloads\
|
||||
"GetCropRecordings": true,
|
||||
"CrprecItem": "...", //item code of de crop recording parrent - can be found by opening the crop recording page of a field.
|
||||
"GetShadowData": false,
|
||||
"GetSatelliteData": true,
|
||||
"GetSatelliteData": false,
|
||||
"SatelliteBand": "wdvi", // "natural", "ndvi" or "wdvi"
|
||||
"StoreSatelliteStatisticsSingleImage": true,
|
||||
"StoreSatelliteStatisticsCropYear": true,
|
||||
"StoreSatelliteStatisticsSingleImage": false,
|
||||
"StoreSatelliteStatisticsCropYear": false,
|
||||
"GetVanDerSatData": false,
|
||||
"StoreVanDerSatStatistics": false,
|
||||
"CropYear": 2020,
|
||||
|
@@ -21,8 +21,8 @@ namespace FarmmapsDataDownload.Models
|
||||
public bool StoreSatelliteStatisticsCropYear { get; set; }
|
||||
public bool StoreVanDerSatStatistics { get; set; }
|
||||
public bool GetShadowData { get; set; }
|
||||
|
||||
|
||||
public bool GetCropRecordings { get; set; }
|
||||
public string CrprecItem { get; set; }
|
||||
|
||||
}
|
||||
}
|
@@ -45,14 +45,14 @@ namespace FarmmapsHaulmkilling
|
||||
await _farmmapsApiService.GetCurrentUserCodeAsync();
|
||||
var roots = await _farmmapsApiService.GetCurrentUserRootsAsync();
|
||||
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDrive == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
|
@@ -50,14 +50,14 @@ namespace FarmmapsHerbicide
|
||||
|
||||
private async Task SingleLutumTiffFlow(List<UserRoot> roots)
|
||||
{
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDrive == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
@@ -91,14 +91,14 @@ namespace FarmmapsHerbicide
|
||||
|
||||
private async Task MultiVanDenBorneShapeFlow(List<UserRoot> roots)
|
||||
{
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDrive == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
|
@@ -64,13 +64,13 @@ namespace FarmmapsNbs {
|
||||
|
||||
LoadSettings(settingsfile);
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null) {
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var myDriveRoot = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDriveRoot = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDriveRoot == null) {
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
@@ -188,7 +188,6 @@ namespace FarmmapsNbs {
|
||||
////End shape to geotiff transformation
|
||||
}
|
||||
|
||||
|
||||
_logger.LogInformation($"Calculating targetN with targetYield: {input.TargetYield}");
|
||||
var targetNItem = await _nitrogenService.CreateTargetNItem(cropfieldItem);
|
||||
var targetNData = await _nitrogenService.CalculateTargetN(cropfieldItem, targetNItem, plantingDate,
|
||||
|
@@ -1,11 +1,11 @@
|
||||
[
|
||||
{
|
||||
"UseCreatedCropfield": false,
|
||||
"UseCreatedCropfield": true,
|
||||
"file": "Scan1_20190605_sample.json",
|
||||
"inputVariable": "irmi",
|
||||
"inputLayerName": "irmi",
|
||||
"outputFileName": "vranbs_sample",
|
||||
"fieldName": "sampleJson_irmi",
|
||||
"fieldName": "sampleJson_irmi-usertest",
|
||||
"storeSatelliteStatistics": true,
|
||||
"plantingDate": "2019-04-18",
|
||||
"measurementDate": "2019-06-05",
|
||||
|
@@ -61,13 +61,13 @@ namespace FarmmapsVRApoten
|
||||
bool countPerArea = input.CountPerArea;
|
||||
var inputLayerName = input.InputLayerName;
|
||||
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDrive == null) {
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
}
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null) {
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
return;
|
||||
|
@@ -66,7 +66,7 @@ namespace FarmmapsZonering
|
||||
|
||||
private async Task ZoningAsync(List<UserRoot> roots, ZoneringInput input)
|
||||
{
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "My drive");
|
||||
var myDrive = roots.SingleOrDefault(r => r.Name == "USER_FILES");
|
||||
if (myDrive == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
@@ -83,7 +83,7 @@ namespace FarmmapsZonering
|
||||
// Load settings from previous cropfield
|
||||
LoadSettings(settingsfile);
|
||||
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "Uploaded");
|
||||
var uploadedRoot = roots.SingleOrDefault(r => r.Name == "USER_IN");
|
||||
if (uploadedRoot == null)
|
||||
{
|
||||
_logger.LogError("Could not find a needed root item");
|
||||
|
14
README.MD
14
README.MD
@@ -1,15 +1,27 @@
|
||||
##### NOT PRODUCTION READY CODE, JUST AN EXAMPLE
|
||||
|
||||
Put your clientId and clientSecret in a newly created appsettings.secrets.json file inside the root of the Secrets project.
|
||||
Put your clientId and clientSecret or your Farmmaps-account data (username and password) in a newly created appsettings.secrets.json file inside the root of the Secrets project.
|
||||
|
||||
**appsettings.secrets.json**
|
||||
```
|
||||
{
|
||||
//API credential sign-in
|
||||
"ClientId": "<clientId>",
|
||||
"ClientSecret": "<clientSecret>"
|
||||
}
|
||||
```
|
||||
|
||||
Or when using a Farmmaps account to sign-in
|
||||
|
||||
**appsettings.secrets.json**
|
||||
```
|
||||
{
|
||||
//Sign-in using farmmaps account
|
||||
"Username": "",
|
||||
"Password": ""
|
||||
}
|
||||
```
|
||||
|
||||
* Isn't 100% complete.
|
||||
* Needs proper testing of all public api methods.
|
||||
* Needs documentation of all public api methods.
|
@@ -2,11 +2,11 @@
|
||||
//There are three farmmaps environments, uncomment the environemnt you want to use with this sample client
|
||||
|
||||
//test environment
|
||||
// "Authority": "https://accounts.test.farmmaps.eu/",
|
||||
// "Endpoint": "https://test.farmmaps.eu/",
|
||||
// "BasePath": "api/v1",
|
||||
// "DiscoveryEndpointUrl": "https://accounts.test.farmmaps.eu/.well-known/openid-configuration",
|
||||
// "GrantClientId": "farmmapstesteu",
|
||||
"Authority": "https://accounts.test.farmmaps.eu/",
|
||||
"Endpoint": "https://test.farmmaps.eu/",
|
||||
"BasePath": "api/v1",
|
||||
"DiscoveryEndpointUrl": "https://accounts.test.farmmaps.eu/.well-known/openid-configuration",
|
||||
"GrantClientId": "farmmapstesteu",
|
||||
|
||||
////acceptance environment
|
||||
//"Authority": "https://accounts.acc.farmmaps.eu/",
|
||||
@@ -15,12 +15,12 @@
|
||||
//"DiscoveryEndpointUrl": "https://accounts.acc.farmmaps.eu/.well-known/openid-configuration",
|
||||
//"GrantClientId": "farmmapsacceu",
|
||||
|
||||
//production environment
|
||||
"authority": "https://accounts.farmmaps.eu/",
|
||||
"endpoint": "https://farmmaps.eu/",
|
||||
"basepath": "api/v1",
|
||||
"discoveryendpointurl": "https://accounts.farmmaps.eu/.well-known/openid-configuration",
|
||||
"GrantClientId": "farmmaps",
|
||||
////production environment
|
||||
//"authority": "https://accounts.farmmaps.eu/",
|
||||
//"endpoint": "https://farmmaps.eu/",
|
||||
//"basepath": "api/v1",
|
||||
//"discoveryendpointurl": "https://accounts.farmmaps.eu/.well-known/openid-configuration",
|
||||
//"GrantClientId": "farmmaps",
|
||||
|
||||
//overige info
|
||||
"RedirectUri": "http://example.nl/api",
|
||||
|
Reference in New Issue
Block a user