From 67e5cb6bb486af5197dba8fd8c029a19f6e8a3de Mon Sep 17 00:00:00 2001 From: ttenden Date: Thu, 4 Jul 2024 13:35:33 +0200 Subject: [PATCH] Added KPI G1 ammonia emissions (only on test servers) - Ammonia emissions from fertilizers not yet fully functional --- FarmmapsKPI/KPIApplication.cs | 54 ++++++++++++++++++++++++++++++--- FarmmapsKPI/KPIInput.json | 18 ++++++----- FarmmapsKPI/KPIdefinitions.csv | 51 +++++++++++++++++-------------- FarmmapsKPI/Models/KPIoutput.cs | 8 ++++- 4 files changed, 94 insertions(+), 37 deletions(-) diff --git a/FarmmapsKPI/KPIApplication.cs b/FarmmapsKPI/KPIApplication.cs index 97d4994..e3d8af9 100644 --- a/FarmmapsKPI/KPIApplication.cs +++ b/FarmmapsKPI/KPIApplication.cs @@ -48,7 +48,8 @@ namespace FarmmapsKPI //fnKPIinput = Console.ReadLine(); //if (string.IsNullOrEmpty(fnKPIinput)) //{ - fnKPIinput = "KPIinput.json"; + //fnKPIinput = "KPIinput.json"; + fnKPIinput = "C:\\git\\FarmMapsApiClient_KB34_MAST\\FarmmapsKPI\\KPIinput.json"; //} var fieldsInputJson = File.ReadAllText(fnKPIinput); @@ -93,7 +94,7 @@ namespace FarmmapsKPI int nrun = 1; for (int run = 1; run <= nrun; run++) { for (int i = 0; i < fieldsInputs.Count; i++) - //for (int i = 11; i < 13; i++) // for testing + //for (int i = 2; i < 3; i++) // for testing { watch.Restart(); input = fieldsInputs[i]; @@ -432,7 +433,7 @@ namespace FarmmapsKPI int DuplicateCounter; value = 0; id = ""; - DuplicateCounter = 1; + DuplicateCounter = 1; for (int i = 0; i < KPIItems.Count; i++) { itemi = KPIItems[i]; @@ -668,7 +669,6 @@ namespace FarmmapsKPI sw.WriteLine(string.Join(",", dataList)); } } - else if (kpio.id == "E1") { //for E1, environmentMeasureData is an array of elements with 1 per pesticide. Inside each element there are multiple mbp_KPIvariables to be written @@ -705,9 +705,53 @@ namespace FarmmapsKPI } } } + else if (kpio.id == "G1") //TtD + { + //Make a new dataList = new line to be written + dataList = new List + { + run.ToString(), + kpio.parentName, + cropfieldItem.Code, + kpio.data.area, + kpio.data.cropTypeCode, + kpio.data.cropTypeName, + kpio.id, + kpio.quantity, // in KPI output quantity is what we call KPIvariable in headerlist of csv file + kpio.value, + kpio.unit, + kpio.targetValue, + kpio.thresholdValue + }; + //Write the datalist to a line to the streamwrieter sw for the output csv file + sw.WriteLine(string.Join(",", dataList)); + + foreach (string elementName in kpio.G1elements) + { + // get G1element from the element called values + string elementValue = (string)kPIelementsOfBalance.GetType().GetProperty(elementName).GetValue(kPIelementsOfBalance, null); + dataList = new List + { + run.ToString(), + kpio.parentName, + cropfieldItem.Code, + kpio.data.area, + kpio.data.cropTypeCode, + kpio.data.cropTypeName, + kpio.id, + elementName, // specific output variable name for G1 element + elementValue, // specific output value name for G1 element + kpio.unit, + "", + "" + }; + //Write the datalist to a line to the streamwrieter sw for the output csv file + sw.WriteLine(string.Join(",", dataList)); + } + } else { - //Any other KPI, example A1 or D1, with just 1 record to write + //Any other KPI, (D1, F1, and F2), with just 1 record to write dataList = new List { run.ToString(), diff --git a/FarmmapsKPI/KPIInput.json b/FarmmapsKPI/KPIInput.json index 394e108..6fdf94d 100644 --- a/FarmmapsKPI/KPIInput.json +++ b/FarmmapsKPI/KPIInput.json @@ -17,7 +17,7 @@ "soilName": "Sand", //From codelist CL405 "cropTypeCode": "1010101", //From codelist CL263 "cropTypeName": "Potato", //From codelist CL263 - "productionPurposeCode": "3", //From codelist CL251. For testing, see case with consumption & starch potato + "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 @@ -81,7 +81,7 @@ "soilName": "Clay", //From codelist CL405 "cropTypeCode": "1010101", //From codelist CL263 "cropTypeName": "Potato", //From codelist CL263 - "productionPurposeCode": "3", //From codelist CL251. For testing, see case with consumption & starch potato + "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 @@ -145,7 +145,7 @@ "soilName": "Sand", "cropTypeCode": "1010101", //From codelist CL263 "cropTypeName": "Potato", //From codelist CL263 - "productionPurposeCode": "2", //From codelist CL251. For testing, see case with consumption & starch potato + "productionPurposeCode": "002", //From codelist CL251. For testing, see case with consumption & starch potato "productionPurposeName": "starch" //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 @@ -205,7 +205,7 @@ "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": "3", //From codelist CL251. Can be omitted if unknown + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", @@ -220,6 +220,7 @@ "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 + "type": "MOR", //indicates wether the fertilization is anorganic (MAN) or organic (MOR) "quantity": "200", //"status": "3", // refers to codelist CL256. where 3 stand for completed. The status does not matter and is not used in the KPI calculations "operationCode": "7", // refers to codelist CL018 consisting of main catergorie of operations. Code 7 stands for fertilization @@ -240,6 +241,7 @@ //"status": "3", // refers to codelist CL256. where 3 stand for completed. The status does not matter and is not used in the KPI calculations "operationCode": "7", // refers to codelist CL018 consisting of main catergorie of operations. Code 7 stands for fertilization "product": "2329", //refers to codelist CL022 with fertilizer types + "type": "MAN",//indicates wether the fertilization is anorganic (MAN) or organic (MOR) "quantity": "32000", "unitCode": "KGMHAR", "contractor": false, @@ -298,7 +300,7 @@ "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": "3", //From codelist CL251. Can be omitted if unknown + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", @@ -373,7 +375,7 @@ "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": "3", //From codelist CL251. Can be omitted if unknown + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", @@ -448,7 +450,7 @@ "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": "3", //From codelist CL251. Can be omitted if unknown + "productionPurposeCode": "003", //From codelist CL251. Can be omitted if unknown "productionPurposeName": "consumption" //From codelist CL251. Can be omitted if unknown }, "CropRecordingItemCode": "", @@ -518,7 +520,7 @@ "final": true, //always true "cropTypeCode": "1010101", //From codelist CL263 "cropTypeName": "Potato", //From codelist CL263 - "productionPurposeCode": "3", //From codelist CL251. Can be omitted if unknown + "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 diff --git a/FarmmapsKPI/KPIdefinitions.csv b/FarmmapsKPI/KPIdefinitions.csv index 317f999..c140e48 100644 --- a/FarmmapsKPI/KPIdefinitions.csv +++ b/FarmmapsKPI/KPIdefinitions.csv @@ -1,23 +1,28 @@ -KPIid,KPIvariable,Description,KPItargetvalue,KPIthresholdValue -A1,yield,observed yield (user input),target value as in benchmark value for same crop in same region. E.g. cropyield target is from Central Bureau of Statistics (CBS) for same crop in region in which the cropfield (geometry) is located.,No threshold for this KPI. -A1,strawYield,straw yield (user input; value 0 or not filled in = straw remains in field; value > 0 means straw was exported),there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B1,nitrogen,Nitrogen surplus = N artifical fertilizer + N manure+ N atmospheric deposition + N fixation by crop + N from seed potatoes - N removal through harvested product. Calculated KPI internal model & parameters and from user input: yield and fertilizer/manure applications.,The target value depends on the soil type. To calculate the threshold and target values data from CBS and RIVM are used. The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw).,The threshold value depends on soil type and groundwater levels. To calculate the threshold and target values data from CBS and RIVM are used. The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw). -B1,nHarvestedKgHa, N removal through harvested product. Calculated KPI internal model & parameters and from user input: yield.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B1,nHarvestedStrawKgHa, N removal through harvested product. Calculated KPI internal model & parameters and from user input: yieldStraw.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B1,nFixationNKgHa, N fixated by crop (legumes only). Calculated KPI internal model & parameters and from user input: planting date,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B1,nDepositionNKgHa, N deposition based on RIVM maps. ,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B1,nFertilizerNKgHa, N from artifical fertilizers and manure.Calculated KPI internal model & parameters and from user input: fertilizer/manure applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B1,sowPlantingNKgHa, N from seed potatoes (potatoes only). Calculated KPI internal model & parameters and from user input: amount of planted seed potatoes,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B2,phosphate,Phosphate surplus = P fertilizer + P from seed potatoes - P removal through harvested product. Calculated KPI internal model & parameters and from user input: yield and fertilizer applications ,The phosphate target value is set at 20 kg/ha ,No threshold for this KPI. -B2,pHarvestedKgHa, P2O5 removal through harvested product. Calculated KPI internal model & parameters and from user input: yield,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B2,pHarvestedStrawKgHa, P2O5 removal through harvested product. Calculated KPI internal model & parameters and from user input: yieldStraw,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B2,pFertillizerPKgHa, P2O5 from artifical fertilizers and manure.Calculated KPI internal model & parameters and from user input: fertilizer/manure applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -B2,sowPlantingPKgHa, P2O5 from seeds potatoes (potatoes only). Calculated KPI internal model & parameters and from user input: amount of planted seed potatoes,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -C1,effective organic matter supply,"Organic matter supply = Organic matter from manure + Crop residues to soil + organic matter from green manure. Calculated KPI internal model & parameters and from user input: yield and manure applications. ""Effective"" means netto, after correction for carbon respiration by soil microbial activity",The target value for this KPI is the amount of EOM that companies with ‘ Goede Landbouwpraktijk’ supply (2500 kg EOM/ha/year). ,The threshold value is 2000 kg EOM/ha/year. This value comes from van Doorn et al. (2022) which states that on average 2000 kg of EOM/ha degrades on Dutch agricultural land. This is the also the threshold value from biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw) -C1,fertilizerEom,"Effective organic matter added through fertilizer (animal manure, compost, etc). Calculated KPI internal model & parameters and from user input: manure applications.",there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -C1,greenManureEom,Effective organic matter added through green manure (also called cover crop). Calculated KPI internal model & parameters and from user input: cover crop.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -C1,cropLeftoversEom,Effective organic matter added through crop residues of main product and (when relevant) straw. Calculated KPI internal model & parameters.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's -D1,pesticides,"kg/ha of active ingredient. Sum over kg a.i. of the different crop protection agents applied, with concentration (kg a.i. / kg or litre) of crop protection agents retrieved from CTBG",The target value fort his KPI is to reduce pesticide use to 50% of the amount used in the Netherlands during 2020. Data for 2020 is obtained from CBS statline ,No threshold for this KPI. -E1,mpb,"milieubelastingspunten. For each pesticide applied show 3 sub-mbp's: aquaticLife, groundWater, soilLife","0 applications with exceedances of either the target MBP or risks. MBP's consist of three categories (groundwater, soil life, and aquatic life). An value of <100 in either or these categories counts as exceedance. Each application of pesticides cannot have more then one exceedance for MBP. Risks consist of two categories (natural enemies and pollinators), a value of B or C in either category counts as exceedance. Each application of pesticides cannot have more then one exceedance for risks. Values and methodology come from Environmental Yardstick for Pesticides (https://www.milieumeetlat.nl/). The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw).","0 applications with exceedances of either the target MBP or risks. MBP's consist of three categories (groundwater, soil life, and aquatic life). An value of <10 in either or these categories counts as exceedance. Each application of pesticides cannot have more then one exceedance for MBP. Risks consist of two categories (natural enemies and pollinators), a value of B or C in either category counts as exceedance. Each application of pesticides cannot have more then one exceedance for risks. Values and methodology come from Environmental Yardstick for Pesticides (https://www.milieumeetlat.nl/). The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw)." -F1,greenness,time of year that the field was covered. Based on NDVI data from AgroDataCube.,Target value is 75%.,Threshold value is 25%. -F2,rotationindex,index of diversity of crops over time. Calculated in AgroDataCube,Target value is 75%.,Threshold value is 25%. +KPIid,KPIvariable,Description,Calculated,KPItargetvalue,KPIthresholdValue +A1,yield,observed yield,User input,target value as in benchmark value for same crop in same region. E.g. cropyield target is from Central Bureau of Statistics (CBS) for same crop in region in which the cropfield (geometry) is located.,No threshold for this KPI. +A1,strawYield,straw yield; value 0 or not filled in = straw remains in field; value > 0 means straw was exported,User input,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B1,nitrogen,Nitrogen surplus = N artifical fertilizer + N manure+ N atmospheric deposition + N fixation by crop + N from seed potatoes - N removal through harvested product. ,Calculated KPI internal model & parameters and from user input: yield and fertilizer/manure applications.,The target value depends on the soil type. To calculate the threshold and target values data from CBS and RIVM are used. The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw).,The threshold value depends on soil type and groundwater levels. To calculate the threshold and target values data from CBS and RIVM are used. The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw). +B1,nHarvestedKgHa, N removal through harvested product. ,Calculated KPI internal model & parameters and from user input: yield.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B1,nHarvestedStrawKgHa, N removal through harvested product. ,Calculated KPI internal model & parameters and from user input: yieldStraw.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B1,nFixationNKgHa, N fixated by crop (legumes only). ,Calculated KPI internal model & parameters and from user input: planting date,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B1,nDepositionNKgHa, N deposition,Based on RIVM maps. Value depens on location,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B1,nFertilizerNKgHa, N from artifical fertilizers and manure.,KPI internal model & parameters and from user input: fertilizer/manure applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B1,sowPlantingNKgHa, N from seed potatoes (potatoes only). ,Calculated KPI internal model & parameters and from user input: amount of planted seed potatoes,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B2,phosphate,Phosphate surplus = P fertilizer + P from seed potatoes - P removal through harvested product. ,Calculated KPI internal model & parameters and from user input: yield and fertilizer applications ,The phosphate target value is set at 20 kg/ha ,No threshold for this KPI. +B2,pHarvestedKgHa, P2O5 removal through harvested product. ,Calculated KPI internal model & parameters and from user input: yield,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B2,pHarvestedStrawKgHa, P2O5 removal through harvested product. ,Calculated KPI internal model & parameters and from user input: yieldStraw,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B2,pFertillizerPKgHa, P2O5 from artifical fertilizers and manure.,Calculated KPI internal model & parameters and from user input: fertilizer/manure applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +B2,sowPlantingPKgHa, P2O5 from seeds potatoes (potatoes only). ,Calculated KPI internal model & parameters and from user input: amount of planted seed potatoes,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +C1,effective organic matter supply,"Organic matter supply = Organic matter from manure + Crop residues to soil + organic matter from green manure. ""Effective"" means netto, after correction for carbon respiration by soil microbial activity",Calculated KPI internal model & parameters and from user input: yield and manure applications.,The target value for this KPI is the amount of EOM that companies with ‘ Goede Landbouwpraktijk’ supply (2500 kg EOM/ha/year). ,The threshold value is 2000 kg EOM/ha/year. This value comes from van Doorn et al. (2022) which states that on average 2000 kg of EOM/ha degrades on Dutch agricultural land. This is the also the threshold value from biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw) +C1,fertilizerEom,"Effective organic matter added through fertilizer (animal manure, compost, etc). ",Calculated KPI internal model & parameters and from user input: manure applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +C1,greenManureEom,Effective organic matter added through green manure (also called cover crop). ,Calculated KPI internal model & parameters and from user input: cover crop.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +C1,cropLeftoversEom,Effective organic matter added through crop residues of main product and (when relevant) straw.,Calculated KPI internal model & parameters.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +D1,pesticides,"kg/ha of active ingredient. Sum over kg a.i. of the different crop protection agents applied, with concentration (kg a.i. / kg or litre) of crop protection agents ",Retrieved from CTBG,The target value fort his KPI is to reduce pesticide use to 50% of the amount used in the Netherlands during 2020. Data for 2020 is obtained from CBS statline ,No threshold for this KPI. +E1,mpb,"milieubelastingspunten. For each pesticide applied show 3 sub-mbp's: aquaticLife, groundWater, soilLife",Retrieved from CTBG,"0 applications with exceedances of either the target MBP or risks. MBP's consist of three categories (groundwater, soil life, and aquatic life). An value of <100 in either or these categories counts as exceedance. Each application of pesticides cannot have more then one exceedance for MBP. Risks consist of two categories (natural enemies and pollinators), a value of B or C in either category counts as exceedance. Each application of pesticides cannot have more then one exceedance for risks. Values and methodology come from Environmental Yardstick for Pesticides (https://www.milieumeetlat.nl/). The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw).","0 applications with exceedances of either the target MBP or risks. MBP's consist of three categories (groundwater, soil life, and aquatic life). An value of <10 in either or these categories counts as exceedance. Each application of pesticides cannot have more then one exceedance for MBP. Risks consist of two categories (natural enemies and pollinators), a value of B or C in either category counts as exceedance. Each application of pesticides cannot have more then one exceedance for risks. Values and methodology come from Environmental Yardstick for Pesticides (https://www.milieumeetlat.nl/). The same calculation method is also used in biodiversiteitsmonitoring akkerbouw (https://www.bo-akkerbouw.nl/kennis-en-innovatie/pps-biodiversiteitsmonitor-akkerbouw)." +F1,greenness,time of year that the field was covered. ,Based on NDVI data from AgroDataCube.,Target value is 75%.,Threshold value is 25%. +F2,rotationindex,index of diversity of crops over time. ,Calculated in AgroDataCube,Target value is 75%.,Threshold value is 25%. +G1,ammonia emissions,"ammonia emissions from crop residues, green manure, artificial fertilizers and organic fertilizers.",Calculated KPI internal model & parameters and from user input: fertilizer/manure applications.,There is not target value yet for this KPI. It currently has a dummy value of 9999.,There is not target value yet for this KPI. It currently has a dummy value of 9999. +G1,Manure,ammonia emissions from manure.,Calculated KPI internal model & parameters and from user input: manure applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +G1,GreenManure,ammonia emissions from green manure (also called cover crop). ,Calculated KPI internal model & parameters.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +G1,CropResidues,ammonia emissions from crop residues. ,Calculated KPI internal model & parameters.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's +G1,ArtificialFertilize,ammonia emissions from artificial fertilizers ,Calculated KPI internal model & parameters and from user input: artificial fertilizer applications.,there are no target values for individual compenets of KPI's,there are no threshold values for individual compenets of KPI's diff --git a/FarmmapsKPI/Models/KPIoutput.cs b/FarmmapsKPI/Models/KPIoutput.cs index ba22106..a9db192 100644 --- a/FarmmapsKPI/Models/KPIoutput.cs +++ b/FarmmapsKPI/Models/KPIoutput.cs @@ -20,13 +20,15 @@ namespace FarmmapsKPI.Models public List A1elements; //TtD public List B1elements; public List B2elements; - public List C1elements; + public List C1elements; + public List G1elements; //TtD public KPIOutput() { this.A1elements = new List() { "yield", "strawYield" }; //TtD this.B1elements = new List() { "nHarvestedKgHa", "nHarvestedStrawKgHa", "nFixationNKgHa", "nDepositionNKgHa","nFertilizerNKgHa","sowPlantingNKgHa" }; //TtD this.B2elements = new List() { "pHarvestedKgHa", "pHarvestedStrawKgHa", "pFertillizerPKgHa", "sowPlantingPKgHa" }; //TtD this.C1elements = new List() { "fertilizerEom", "greenManureEom", "cropLeftoversEom" }; //TtD to do rename + this.G1elements = new List() { "Manure", "GreenManure", "CropResidues", "ArtificialFertilize" }; //TtD } } public class KPIOutputData @@ -69,5 +71,9 @@ namespace FarmmapsKPI.Models public string fertilizerEom { get; set; } //TtD public string greenManureEom { get; set; } //TtD public string cropLeftoversEom { get; set; } //TtD tamara: rename + public string Manure { get; set; } //TtD + public string GreenManure { get; set; } //TtD + public string CropResidues { get; set; } //TtD + public string ArtificialFertilize { get; set; } //TtD } } \ No newline at end of file