From f1707c432f9172905a685ffed27f17356e48ca10 Mon Sep 17 00:00:00 2001 From: Pepijn van Oort Date: Wed, 1 Nov 2023 13:05:49 +0100 Subject: [PATCH] More testing & demo's in KPIInput.json: * pesticide * effect of soiltype: yes, different target & threshold for nitrogen (OK) * effect of productionpurpose: none? * effect of location: different nitrogen balance due to different atmospheric deposition (OK) And update TODO.txt --- FarmmapsKPI/KPIInput.json | 391 ++++++++++++++++++++++++++++++++------ FarmmapsKPI/TODO.txt | 37 +++- 2 files changed, 359 insertions(+), 69 deletions(-) diff --git a/FarmmapsKPI/KPIInput.json b/FarmmapsKPI/KPIInput.json index 36922f0..d37b87b 100644 --- a/FarmmapsKPI/KPIInput.json +++ b/FarmmapsKPI/KPIInput.json @@ -8,31 +8,154 @@ //2 useExistingCropfieldWithChildren = true && CropfieldItemCode = "" or absent -> read fieldName (see below) -> read all codes from settings json file //3 useExistingCropfieldWithChildren = true && CropfieldItemCode like "deb48a74c5b54299bb852f17288010e9" in KPIinput -> if you have in your account already an existing cropfield then use that "CropfieldItemCode": "", // could contain for example this: "abae97f89f3c4ac08953b1b8bea9f076" if this is an exisiting CropfieldItemCode in your account. - //And then if useExistingCropfieldWithChildren = true, this would be used. + //And then if useExistingCropfieldWithChildren = true, this would be used. "dataCropfield": { - //"area": 4.22, //not needed for KPI calculation, but shown here to know this is a possible property + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry "final": true, //always true - //"soilCode": "5", //not needed for KPI calculation, but shown here to know this is a possible property - //"soilName": "Loam", //not needed for KPI calculation, but shown here to know this is a possible property - "cropTypeCode": "1010101", - "cropTypeName": "Potato", - //"rootDepthMax": 45, //not needed for KPI calculation, but shown here to know this is a possible property - //"emergenceDate": "2022-05-16T00:00:00", //not needed for KPI calculation, but shown here to know this is a possible property - "productionPurposeCode": "003" - //"productionPurposeName": "consumption" //not needed for KPI calculation, but shown here to know this is a possible property + "soilCode": "1", //From codelist CL405. Can be omitted if unknown + "soilName": "Sand", //From codelist CL405 + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 + "productionPurposeCode": "003", //From codelist CL251. For testing, see case with consumption & starch potato + "productionPurposeName": "consumption" //From codelist CL251 }, "CropRecordingItemCode": "", // could contain for example this: "314aa1b6480b493ba28a5f55039a01d4" if this is the CropRecordingItemCode of the provided CropfieldItemCode. And then if useExistingCropfieldWithChildren = true, this would be used "OperationItemCodes": [], // could contain for example this: ["4d1a6f28ea3f414180663baa4b08c60f"] or ["4d1a6f28ea3f414180663baa4b08c60f","21e08386f0454ad79acfebf78649d59b"] if these are the operations of the provided CropRecordingItemCode. And then if useExistingCropfieldWithChildren = true, these would be used "dataOperations": [], //leaving the operations empty means no fertilizer is applied "CropfieldCharacteristicItemCode": "", "DataCropfieldCharacteristic": { + //PO20231029: not different yields from different parts of fields? "code": "860619", //PO20231004: so what does this code mean? Can we see the code list somewhere? "label": "cropyield", "value": "48.01" }, //"DownloadFolder": "Downloads", //"C:\\hugoschrererdir\\kpidir\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_KB34_MAST\FarmmapsKPI\bin\Debug\netcoreapp3.1\Downloads\ "CropYear": 2022, - "fieldName": "aardappelveld_test_Potato_ZeroFertilizer", + "fieldName": "test_Potato_ZeroFertilizer_Consumption_Sand", + //geometryJson = polygon of location of the cropfield, coordinates in LON,LAT (LON: decimal degrees East, LAT: decimal degrees North) + "geometryJson": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5945257993548765, + 52.57080744107003 + ], + [ + 5.598645994070678, + 52.571540800206236 + ], + [ + 5.599381743127071, + 52.57012773140724 + ], + [ + 5.595408698222548, + 52.56968054825188 + ], + [ + 5.5945257993548765, + 52.57080744107003 + ] + ] + ] + } + }, + { + "useExistingCropfieldWithChildren": false, + "deleteNewlyCreatedAfterCalc": true, + //Note when you run the FarmmapsKPI project, somewhere to your C:\git\FarmMapsApiClient_KB34_MAST\FarmmapsKPI\bin\Debug\netcoreapp3.1\ directory, files named like this are written: + //'Settings_aardappelveld_test_Potato_ZeroFertilizer.json', where 'aardappelveld_test_Potato_ZeroFertilizer.json' is your fieldName (see below) + //1 useExistingCropfieldWithChildren = false -> create new + //2 useExistingCropfieldWithChildren = true && CropfieldItemCode = "" or absent -> read fieldName (see below) -> read all codes from settings json file + //3 useExistingCropfieldWithChildren = true && CropfieldItemCode like "deb48a74c5b54299bb852f17288010e9" in KPIinput -> if you have in your account already an existing cropfield then use that + "CropfieldItemCode": "", // could contain for example this: "abae97f89f3c4ac08953b1b8bea9f076" if this is an exisiting CropfieldItemCode in your account. + //And then if useExistingCropfieldWithChildren = true, this would be used. + "dataCropfield": { + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry + "final": true, //always true + "soilCode": "7", //From codelist CL405. Can be omitted if unknown + "soilName": "Clay", //From codelist CL405 + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 + "productionPurposeCode": "003", //From codelist CL251. For testing, see case with consumption & starch potato + "productionPurposeName": "consumption" //From codelist CL251 + }, + "CropRecordingItemCode": "", // could contain for example this: "314aa1b6480b493ba28a5f55039a01d4" if this is the CropRecordingItemCode of the provided CropfieldItemCode. And then if useExistingCropfieldWithChildren = true, this would be used + "OperationItemCodes": [], // could contain for example this: ["4d1a6f28ea3f414180663baa4b08c60f"] or ["4d1a6f28ea3f414180663baa4b08c60f","21e08386f0454ad79acfebf78649d59b"] if these are the operations of the provided CropRecordingItemCode. And then if useExistingCropfieldWithChildren = true, these would be used + "dataOperations": [], //leaving the operations empty means no fertilizer is applied + "CropfieldCharacteristicItemCode": "", + "DataCropfieldCharacteristic": { + //PO20231029: not different yields from different parts of fields? + "code": "860619", //PO20231004: so what does this code mean? Can we see the code list somewhere? + "label": "cropyield", + "value": "48.01" + }, + //"DownloadFolder": "Downloads", //"C:\\hugoschrererdir\\kpidir\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_KB34_MAST\FarmmapsKPI\bin\Debug\netcoreapp3.1\Downloads\ + "CropYear": 2022, + "fieldName": "test_Potato_ZeroFertilizer_Consumption_Clay", + //geometryJson = polygon of location of the cropfield, coordinates in LON,LAT (LON: decimal degrees East, LAT: decimal degrees North) + "geometryJson": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5945257993548765, + 52.57080744107003 + ], + [ + 5.598645994070678, + 52.571540800206236 + ], + [ + 5.599381743127071, + 52.57012773140724 + ], + [ + 5.595408698222548, + 52.56968054825188 + ], + [ + 5.5945257993548765, + 52.57080744107003 + ] + ] + ] + } + }, + { + "useExistingCropfieldWithChildren": false, + "deleteNewlyCreatedAfterCalc": true, + //Note when you run the FarmmapsKPI project, somewhere to your C:\git\FarmMapsApiClient_KB34_MAST\FarmmapsKPI\bin\Debug\netcoreapp3.1\ directory, files named like this are written: + //'Settings_aardappelveld_test_Potato_ZeroFertilizer.json', where 'aardappelveld_test_Potato_ZeroFertilizer.json' is your fieldName (see below) + //1 useExistingCropfieldWithChildren = false -> create new + //2 useExistingCropfieldWithChildren = true && CropfieldItemCode = "" or absent -> read fieldName (see below) -> read all codes from settings json file + //3 useExistingCropfieldWithChildren = true && CropfieldItemCode like "deb48a74c5b54299bb852f17288010e9" in KPIinput -> if you have in your account already an existing cropfield then use that + "CropfieldItemCode": "", // could contain for example this: "abae97f89f3c4ac08953b1b8bea9f076" if this is an exisiting CropfieldItemCode in your account. + //And then if useExistingCropfieldWithChildren = true, this would be used. + "dataCropfield": { + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry + "final": true, //always true + "soilCode": "1", //From codelist CL405. Can be omitted if unknown + "soilName": "Sand", + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 + "productionPurposeCode": "003", //From codelist CL251. For testing, see case with consumption & starch potato + "productionPurposeName": "consumption" //From codelist CL251 + }, + "CropRecordingItemCode": "", // could contain for example this: "314aa1b6480b493ba28a5f55039a01d4" if this is the CropRecordingItemCode of the provided CropfieldItemCode. And then if useExistingCropfieldWithChildren = true, this would be used + "OperationItemCodes": [], // could contain for example this: ["4d1a6f28ea3f414180663baa4b08c60f"] or ["4d1a6f28ea3f414180663baa4b08c60f","21e08386f0454ad79acfebf78649d59b"] if these are the operations of the provided CropRecordingItemCode. And then if useExistingCropfieldWithChildren = true, these would be used + "dataOperations": [], //leaving the operations empty means no fertilizer is applied + "CropfieldCharacteristicItemCode": "", + "DataCropfieldCharacteristic": { + //PO20231029: not different yields from different parts of fields? + "code": "860619", //PO20231004: so what does this code mean? Can we see the code list somewhere? + "label": "cropyield", + "value": "48.01" + }, + //"DownloadFolder": "Downloads", //"C:\\hugoschrererdir\\kpidir\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_KB34_MAST\FarmmapsKPI\bin\Debug\netcoreapp3.1\Downloads\ + "CropYear": 2022, + "fieldName": "test_Potato_ZeroFertilizer_Starch_Sand", //geometryJson = polygon of location of the cropfield, coordinates in LON,LAT (LON: decimal degrees East, LAT: decimal degrees North) "geometryJson": { "type": "Polygon", @@ -67,32 +190,32 @@ "deleteNewlyCreatedAfterCalc": true, "CropfieldItemCode": "", "dataCropfield": { - //"area": 4.22, //not needed for KPI calculation, but shown here to know this is a possible property + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry "final": true, //always true - //"soilCode": "5", //not needed for KPI calculation, but shown here to know this is a possible property - //"soilName": "Loam", //not needed for KPI calculation, but shown here to know this is a possible property - "cropTypeCode": "1010101", - "cropTypeName": "Potato", + //"soilCode": "5", //From codelist CL405. Can be omitted if unknown + //"soilName": "Loam", //From codelist CL405. + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 //"rootDepthMax": 45, //not needed for KPI calculation, but shown here to know this is a possible property //"emergenceDate": "2022-05-16T00:00:00", //not needed for KPI calculation, but shown here to know this is a possible property - "productionPurposeCode": "003" - //"productionPurposeName": "consumption" //not needed for KPI calculation, but shown here to know this is a possible property + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown + "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", "OperationItemCodes": [], "dataOperations": [ { - "area": "0.08", //?! + //"area": "0.08", //if leave empty then write code to fill in value from geometry (operation applied to whole field). Fill in different value if operation applied to part of the field (e.g. in case of variable rate application, VRA) "contractor": false, - "designator": "Kunstmest strooien", + "designator": "Kunstmest strooien", //refers to codelist CL127 with operation methods "from": "2022-05-23T11:34:00", - "method": "70400", //refers to codelist 127 with operation types - "n": "92", - "name": "Kunstmest strooien", - "operationCode": "7", - "product": "7360", //refers to codelist 022 with fertilizer types + "method": "70400", //refers to codelist CL127 with operation methods + "n": "92", //refers to codelist CL022 with fertilizer types & npk contents + "name": "Kunstmest strooien", //refers to codelist CL127 with operation methods + "product": "7360", //refers to codelist CL022 with fertilizer types "quantity": "200", - "status": "3", + "status": "3", // Which code list? What does it mean? Is it needed? In any case works if set to 3 + "operationCode": "7", // Which code list? What does it mean? Is it needed? In any case works if set to 7 "to": "2022-05-23T12:34:00", "unit": "kg/ha", "unitCode": "KGMHAR" @@ -102,18 +225,18 @@ "n": "144", "p": "60.8", "to": "2022-04-19T09:19:00", - "area": "0.08", //?!, + //"area": "0.08", //if leave empty then write code to fill in value from geometry (operation applied to whole field). Fill in different value if operation applied to part of the field (e.g. in case of variable rate application, VRA) "from": "2022-04-19T08:19:00", - "name": "Injecteren", + "name": "Injecteren", //refers to codelist CL127 with operation methods "unit": "kg/ha", - "method": "70700", - "status": "3", - "product": "2329", + "method": "70700", //refers to codelist CL127 with operation methods + "status": "3", // Which code list? What does it mean? Is it needed? In any case works if set to 3 + "operationCode": "7", // Which code list? What does it mean? Is it needed? In any case works if set to 7 + "product": "2329", //refers to codelist CL022 with fertilizer types "quantity": "32000", "unitCode": "KGMHAR", "contractor": false, - "designator": "Injecteren", - "operationCode": "7" + "designator": "Injecteren" } ], "CropfieldCharacteristicItemCode": "", @@ -158,32 +281,32 @@ "deleteNewlyCreatedAfterCalc": true, "CropfieldItemCode": "", "dataCropfield": { - //"area": 4.22, //not needed for KPI calculation, but shown here to know this is a possible property + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry "final": true, //always true - //"soilCode": "5", //not needed for KPI calculation, but shown here to know this is a possible property - //"soilName": "Loam", //not needed for KPI calculation, but shown here to know this is a possible property - "cropTypeCode": "1010101", - "cropTypeName": "Potato", + //"soilCode": "5", //From codelist CL405. Can be omitted if unknown + //"soilName": "Loam", //From codelist CL405. + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 //"rootDepthMax": 45, //not needed for KPI calculation, but shown here to know this is a possible property //"emergenceDate": "2022-05-16T00:00:00", //not needed for KPI calculation, but shown here to know this is a possible property - "productionPurposeCode": "003" - //"productionPurposeName": "consumption" //not needed for KPI calculation, but shown here to know this is a possible property + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown + "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", "OperationItemCodes": [], "dataOperations": [ { - "area": "0.08", //?! + //"area": "0.08", //if leave empty then write code to fill in value from geometry (operation applied to whole field). Fill in different value if operation applied to part of the field (e.g. in case of variable rate application, VRA) "contractor": false, - "designator": "Kunstmest strooien", + "designator": "Kunstmest strooien", //refers to codelist CL127 with operation methods "from": "2022-05-23T11:34:00", - "method": "70400", + "method": "70400", //refers to codelist CL127 with operation methods "n": "92", - "name": "Kunstmest strooien", - "operationCode": "7", - "product": "7360", + "name": "Kunstmest strooien", //refers to codelist CL127 with operation methods + "product": "7360", //refers to codelist CL022 with fertilizer types "quantity": "200", - "status": "3", + "status": "3", // Which code list? What does it mean? Is it needed? In any case works if set to 3 + "operationCode": "7", // Which code list? What does it mean? Is it needed? In any case works if set to 7 "to": "2022-05-23T12:34:00", "unit": "kg/ha", "unitCode": "KGMHAR" @@ -231,32 +354,32 @@ "deleteNewlyCreatedAfterCalc": true, "CropfieldItemCode": "", "dataCropfield": { - //"area": 4.22, //not needed for KPI calculation, but shown here to know this is a possible property + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry "final": true, //always true - //"soilCode": "5", //not needed for KPI calculation, but shown here to know this is a possible property - //"soilName": "Loam", //not needed for KPI calculation, but shown here to know this is a possible property - "cropTypeCode": "1010101", - "cropTypeName": "Potato", + //"soilCode": "5", //From codelist CL405. Can be omitted if unknown + //"soilName": "Loam", //From codelist CL405. + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 //"rootDepthMax": 45, //not needed for KPI calculation, but shown here to know this is a possible property //"emergenceDate": "2022-05-16T00:00:00", //not needed for KPI calculation, but shown here to know this is a possible property - "productionPurposeCode": "003" - //"productionPurposeName": "consumption" //not needed for KPI calculation, but shown here to know this is a possible property + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown + "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", "OperationItemCodes": [], "dataOperations": [ { - "area": "0.08", //?! + //"area": "0.08", //if leave empty then write code to fill in value from geometry (operation applied to whole field). Fill in different value if operation applied to part of the field (e.g. in case of variable rate application, VRA) "contractor": false, - "designator": "Kunstmest strooien", + "designator": "Kunstmest strooien", //refers to codelist CL127 with operation methods "from": "2022-05-23T11:34:00", - "method": "70400", - //"n": "92", - "name": "Kunstmest strooien", - "operationCode": "7", - "product": "7360", + "method": "70400", //refers to codelist CL127 with operation methods + "n": "92", + "name": "Kunstmest strooien", //refers to codelist CL127 with operation methods + "status": "3", // Which code list? What does it mean? Is it needed? In any case works if set to 3 + "operationCode": "7", // Which code list? What does it mean? Is it needed? In any case works if set to 7 + "product": "7360", //refers to codelist CL022 with fertilizer types "quantity": "200", - "status": "3", "to": "2022-05-23T12:34:00", "unit": "kg/ha", "unitCode": "KGMHAR" @@ -270,7 +393,149 @@ }, //"DownloadFolder": "Downloads", //"C:\\hugoschrererdir\\kpidir\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_WURtest\FarmmapsDataDownload\bin\Debug\netcoreapp3.1\Downloads\ "CropYear": 2022, - "fieldName": "aardappelveld_test_Potato_Urea200kgha", + "fieldName": "aardappelveld_test_Potato_Urea92kgNha_ZuidLimburg", + "geometryJson": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.900, + 50.800 + ], + [ + 5.901, + 50.800 + ], + [ + 5.901, + 50.801 + ], + [ + 5.900, + 50.801 + ], + [ + 5.900, + 50.800 + ] + ] + ] + } + }, + { + "useExistingCropfieldWithChildren": false, + "deleteNewlyCreatedAfterCalc": true, + "CropfieldItemCode": "", + "dataCropfield": { + //"area": 4.22, //Leave empty, KPI app will calculate it from geometry + "final": true, //always true + //"soilCode": "5", //From codelist CL405. Can be omitted if unknown + //"soilName": "Loam", //From codelist CL405. + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 + //"rootDepthMax": 45, //not needed for KPI calculation, but shown here to know this is a possible property + //"emergenceDate": "2022-05-16T00:00:00", //not needed for KPI calculation, but shown here to know this is a possible property + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown + "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown + }, + "CropRecordingItemCode": "", + "OperationItemCodes": [], + "dataOperations": [ + { + //"area": "0.08", //if leave empty then write code to fill in value from geometry (operation applied to whole field). Fill in different value if operation applied to part of the field (e.g. in case of variable rate application, VRA) + "contractor": false, + "designator": "Kunstmest strooien", //refers to codelist CL127 with operation methods + "from": "2022-05-23T11:34:00", + "method": "70400", //refers to codelist CL127 with operation methods + //"n": "92", + "name": "Kunstmest strooien", //refers to codelist CL127 with operation methods + "status": "3", // Which code list? What does it mean? Is it needed? In any case works if set to 3 + "operationCode": "7", // Which code list? What does it mean? Is it needed? In any case works if set to 7 + "product": "7360", //refers to codelist CL022 with fertilizer types + "quantity": "200", + "to": "2022-05-23T12:34:00", + "unit": "kg/ha", + "unitCode": "KGMHAR" + } + ], + "CropfieldCharacteristicItemCode": "", + "DataCropfieldCharacteristic": { + "code": "860619", //PO20231004: so what does this code mean? Can we see the code list somewhere? + "label": "cropyield", + "value": "48.01" + }, + //"DownloadFolder": "Downloads", //"C:\\hugoschrererdir\\kpidir\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_WURtest\FarmmapsDataDownload\bin\Debug\netcoreapp3.1\Downloads\ + "CropYear": 2022, + "fieldName": "caseQuoteNnotProvidedInDataOperations", + "geometryJson": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.5945257993548765, + 52.57080744107003 + ], + [ + 5.598645994070678, + 52.571540800206236 + ], + [ + 5.599381743127071, + 52.57012773140724 + ], + [ + 5.595408698222548, + 52.56968054825188 + ], + [ + 5.5945257993548765, + 52.57080744107003 + ] + ] + ] + } + }, + { + "useExistingCropfieldWithChildren": false, + "deleteNewlyCreatedAfterCalc": true, + "CropfieldItemCode": "", // could contain for example this: "abae97f89f3c4ac08953b1b8bea9f076" if this is an exisiting CropfieldItemCode in your account. + "dataCropfield": { + "final": true, //always true + "cropTypeCode": "1010101", //From codelist CL263 + "cropTypeName": "Potato", //From codelist CL263 + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown + "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown + }, + "CropRecordingItemCode": "", // could contain for example this: "314aa1b6480b493ba28a5f55039a01d4" if this is the CropRecordingItemCode of the provided CropfieldItemCode. And then if useExistingCropfieldWithChildren = true, this would be used + "OperationItemCodes": [], // could contain for example this: ["4d1a6f28ea3f414180663baa4b08c60f"] or ["4d1a6f28ea3f414180663baa4b08c60f","21e08386f0454ad79acfebf78649d59b"] if these are the operations of the provided CropRecordingItemCode. And then if useExistingCropfieldWithChildren = true, these would be used + "dataOperations": [ + { + "to": "2022-07-13T17:27:00", + "from": "2022-07-13T16:27:00", + "name": "Volveld spuiten (3/3)", //refers to codelist CL127 with operation methods + "method": "80200", //refers to codelist CL127 with operation methods + "status": "3", // Which code list? What does it mean? Is it needed? In any case works if set to 3 + "operationCode": "8", // Which code list? What does it mean? Is it needed? In any case works if set to 8 + "products": [ + { + "product": "11767 N", //CTBG code, lookup via CTBG API. Important: with space N", + "quantity": "1.25", + "unitCode": "LTRHAR" + //"designator": "Amistar" + } + ] + } + ], + "CropfieldCharacteristicItemCode": "", + "DataCropfieldCharacteristic": { + "code": "860619", + "label": "cropyield", + "value": "48.01" + }, + //"DownloadFolder": "Downloads", //"C:\\hugoschrererdir\\kpidir\\", // "Downloads", -> if you just put "Downloads" the program will download to somewhere in ..\FarmMapsApiClient_KB34_MAST\FarmmapsKPI\bin\Debug\netcoreapp3.1\Downloads\ + "CropYear": 2022, + "fieldName": "examplePesticide_11767N", + //geometryJson = polygon of location of the cropfield, coordinates in LON,LAT (LON: decimal degrees East, LAT: decimal degrees North) "geometryJson": { "type": "Polygon", "coordinates": [ diff --git a/FarmmapsKPI/TODO.txt b/FarmmapsKPI/TODO.txt index e51c71f..6232adb 100644 --- a/FarmmapsKPI/TODO.txt +++ b/FarmmapsKPI/TODO.txt @@ -1,13 +1,19 @@ TODO.txt +################################################################################################### +# 1. DONE +################################################################################################### Laat de farmmapsKPI zelf maar uitzoeken wat de n-p gehaltes zijn: a. We willen als input opgeven we hebben 400 kg/ha urea gegeven, of 32000 kg/ha runderdrijfmest. Daarvoor wel de juiste gewas code opgeven -> zie onder, FarmmapsEditeeltList 263 gewassen Daarvoor wel de juiste meststof code opgeven -> zie onder, FarmmapsEditeeltList 022 meststoffen b. Check of de operation data een element “n” bevat. Zoniet of als waarde 0, dan - i. Zoek onder de motorkap op: de omreken factor (bijv 46% -> 400*0.46 = 184 kg N/ha). In editeelt list - ii. Voeg die 184 toe aan de operation data + i. Zoek onder de motorkap op: de omreken factor (bijv 200 kg/ha urea met 46% n -> 200*0.46 = 92 kg N/ha) + ii. Voeg die 92 toe aan de operation data ("n": 92) c. Reken N surplus uit (KPI item id b1) +GEPARKEERD: + Want voor veel meststoffen is geen content bekend -> automatisch opzoeken zal in veel gevallen niet goed werken + Laat de gebruiker zelf maar de codelist CL022 raadplegen en omrekenen. Nieuw project: FarmmapsEditeeltLists DONE a. Why? Because @@ -16,8 +22,27 @@ a. Why? Because b. Download full list of items from vnd.farmmaps.itemtype.codelist.cl263 DONE c. Write them to a csv file DONE d. In any case following lists: 127 operations DONE; 022 meststoffen (fertilizer products) DONE; 263 gewassen DONE; 405 soilcode DONE - in which list the productionPurposeCode NOT YET? + in which list the productionPurposeCode 251 DONE + +Testing: +Effect of soiltype (e.g. different N concents in crop depending on soiltype? (CL405)) + DONE (using KPIinput.json): same N balance, different target & threshold +Effect of location (e.g. different atmospheric N deposition). + DONE (using KPIinput.json): slightly different N balance + +################################################################################################### +# 2. Pending +################################################################################################### +Testing: +productionPurposeCode: different result depending on starch or consumption potato (different N contents in tubers)? + DONE (using KPIinput.json): surprisingly no effect? + +dataOperations: "operationCode": "7" & "8": + a. which codelist? What does it mean? NOT YET TESTED + b. using KPIinput.json: does it have an effect on KPI outcomes? NOT YET TESTED + +dataOperations: "status": "3": + a. which codelist? What does it mean? NOT YET TESTED + b. using KPIinput.json: does it have an effect on KPI outcomes? NOT YET TESTED + -Testing: in json input data, can certain fields be left out? Which are minimum fields needed? NOT YET -Testing: effect of location (e.g. different targetValue, different N deposition? Different crop N contents depending on soil?) NOT YET -Testing: productionPurposeCode: different result depending on starch or consumption potato (different N contents in tubers; different targetValues? NOT YET