From 5a2ff9aabf61b1e429cdcff3a298a5468173730e Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sun, 12 Oct 2025 21:51:33 +0200 Subject: [PATCH 01/19] Update years for at_crop be_vlg es_an es_cl es_pv --- fiboa_cli/datasets/at_crop.py | 3 ++- fiboa_cli/datasets/be_vlg.py | 6 +++--- fiboa_cli/datasets/es_an.py | 1 + fiboa_cli/datasets/es_cl.py | 6 ++---- fiboa_cli/datasets/es_pv.py | 2 +- .../inspire_schlaege_2024-2_polygon.gpkg.zip | Bin 20138 -> 0 bytes .../inspire_schlaege_2025-1_polygon.gpkg.zip | Bin 0 -> 29327 bytes 7 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 tests/data-files/convert/at_crop/inspire_schlaege_2024-2_polygon.gpkg.zip create mode 100644 tests/data-files/convert/at_crop/inspire_schlaege_2025-1_polygon.gpkg.zip diff --git a/fiboa_cli/datasets/at_crop.py b/fiboa_cli/datasets/at_crop.py index c97ba513..fb4a5bcf 100644 --- a/fiboa_cli/datasets/at_crop.py +++ b/fiboa_cli/datasets/at_crop.py @@ -6,6 +6,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): variants = { + "2025": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2025-1_polygon.gpkg.zip", "2024": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2024-2_polygon.gpkg.zip", "2023": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2023-2_polygon.gpkg.zip", "2022": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2022_polygon.gpkg.zip", @@ -20,7 +21,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): short_name = "Austria" title = "Field boundaries for Austria" description = """ - **Crop Field boundaries for Austria - INVEKOS Schläge Österreich 2021.** + **Crop Field boundaries for Austria - INVEKOS Schläge Österreich 2025.** This layer includes all field uses recorded by the applicants, which serve as the basis for the funding process. A field is a contiguous area of a piece of land that is cultivated for a growing season with only one crop (field use type) and diff --git a/fiboa_cli/datasets/be_vlg.py b/fiboa_cli/datasets/be_vlg.py index 7572b926..21087cd1 100644 --- a/fiboa_cli/datasets/be_vlg.py +++ b/fiboa_cli/datasets/be_vlg.py @@ -10,7 +10,8 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): variants = { str(k): {PREFIX + v: [v.replace("_GPKG.zip", ".gpkg")]} for k, v in ( - (2024, "Landbouwgebruikspercelen_2024_-_Voorlopig_(extractie_15-10-2024)_GPKG.zip"), + (2025, "Landbouwgebruikspercelen_2025_-_Voorlopig_(extractie_02-06-2025)_GPKG.zip"), + (2024, "Landbouwgebruikspercelen_2024_-_Definitief_(extractie_27-03-2025)_GPKG.zip"), (2023, "Landbouwgebruikspercelen_2023_-_Definitief_(extractie_28-03-2024)_GPKG.zip"), (2022, "Landbouwgebruikspercelen_2022_-_Definitief_(extractie_26-06-2023)_GPKG.zip"), (2021, "Landbouwgebruikspercelen_2021_-_Definitief_(extractie_15-03-2022)_GPKG.zip"), @@ -35,7 +36,6 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): columns = { "geometry": "geometry", - "BT_BRON": "source", "BT_OMSCH": "typology", "GRAF_OPP": "metrics:area", "REF_ID": "id", @@ -47,4 +47,4 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): } ec_mapping_csv = "be_vlg_2021.csv" - missing_schemas = {"properties": {"source": {"type": "string"}, "typology": {"type": "string"}}} + missing_schemas = {"properties": {"typology": {"type": "string"}}} diff --git a/fiboa_cli/datasets/es_an.py b/fiboa_cli/datasets/es_an.py index dcc52cee..3c56ef59 100644 --- a/fiboa_cli/datasets/es_an.py +++ b/fiboa_cli/datasets/es_an.py @@ -6,6 +6,7 @@ class ANConverter(ESBaseConverter): variants = { + "2025": "https://www.juntadeandalucia.es/ssdigitales/festa/agriculturapescaaguaydesarrollorural/2025/SP25_REC_PROV_{code}.zip", "2024": "https://www.juntadeandalucia.es/ssdigitales/festa/agriculturapescaaguaydesarrollorural/2024/SP24_REC_{code}.zip", "2023": "https://www.juntadeandalucia.es/ssdigitales/festa/agriculturapescaaguaydesarrollorural/2023/SP23_REC_{code}.zip", "2022": "https://www.juntadeandalucia.es/export/drupaljda/01_SP22_REC_PROV_{code}.zip", diff --git a/fiboa_cli/datasets/es_cl.py b/fiboa_cli/datasets/es_cl.py index 4bc1ba48..3eac8b88 100644 --- a/fiboa_cli/datasets/es_cl.py +++ b/fiboa_cli/datasets/es_cl.py @@ -51,12 +51,10 @@ def download_files(self, uris, cache_folder=None): def get_urls(self): if not self.variant: - self.variant = "2024" + self.variant = "2025" logger.warning(f"Choosing first year {self.variant}") else: - assert self.variant in "2024 2023 2022 2021 2020 2019".split(), ( - f"Wrong year {self.variant}" - ) + assert 2019 <= int(self.variant) <= 2025, f"Wrong year {self.variant}" base = f"http://ftp.itacyl.es/cartografia/05_SIGPAC/{self.variant}_ETRS89/Parcelario_SIGPAC_CyL_Provincias/" response = requests.get(base) assert response.status_code == 200, f"Error getting urls {response}\n{response.content}" diff --git a/fiboa_cli/datasets/es_pv.py b/fiboa_cli/datasets/es_pv.py index aabc29c6..ff45efbb 100644 --- a/fiboa_cli/datasets/es_pv.py +++ b/fiboa_cli/datasets/es_pv.py @@ -10,7 +10,7 @@ class ESPVConverter(ESBaseConverter): str( year ): f"https://www.geo.euskadi.eus/cartografia/DatosDescarga/Agricultura/SIGPAC/SIGPAC_CAMPA%C3%91A_{year}_V1/" - for year in range(2024, 2015, -1) + for year in range(2025, 2015, -1) } id = "es_pv" short_name = "Spain Basque Country" diff --git a/tests/data-files/convert/at_crop/inspire_schlaege_2024-2_polygon.gpkg.zip b/tests/data-files/convert/at_crop/inspire_schlaege_2024-2_polygon.gpkg.zip deleted file mode 100644 index e5a2035707a64fc73c6cfcc437fc5cf0a3918d16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20138 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 FzX9xqqHh2I literal 0 HcmV?d00001 From a62353b050e7972d71aa31c8b89e266b9676e7c4 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 10:44:03 +0200 Subject: [PATCH 02/19] Always call super().migrate --- fiboa_cli/datasets/ai4sf.py | 2 +- fiboa_cli/datasets/br_conab.py | 2 +- fiboa_cli/datasets/de_sl.py | 2 +- fiboa_cli/datasets/de_th.py | 2 +- fiboa_cli/datasets/dk.py | 2 +- fiboa_cli/datasets/es.py | 2 +- fiboa_cli/datasets/es_cat.py | 2 +- fiboa_cli/datasets/ie.py | 2 +- fiboa_cli/datasets/nz.py | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fiboa_cli/datasets/ai4sf.py b/fiboa_cli/datasets/ai4sf.py index c52bfe97..a315b86b 100644 --- a/fiboa_cli/datasets/ai4sf.py +++ b/fiboa_cli/datasets/ai4sf.py @@ -111,7 +111,7 @@ def migrate(self, gdf): gdf["fiboa_id"] = ( gdf["id"].astype(str).str.zfill(2) + "_" + gdf.index.astype(str).str.zfill(5) ) - return gdf + return super().migrate(gdf) missing_schemas = { "properties": { diff --git a/fiboa_cli/datasets/br_conab.py b/fiboa_cli/datasets/br_conab.py index a2efe84e..48e29cca 100644 --- a/fiboa_cli/datasets/br_conab.py +++ b/fiboa_cli/datasets/br_conab.py @@ -93,7 +93,7 @@ def migrate(self, gdf): gdf.loc[gdf["area_ha"] == 0, "area_ha"] = None gdf["cd_mun"] = gdf["cd_mun"].combine_first(gdf["CD_MUN"]).apply(fformat) gdf["nm_mun"] = gdf["nm_mun"].combine_first(gdf["NM_MUN"]).combine_first(gdf["NM_MUNIC"]) - return gdf + return super().migrate(gdf) def get_data(self, paths, **kwargs): # Set invalid geometries to None in Cafe/MG/CAFE-MG_Safra_2017.zip diff --git a/fiboa_cli/datasets/de_sl.py b/fiboa_cli/datasets/de_sl.py index 0eb3b489..5ab3185e 100644 --- a/fiboa_cli/datasets/de_sl.py +++ b/fiboa_cli/datasets/de_sl.py @@ -54,4 +54,4 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): def migrate(self, gdf): gdf["flik"] = gdf["description"].apply(parse_flik) gdf["area"] = gdf["description"].apply(parse_size) - return gdf + return super().migrate(gdf) diff --git a/fiboa_cli/datasets/de_th.py b/fiboa_cli/datasets/de_th.py index f7dd4482..4ac14ae6 100644 --- a/fiboa_cli/datasets/de_th.py +++ b/fiboa_cli/datasets/de_th.py @@ -67,7 +67,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): def migrate(self, gdf): col = "GEO_UPDAT" gdf[col] = pd.to_datetime(gdf[col], format="%d.%m.%Y", utc=True) - return gdf + return super().migrate(gdf) column_filters = {"LF": lambda col: col == "LF"} diff --git a/fiboa_cli/datasets/dk.py b/fiboa_cli/datasets/dk.py index 66434298..c4935445 100644 --- a/fiboa_cli/datasets/dk.py +++ b/fiboa_cli/datasets/dk.py @@ -31,4 +31,4 @@ class DKConverter(AdminConverterMixin, FiboaBaseConverter): def migrate(self, gdf) -> gpd.GeoDataFrame: gdf["determination:datetime"] = f"{self.variant}-01-01T00:00:00Z" - return gdf + return super().migrate(gdf) diff --git a/fiboa_cli/datasets/es.py b/fiboa_cli/datasets/es.py index 46a97a35..4d2fd9d4 100644 --- a/fiboa_cli/datasets/es.py +++ b/fiboa_cli/datasets/es.py @@ -47,4 +47,4 @@ def migrate(self, gdf): mapping_en = {row["original_code"]: row["name_en"] for row in rows} gdf["crop:name"] = gdf[self.use_code_attribute].map(mapping) gdf["crop:name_en"] = gdf[self.use_code_attribute].map(mapping_en) - return gdf + return super().migrate(gdf) diff --git a/fiboa_cli/datasets/es_cat.py b/fiboa_cli/datasets/es_cat.py index 02e7e71d..11747dbe 100644 --- a/fiboa_cli/datasets/es_cat.py +++ b/fiboa_cli/datasets/es_cat.py @@ -77,4 +77,4 @@ def migrate(self, gdf): assert len(missing) == 0, f"Can not map crops {missing}" gdf["crop:code"] = gdf["cultiu"].map(mapping) gdf["crop:name_en"] = gdf["cultiu"].map(mapping_en) - return gdf + return super().migrate(gdf) diff --git a/fiboa_cli/datasets/ie.py b/fiboa_cli/datasets/ie.py index 836c3e4c..b12fa970 100644 --- a/fiboa_cli/datasets/ie.py +++ b/fiboa_cli/datasets/ie.py @@ -42,7 +42,7 @@ def migrate(self, gdf) -> gpd.GeoDataFrame: gdf["crop_name"] = gdf["crop_name"].str.split(", ").str.get(0) gdf = gdf[gdf["crop_name"] != "Void"] # Exclude non-agriculture fields gdf["determination:datetime"] = gdf["observationDate"].str.replace("+01:00", "T00:00:00Z") - return gdf + return super().migrate(gdf) def file_migration( self, gdf: gpd.GeoDataFrame, path: str, uri: str, layer: str = None diff --git a/fiboa_cli/datasets/nz.py b/fiboa_cli/datasets/nz.py index 7ce88339..83c904b7 100644 --- a/fiboa_cli/datasets/nz.py +++ b/fiboa_cli/datasets/nz.py @@ -49,4 +49,4 @@ def migrate(self, gdf): rows = read_data_csv("nz_region_codes.csv") mapping = {row["Subdivision name"]: row["3166-2 code"][len("NZ-") :] for row in rows} gdf["Region"] = gdf["Region"].map(mapping) - return gdf + return super().migrate(gdf) From 141cc58b83872b33dc9d83e098098baf936083ea Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 10:49:23 +0200 Subject: [PATCH 03/19] Add HCAT to datasets where possible, simplify with AddHCATMixin --- fiboa_cli/datasets/cz.py | 7 +++---- fiboa_cli/datasets/de_mv.py | 7 ++++--- fiboa_cli/datasets/dk.py | 10 ++++------ fiboa_cli/datasets/fi.py | 7 +++---- fiboa_cli/datasets/hr.py | 19 +++---------------- fiboa_cli/datasets/ie.py | 31 ++++++++++++++++++------------- fiboa_cli/datasets/jecam.py | 12 ++++++++++-- fiboa_cli/datasets/lv.py | 17 +---------------- fiboa_cli/datasets/pt.py | 23 +++++++++++++++++++---- fiboa_cli/datasets/se.py | 25 +++++++++++-------------- fiboa_cli/datasets/si.py | 7 +++---- fiboa_cli/datasets/sk.py | 15 +++++++++++---- 12 files changed, 90 insertions(+), 90 deletions(-) diff --git a/fiboa_cli/datasets/cz.py b/fiboa_cli/datasets/cz.py index d728ff8d..ae54ac8d 100644 --- a/fiboa_cli/datasets/cz.py +++ b/fiboa_cli/datasets/cz.py @@ -2,10 +2,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = "https://mze.gov.cz/public/app/eagriapp/Files/geoprostor_zadosti23_2024-08-01_202409261243_epsg4258.zip" id = "cz" short_name = "Czech" @@ -24,8 +24,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): # 'OKRES_NAZE': 'admin:subdivision_code', } column_migrations = {"DATUM_REP": lambda col: pd.to_datetime(col, format="%d.%m.%Y")} - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("cz_2023.csv")} + ec_mapping_csv = "cz_2023.csv" missing_schemas = { "properties": { "block_id": {"type": "string"}, diff --git a/fiboa_cli/datasets/de_mv.py b/fiboa_cli/datasets/de_mv.py index aef59828..765abc37 100644 --- a/fiboa_cli/datasets/de_mv.py +++ b/fiboa_cli/datasets/de_mv.py @@ -1,9 +1,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = { "https://www.geodaten-mv.de/dienste/gdimv_feldblock_wfs?SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=mv:feldbloecke&OUTPUTFORMAT=shape-zip": "gdimv_feldblock_wfs.zip" } @@ -16,13 +17,13 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): provider = "Ministerium für Landwirtschaft und Umwelt M-V " license = "No restrictions apply " extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} + ec_mapping_csv = "de.csv" columns = { "geometry": "geometry", "fbid": ("id", "flik"), # make flik id a dedicated column to align with NRW etc. "dgl_jahr": "dgl_jahr", - # TODO implement crop:code extension - "bodennutzu": "bodennutzu", # Bodennutzungsart + "bodennutzu": "crop:code", # Bodennutzungsart "bez_kreis": "bez_kreis", # Kreisbezeichnung "groesse_p": "metrics:area", # Produktive Fläche des FB in Hektar (Nettofläche) "perimeter": "metrics:perimeter", # Polygonumfang diff --git a/fiboa_cli/datasets/dk.py b/fiboa_cli/datasets/dk.py index c4935445..7dab9ec4 100644 --- a/fiboa_cli/datasets/dk.py +++ b/fiboa_cli/datasets/dk.py @@ -2,10 +2,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin -class DKConverter(AdminConverterMixin, FiboaBaseConverter): +class DKConverter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): variants = { str(variant): f"https://landbrugsgeodata.fvm.dk/Download/Marker/Marker_{variant}.zip" for variant in range(2024, 2008 - 1, -1) @@ -15,11 +15,8 @@ class DKConverter(AdminConverterMixin, FiboaBaseConverter): title = "Denmark Crop Fields (Marker)" description = "The Danish Ministry of Food, Agriculture and Fisheries publishes Crop Fields (Marker) for each year." - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("nl_2020.csv")} - provider = "Danish Agricultural Agency " - + ec_mapping_csv = "dk_2019.csv" license = "CC0-1.0" columns = { "geometry": "geometry", @@ -30,5 +27,6 @@ class DKConverter(AdminConverterMixin, FiboaBaseConverter): } def migrate(self, gdf) -> gpd.GeoDataFrame: + gdf["Afgkode"] = gdf["Afgkode"].astype(float).fillna(value=0).astype(int).astype(str) gdf["determination:datetime"] = f"{self.variant}-01-01T00:00:00Z" return super().migrate(gdf) diff --git a/fiboa_cli/datasets/fi.py b/fiboa_cli/datasets/fi.py index 71d309f1..253ec93c 100644 --- a/fiboa_cli/datasets/fi.py +++ b/fiboa_cli/datasets/fi.py @@ -2,10 +2,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = "https://download.inspire.ruokavirasto-awsa.com/data/2023/LandUse.ExistingLandUse.GSAAAgriculturalParcel.gpkg" id = "fi" short_name = "Finland" @@ -31,8 +31,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): # Make year (1st January) from column "VUOSI" "VUOSI": lambda col: pd.to_datetime(col, format="%Y"), } - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("fi_2020.csv")} + ec_mapping_csv = "fi_2020.csv" area_is_in_ha = False area_calculate_missing = True diff --git a/fiboa_cli/datasets/hr.py b/fiboa_cli/datasets/hr.py index 5c682e9b..42c74ad4 100644 --- a/fiboa_cli/datasets/hr.py +++ b/fiboa_cli/datasets/hr.py @@ -1,11 +1,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.data import read_data_csv -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = "https://www.apprrr.hr/wp-content/uploads/nipp/land_parcels.gpkg" id = "hr" short_name = "Croatia" @@ -31,8 +30,6 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): columns = { "id": "id", "land_use_id": "crop:code", - "crop:name": "crop:name", - "crop:name_en": "crop:name_en", "area": "metrics:area", "geometry": "geometry", "home_name": "home_name", @@ -60,8 +57,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): "jpaid": "jpaid", } - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("hr_2020.csv")} + ec_mapping_csv = "hr_2020.csv" missing_schemas = { "required": [ @@ -99,14 +95,5 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): }, } - def migrate(self, gdf): - gdf = super().migrate(gdf) - rows = read_data_csv("hr_categories.csv", delimiter=";") - mapping = {int(row["code"]): row["name"] for row in rows} - mapping_en = {int(row["code"]): row["name_en"] for row in rows} - gdf["crop:name"] = gdf["land_use_id"].map(mapping) - gdf["crop:name_en"] = gdf["land_use_id"].map(mapping_en) - return gdf - area_is_in_ha = False area_calculate_missing = True diff --git a/fiboa_cli/datasets/ie.py b/fiboa_cli/datasets/ie.py index b12fa970..db0da6b6 100644 --- a/fiboa_cli/datasets/ie.py +++ b/fiboa_cli/datasets/ie.py @@ -3,13 +3,18 @@ from ..conversion.convert_gml import gml_assure_columns from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.data import read_data_csv +from .commons.hcat import AddHCATMixin -class IEConverter(AdminConverterMixin, FiboaBaseConverter): - sources = { - "https://osi-inspire-atom.s3-eu-west-1.amazonaws.com/IACSdata/IACS_GSAA_2022.zip": [ - "IACS_GSAA_2022.gml" - ] +class IEConverter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + variants = { + str(year): { + f"https://dafm-inspire-atom.s3.eu-west-1.amazonaws.com/files/LU/GSAA_{year}.zip": [ + f"GSAA_{year}.gml" + ] + } + for year in range(2024, 2021, -1) } id = "ie" @@ -25,22 +30,22 @@ class IEConverter(AdminConverterMixin, FiboaBaseConverter): license = "CC-BY-4.0" columns = { "geometry": "geometry", - "crop_name": "crop_name", + "crop_name": "crop:name", + "crop_code": "crop:code", "localId": "id", "determination:datetime": "determination:datetime", } - # TODO use crop-extension, maybe with reverse mapping - - missing_schemas = { - "properties": { - "crop_name": {"type": "string"}, - } - } + ec_mapping_csv = "ie_2023.csv" def migrate(self, gdf) -> gpd.GeoDataFrame: # crop_name can be multiple: "crop1, crop2, crop3". We only read the main crop (first). gdf["crop_name"] = gdf["crop_name"].str.split(", ").str.get(0) gdf = gdf[gdf["crop_name"] != "Void"] # Exclude non-agriculture fields + + rows = read_data_csv("ie_2023.csv") + mapping = {row["original_name"]: index + 1 for index, row in enumerate(rows)} + gdf["crop_code"] = gdf["crop_name"].map(mapping) + gdf["determination:datetime"] = gdf["observationDate"].str.replace("+01:00", "T00:00:00Z") return super().migrate(gdf) diff --git a/fiboa_cli/datasets/jecam.py b/fiboa_cli/datasets/jecam.py index 9e079dcb..89d57168 100644 --- a/fiboa_cli/datasets/jecam.py +++ b/fiboa_cli/datasets/jecam.py @@ -3,6 +3,9 @@ from fiboa_cli.conversion.fiboa_converter import FiboaBaseConverter from fiboa_cli.datasets.commons.data import read_data_csv +from fiboa_cli.datasets.commons.hcat import CROP_EXTENSION + +CODE_LIST = "https://fiboa.org/code/jecam/crop.csv" class JecamConvert(FiboaBaseConverter): @@ -38,13 +41,14 @@ class JecamConvert(FiboaBaseConverter): "AcquiDate": "determination:datetime", "admin:country_code": "admin:country_code", "SiteName": "site_name", + "crop:code": "crop:code", "CropType1": "crop:name", "Irrigated": "irrigated", } column_additions = { - "crop:code_list": "https://fiboa.org/code/jecam/crop.csv", + "crop:code_list": CODE_LIST, } - extensions = {ADMIN_DIVISION} + extensions = {ADMIN_DIVISION, CROP_EXTENSION} missing_schemas = { "properties": { "site_name": {"type": "string"}, @@ -60,6 +64,10 @@ def migrate(self, gdf) -> gpd.GeoDataFrame: mapping = {row["name"]: row["alpha-2"] for row in rows} gdf["admin:country_code"] = gdf["Country"].map(mapping) + rows = read_data_csv("jecam_crop.csv") + mapping = {row["crop_name"]: index + 1 for index, row in enumerate(rows)} + gdf["crop:code"] = gdf["CropType1"].map(mapping) + gdf.loc[gdf["Area_ha"] == 0, "Area_ha"] = None gdf["Irrigated"] = gdf["Irrigated"].astype(bool) return gdf diff --git a/fiboa_cli/datasets/lv.py b/fiboa_cli/datasets/lv.py index b3143406..2a6abf9a 100644 --- a/fiboa_cli/datasets/lv.py +++ b/fiboa_cli/datasets/lv.py @@ -1,7 +1,7 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import AddHCATMixin, ec_url +from .commons.ec import AddHCATMixin count = 3000 @@ -37,10 +37,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "geometry": "geometry", "DATA_CHANGED_DATE": "determination:datetime", "area": "metrics:area", - "crop:code_list": "crop:code_list", "PRODUCT_CODE": "crop:code", - "crop:name": "crop:name", - "crop:name_en": "crop:name_en", } missing_schemas = { "properties": { @@ -52,15 +49,3 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): ec_mapping_csv = "lv_2021.csv" area_calculate_missing = True - - def migrate(self, gdf): - gdf = super().migrate(gdf) - - original_name_mapping = { - int(e["original_code"]): e["original_name"] for e in self.ec_mapping - } - name_mapping = {int(e["original_code"]): e["translated_name"] for e in self.ec_mapping} - gdf["crop:code_list"] = ec_url("lv_2021.csv") - gdf["crop:name"] = gdf["PRODUCT_CODE"].map(original_name_mapping) - gdf["crop:name_en"] = gdf["PRODUCT_CODE"].map(name_mapping) - return gdf diff --git a/fiboa_cli/datasets/pt.py b/fiboa_cli/datasets/pt.py index fdceebb5..b2d4ff0f 100644 --- a/fiboa_cli/datasets/pt.py +++ b/fiboa_cli/datasets/pt.py @@ -1,13 +1,28 @@ +from vecorel_cli.conversion.admin import AdminConverterMixin + from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin -class PTConverter(FiboaBaseConverter): +class PTConverter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): id = "pt" title = "Field boundaries for Portugal" short_name = "Portugal" description = "Open field boundaries (identificação de parcelas) from Portugal" - sources = "https://www.ifap.pt/isip/ows/resources/2023/Continente.gpkg" + # see https://www.ifap.pt/isip/ows/ + BASE = "https://www.ifap.pt/isip/ows/resources/" + variants = { + "2023": BASE + "2023/Continente.gpkg", + "2022": BASE + "2022/2022.zip", + "2021": BASE + "2021/2021.zip", + "2020": BASE + "2017-2020/2020.zip", + "2019": BASE + "2017-2020/2019.zip", + "2018": BASE + "2017-2020/2018.zip", + "2017": BASE + "2017-2020/2017.zip", + "2016": BASE + "2011_2016/2016.zip", + "2015": BASE + "2011_2016/2015.zip", + # ... + } def layer_filter(self, layer, uri): return layer.startswith("Culturas_") @@ -26,8 +41,8 @@ def layer_filter(self, layer, uri): "Shape_Length": "metrics:perimeter", } extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} + ec_mapping_csv = "pt_2021.csv" column_additions = { - "crop:code_list": ec_url("pt_2021.csv"), "determination:datetime": "2023-01-01T00:00:00Z", } area_is_in_ha = False diff --git a/fiboa_cli/datasets/se.py b/fiboa_cli/datasets/se.py index d8fb462c..6647e5ba 100644 --- a/fiboa_cli/datasets/se.py +++ b/fiboa_cli/datasets/se.py @@ -2,12 +2,17 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url, load_ec_mapping +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = { - "http://epub.sjv.se/inspire/inspire/wfs?SERVICE=WFS%20&REQUEST=GetFeature%20&VERSION=1.0.0%20&TYPENAMES=inspire:arslager_skifte%20&outputFormat=shape-zip%20&CQL_FILTER=arslager=%272023%27%20%20and%20geom%20is%20not%20null%20&format_options=CHARSET:UTF-8": "se2023.zip" +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + variants = { + "2024": { + "http://epub.sjv.se/inspire/inspire/wfs?SERVICE=WFS%20&REQUEST=GetFeature%20&VERSION=1.0.0%20&TYPENAMES=inspire:arslager_skifte%20&outputFormat=shape-zip%20&CQL_FILTER=arslager=%272024%27%20%20and%20geom%20is%20not%20null%20&format_options=CHARSET:UTF-8": "se2024.zip" + }, + "2023": { + "http://epub.sjv.se/inspire/inspire/wfs?SERVICE=WFS%20&REQUEST=GetFeature%20&VERSION=1.0.0%20&TYPENAMES=inspire:arslager_skifte%20&outputFormat=shape-zip%20&CQL_FILTER=arslager=%272023%27%20%20and%20geom%20is%20not%20null%20&format_options=CHARSET:UTF-8": "se2023.zip" + }, } id = "se" short_name = "Sweden" @@ -26,23 +31,15 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): "id": "id", "faststalld": "metrics:area", "grdkod_mar": "crop:code", - "crop:name": "crop:name", "arslager": "determination:datetime", } extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("se_2021.csv")} + ec_mapping_csv = "se_2021.csv" column_migrations = { # Make year (1st January) from column "arslager" "arslager": lambda col: pd.to_datetime(col, format="%Y") } def migrate(self, gdf): - """ - Perform migration of the GeoDataFrame (migrate step). - """ - ec_mapping = load_ec_mapping("se_2021.csv") - original_name_mapping = {int(e["original_code"]): e["original_name"] for e in ec_mapping} - gdf["id"] = gdf["blockid"] + "_" + gdf["skiftesbet"] - gdf["crop:name"] = gdf["grdkod_mar"].map(original_name_mapping) - return gdf + return super().migrate(gdf) diff --git a/fiboa_cli/datasets/si.py b/fiboa_cli/datasets/si.py index 7bdff1cf..9a93800c 100644 --- a/fiboa_cli/datasets/si.py +++ b/fiboa_cli/datasets/si.py @@ -1,10 +1,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = {"https://rkg.gov.si/razno/portal_analysis/KMRS_2023.rar": ["KMRS_2023.shp"]} id = "si" short_name = "Slovenia" @@ -27,8 +27,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): "RASTLINA": "crop:name", "CROP_LAT_E": "crop:name_en", } - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("si_2021.csv")} + ec_mapping_csv = "si_2021.csv" column_migrations = {"geometry": lambda col: col.make_valid()} area_is_in_ha = False missing_schemas = { diff --git a/fiboa_cli/datasets/sk.py b/fiboa_cli/datasets/sk.py index 2126f81c..138b64a7 100644 --- a/fiboa_cli/datasets/sk.py +++ b/fiboa_cli/datasets/sk.py @@ -1,9 +1,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.hcat import AddHCATMixin, load_ec_mapping -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = { "https://data.slovensko.sk/download?id=e39ad227-1899-4cff-b7c8-734f90aa0b59&blocksize=0": [ "HU2024_20240917shp/HU2024_20240917.shp" @@ -24,19 +25,25 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): """ provider = "Pôdohospodárska platobná agentúra " license = "CC0-1.0" # "Open Data" - # TODO look for a way to find codes for crop_name and implement crop-extension + ec_mapping_csv = "sk_2021.csv" columns = { "geometry": "geometry", "KODKD": "id", - "PLODINA": "crop_name", + "PLODINA": "crop:name", "KULTURA_NA": "crop_group", "LOKALITA_N": "municipality", "VYMERA": "metrics:area", } missing_schemas = { "properties": { - "crop_name": {"type": "string"}, "crop_group": {"type": "string"}, "municipality": {"type": "string"}, } } + + def migrate(self, gdf): + if self.ec_mapping is None: + self.ec_mapping = load_ec_mapping(self.ec_mapping_csv, url=self.mapping_file) + mapping = {row["original_name"]: index + 1 for index, row in enumerate(self.ec_mapping)} + gdf["crop:code"] = gdf["PLODINA"].map(mapping) + return super().migrate(gdf) From 0236b5a782673814d41de97f4b01913da20bf61d Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 10:51:12 +0200 Subject: [PATCH 04/19] Split Germany BB and NDS in block dataset and crop fields --- fiboa_cli/datasets/de_bb.py | 34 +++++-------- fiboa_cli/datasets/de_bb_block.py | 42 ++++++++++++++++ fiboa_cli/datasets/de_nds.py | 57 ++++++++++++++++------ fiboa_cli/datasets/de_nds_block.py | 33 +++++++++++++ tests/data-files/convert/de_bb/antrag.zip | Bin 0 -> 25674 bytes 5 files changed, 129 insertions(+), 37 deletions(-) create mode 100644 fiboa_cli/datasets/de_bb_block.py create mode 100644 fiboa_cli/datasets/de_nds_block.py create mode 100644 tests/data-files/convert/de_bb/antrag.zip diff --git a/fiboa_cli/datasets/de_bb.py b/fiboa_cli/datasets/de_bb.py index 0ae8cc37..8b2eff82 100644 --- a/fiboa_cli/datasets/de_bb.py +++ b/fiboa_cli/datasets/de_bb.py @@ -1,42 +1,30 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = {"https://data.geobasis-bb.de/geofachdaten/Landwirtschaft/dfbk.zip": ["DFBK_FB.shp"]} +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + sources = "https://data.geobasis-bb.de/geofachdaten/Landwirtschaft/antrag.zip" id = "de_bb" admin_subdivision_code = "BB" # TODO Berlin is also in here, check each row short_name = "Germany, Berlin/Brandenburg" title = "Field boundaries for Berlin / Brandenburg, Germany" - description = """A field block (German: "Feldblock") is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated by one or more farmers with one or more crops, is fully or partially set aside or is fully or partially taken out of production.""" + description = """A Crop Field (German: "Schlaege") is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated with a single crop.""" license = "DL-DE-BY-2.0" provider = "Land Brandenburg " - extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} + ec_mapping_csv = "de.csv" columns = { "geometry": "geometry", - "FB_ID": ["flik", "id"], - "FGUE_JAHR": "fgue_jahr", - "FL_BRUTTO_": "metrics:area", - "FL_NETTO_H": "net_area", - "GUELTVON_F": "determination:datetime", - "GUELTBIS_F": "expiry_datetime", - "KREIS_NR": "kreis_nr", - "TK10_BLATT": "tk10", - "HBN_KAT": "hbn", - "SHAPE_LEN": "metrics:perimeter", + "ref_ident": "farmer_id", + "groesse": "metrics:area", + "guelt_von": "determination:datetime", + "code_bez": "crop:name", + "code": "crop:code", } missing_schemas = { "properties": { - "hbn": {"type": "string"}, - "fgue_jahr": {"type": "string"}, - "net_area": {"type": "float", "exclusiveMinimum": 0}, - "expiry_datetime": {"type": "date-time"}, - "kreis_nr": {"type": "uint16"}, - "tk10": {"type": "string"}, + "farmer_id": {"type": "string"}, } } - - def layer_filter(self, layer: str, uri: str) -> bool: - return layer == "DFBK_FB" diff --git a/fiboa_cli/datasets/de_bb_block.py b/fiboa_cli/datasets/de_bb_block.py new file mode 100644 index 00000000..6000dbba --- /dev/null +++ b/fiboa_cli/datasets/de_bb_block.py @@ -0,0 +1,42 @@ +from vecorel_cli.conversion.admin import AdminConverterMixin + +from ..conversion.fiboa_converter import FiboaBaseConverter + + +class Converter(AdminConverterMixin, FiboaBaseConverter): + sources = {"https://data.geobasis-bb.de/geofachdaten/Landwirtschaft/dfbk.zip": ["DFBK_FB.shp"]} + id = "de_bb_block" + admin_subdivision_code = "BB" + short_name = "Germany, Berlin/Brandenburg" + title = "Field boundaries for Berlin / Brandenburg, Germany" + description = """A field block (German: "Feldblock") is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated by one or more farmers with one or more crops, is fully or partially set aside or is fully or partially taken out of production.""" + license = "DL-DE-BY-2.0" + provider = "Land Brandenburg " + extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} + + columns = { + "geometry": "geometry", + "FB_ID": ("flik", "id"), + "FGUE_JAHR": "fgue_jahr", + "FL_BRUTTO": "metrics:area", + "FL_NETTO": "net_area", + "GUELTVON_F": "determination:datetime", + "GUELTBIS_F": "expiry_datetime", + "KREIS_NR": "kreis_nr", + "TK10_BLATT": "tk10", + "HBN_KAT": "hbn", + "SHAPE_LEN": "metrics:perimeter", + } + missing_schemas = { + "properties": { + "hbn": {"type": "string"}, + "fgue_jahr": {"type": "string"}, + "net_area": {"type": "float", "exclusiveMinimum": 0}, + "expiry_datetime": {"type": "date-time"}, + "kreis_nr": {"type": "uint16"}, + "tk10": {"type": "string"}, + } + } + + def layer_filter(self, layer: str, uri: str) -> bool: + return layer == "DFBK_FB" diff --git a/fiboa_cli/datasets/de_nds.py b/fiboa_cli/datasets/de_nds.py index 23b3eedd..732a6d60 100644 --- a/fiboa_cli/datasets/de_nds.py +++ b/fiboa_cli/datasets/de_nds.py @@ -1,33 +1,62 @@ +import pandas as pd from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = "https://sla.niedersachsen.de/mapbender_sla/download/FB_NDS.zip" +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + """ + https://sla.niedersachsen.de/agrarfoerderung/schlaginfo/ (see download) + The zip contains: + - Schlaege = UD_25_S.shp + - TeilLandschaftElemente = UD_25_TLE.shp + - TeilSchlaege = UD_25_TS.shp + """ + + variants = { + f"{year}": { + f"https://sla.niedersachsen.de/mapbender_sla/download/schlaege_aktuell_{year}.zip": [ + f"UD_{year % 100}_S.shp" + ] + } + for year in range(2025, 2020, -1) + } id = "de_nds" admin_subdivision_code = "NI" short_name = "Germany, Lower Saxony/Bremen/Hamburg" - title = "Field boundaries for Lower Saxony / Bremen / Hamburg, Germany" - description = """A field block (German: "Feldblock") is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated by one or more farmers with one or more crops, is fully or partially set aside or is fully or partially taken out of production.""" + title = "Crop Fields for Lower Saxony / Bremen / Hamburg, Germany" + description = """A Crop Field (German: "Schlaege") is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated with a single crop.""" provider = "ML/SLA Niedersachsen " attribution = "© ML/SLA Niedersachsen (2024), DL-DE-BY-2.0 (www.govdata.de/DL-DE-BY-2.0), Daten bearbeitet" license = "DL-DE-BY-2.0" extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} + + # https://www.sla.niedersachsen.de/download/141235/Verzeichnis_Nutzungscodes.xlsx + ec_mapping_csv = "de.csv" columns = { "geometry": "geometry", - "FLIK": ["id", "flik"], - "STAND": "determination:datetime", - "ANT_JAHR": "ant_jahr", - "BNK": "bnk", - "BNK_TXT": "bnk_txt", - "FLAECHE": "metrics:area", - "SHAPE_Leng": "metrics:perimeter", + "FLIK": "flik", + "SCHLAGNR": "subfield_id", + "NC_FESTG": "crop:code", + "ANTRAGSJAH": "determination:datetime", + "AKTUELLEFL": "metrics:area", } missing_schemas = { "properties": { - "ant_jahr": {"type": "int16"}, - "bnk": {"type": "string"}, - "bnk_txt": {"type": "string"}, + "subfield_id": {"type": "int64"}, } } + column_migrations = {"ANTRAGSJAH": lambda col: pd.to_datetime(col, format="%Y")} + + def migrate(self, gdf): + if "NC_FESTG" not in gdf.columns: + code = {"KULTURARTF", "KULTURCODE", "KC_FESTG"} & set(gdf.columns) + del self.columns["NC_FESTG"] + self.columns[code.pop()] = "crop:code" + + if "AKTUELLEFL" not in gdf.columns: + del self.columns["AKTUELLEFL"] + self.columns["AKT_FL"] = "metrics:area" + + return super().migrate(gdf) diff --git a/fiboa_cli/datasets/de_nds_block.py b/fiboa_cli/datasets/de_nds_block.py new file mode 100644 index 00000000..7621434a --- /dev/null +++ b/fiboa_cli/datasets/de_nds_block.py @@ -0,0 +1,33 @@ +from vecorel_cli.conversion.admin import AdminConverterMixin + +from ..conversion.fiboa_converter import FiboaBaseConverter + + +class Converter(AdminConverterMixin, FiboaBaseConverter): + sources = "https://sla.niedersachsen.de/mapbender_sla/download/FB_NDS.zip" + id = "de_nds_block" + admin_subdivision_code = "NI" + short_name = "Germany, Lower Saxony/Bremen/Hamburg" + title = "Field boundaries for Lower Saxony / Bremen / Hamburg, Germany" + description = """A field block (German: "Feldblock") is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated by one or more farmers with one or more crops, is fully or partially set aside or is fully or partially taken out of production.""" + provider = "ML/SLA Niedersachsen " + attribution = "© ML/SLA Niedersachsen (2024), DL-DE-BY-2.0 (www.govdata.de/DL-DE-BY-2.0), Daten bearbeitet" + license = "DL-DE-BY-2.0" + extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} + columns = { + "geometry": "geometry", + "FLIK": ("id", "flik"), + "STAND": "determination:datetime", + "ANT_JAHR": "ant_jahr", + "BNK": "bnk", + "BNK_TXT": "bnk_txt", + "FLAECHE": "metrics:area", + "SHAPE_Leng": "metrics:perimeter", + } + missing_schemas = { + "properties": { + "ant_jahr": {"type": "int16"}, + "bnk": {"type": "string"}, + "bnk_txt": {"type": "string"}, + } + } diff --git a/tests/data-files/convert/de_bb/antrag.zip b/tests/data-files/convert/de_bb/antrag.zip new file mode 100644 index 0000000000000000000000000000000000000000..0ddd1f975437425e93666d66770e0d31fb4f91d1 GIT binary patch literal 25674 zcma&NXH*l+);3HLkd6X^AOu8Iq=ce^Q~?obf*?&gh)9#(2>}sN>0JaumtF&e-kY=_ zy$1-rgG*V+b3jEEMbG!@!S8$1Of*^IlLOJB$UtHJ`D5^sBAS_5|nDo}P|g zTA7zqzG!P>89!UP^KKSMj#REO!z{o1VV2+|=SN5`-+p1qB2Efm@POd%Gt?ULgV&)q4oL2U zns>M!A!p_UZ-7NPqF(kO(3YZu80ap6vW76qf-p`v+NRfQB+R?dr9E^y!yWkh4jz@& zz<-KkF61a?mGSRhpEmrMN z3XXSI{Q(?$`Emgp(m&?X6)`^k{KKc%k8a!v-X5p=r|3p8j0z+^7<<&uZbsAK6O}+_ zBV$$$T^`cJSkD_G*0X1g(xFY(qSwOr_13Oj);y`Dy|MVNg?dRhIl?nBHckU6aE`d=+9hS%-jh!+l3newoKZJ759c zB9L1x(g(QZo<;$9m}4FX@1C*5NS}08uqY9cywSaoLx1!ghzQ@*YEE>$hYVR8nJ-np z^S9zm8ltBRA&~ZaydhCCWC>GaKR5WU@RSVjNZuzUVtAIB7wzbu_VLjMpFjs+<>x=P zn0%?ydSqj6Cya(M$s~kdJ-CItHJ0-qKnV5q-RR%p@zwCw;y{DsG&W z#}Hm68nuz}$7>Kop-_B}?`kNdT{QK!{a^kv^7d_2mX>f#IgkHox@uj9EL&`8PmVV^ zVftyG1Ae5cBF~&LcVuVqc!;G=&azAyVSIsow}I=|w^q+@max1xe~@Ez{29v95&Dz4Z)?M6(kk+Xxu1TN$>xtaca2N)y`T10 z%C7o4Bx+>#dkR>Obj&*etMr!_T>tl?87M!SM;g7sr60z6b*lDn>JNEC#BIX9-kG~P zdeC8tFaxtL_;?yLhjZuy(pRvj7?z!5_u0Dcy*v%(e@E#)-+q-k)!YmI$vb2*)-R}* zUhp4%q3gS(gjcFmKUJxuJ*Mk(%ySgAuRed1tnB{h3}3Xh4UU

vOnhVio=ajQH60 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 literal 0 HcmV?d00001 From 34b21761fc37143bd1bd625756dea7c1d7b11b57 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 10:51:32 +0200 Subject: [PATCH 05/19] Make tests work --- fiboa_cli/datasets/data-files/ie_2023.csv | 178 +++++++++++++++++++ fiboa_cli/datasets/data-files/jecam_crop.csv | 106 +++++++++++ fiboa_cli/datasets/de_sax.py | 2 +- fiboa_cli/datasets/de_sh.py | 2 +- tests/test_convert.py | 3 +- 5 files changed, 288 insertions(+), 3 deletions(-) create mode 100644 fiboa_cli/datasets/data-files/ie_2023.csv create mode 100644 fiboa_cli/datasets/data-files/jecam_crop.csv diff --git a/fiboa_cli/datasets/data-files/ie_2023.csv b/fiboa_cli/datasets/data-files/ie_2023.csv new file mode 100644 index 00000000..ebffeffe --- /dev/null +++ b/fiboa_cli/datasets/data-files/ie_2023.csv @@ -0,0 +1,178 @@ +original_name,HCAT3_name,HCAT3_code +Access Road / Roadways,not_known_and_other,3399000000 +Agroforestry (<400 trees per hectare),tree_wood_forest,3306000000 +Alfalfa,alfalfa_lucerne,3301090301 +Apples,apples,3303010200 +Arable Habitat,arable_crops,3301000000 +Arable Silage (Grass),pasture_meadow_grassland_grass,3302000000 +Arable Silage (No Grass),other_arable_land_crops,3301990000 +Artichoke,artichoke,3301270000 +Asparagus,asparagus,3301200000 +Baby Leaf Spinach,spinach,3301310800 +Barley - Spring,spring_barley,3301010402 +Barley - Winter,winter_barley,3301010401 +Basil,basil,3301061207 +Beans - Spring,beans,3301020100 +Beans - Winter,beans,3301020100 +Beetroot,beetroot_beets,3301290200 +Blackberries,blackberry,3303020200 +Blackcurrants,blackcurrant_cassis,3303020300 +Blueberries,blueberry,3303020400 +Bog,not_known_and_other,3399000000 +Borage,borage,3301061209 +Broccoli - Spring,broccoli,3301210202 +Broccoli - Winter,broccoli,3301210202 +Brussel sprouts,brussels_sprouts,3301210203 +Building,not_known_and_other,3399000000 +Cabbage - Spring,brassica_oleracea_cabbage,3301210200 +Cabbage - Winter,brassica_oleracea_cabbage,3301210200 +Calabrese,broccoli,3301210202 +Camelina,camelina,3301061500 +Carrots,carrots_daucus,3301290300 +Cauliflowers - Spring,cauliflower,3301210204 +Cauliflowers - Winter,cauliflower,3301210204 +Celeriac,celeriac,3301250100 +Celery - Spring,celery,3301250000 +Celery - Winter,celery,3301250000 +Cherries,cherry_cherries,3303010400 +Christmas Trees,other_tree_wood_forest,3306990000 +Clover,clover,3301090303 +Copse,tree_wood_forest,3306000000 +Coriander,coriander,3301061215 +Courgettes,zucchini_courgette,3301140600 +Cucumbers,cucumber_pickle,3301140100 +Daffodils,narcissus_daffodil,3301083300 +Designated Habitat,not_known_and_other,3399000000 +Environmental Management Of Arable Fallow,fallow_land_not_crop,3301110000 +Extensively Grazed Pasture,pasture_meadow_grassland_grass,3302000000 +Fallow,fallow_land_not_crop,3301110000 +Farm Road,not_known_and_other,3399000000 +Farmyard,not_known_and_other,3399000000 +Fennel,fennel,3301170000 +Flax,flax_linseed,3301060700 +Fodder Beet,mangelwurzel_fodder_beet,3301290400 +Foliage,tree_wood_forest,3306000000 +Forage Rape,rapeseed_rape,3301060400 +Forestry,tree_wood_forest,3306000000 +Forestry 2022,tree_wood_forest,3306000000 +Forestry 2023,tree_wood_forest,3306000000 +Forestry Eligible,tree_wood_forest,3306000000 +Forestry ESB Corridor,tree_wood_forest,3306000000 +Forestry ESB Corridor Eligible,tree_wood_forest,3306000000 +Forestry ESB Corridor Ineligible,tree_wood_forest,3306000000 +Forestry Ineligible,tree_wood_forest,3306000000 +Forestry Pre-2009,tree_wood_forest,3306000000 +Forestry Setaside,tree_wood_forest,3306000000 +Gardens,kitchen_gardens,3301120000 +Garlic,garlic,3301220200 +Glasshouse,greenhouse_foil_film,3305000000 +Gooseberries,gooseberry_gooseberries_cranberries,3303020700 +Grapes,vineyards_wine_vine_rebland_grapes,3303060000 +Grass Seed,temporary_grass,3301090100 +Grass Year 1,temporary_grass,3301090100 +Grass Year 1 (MSS Eco-Scheme),temporary_grass,3301090100 +Grass Year 1 (MSS Measure),temporary_grass,3301090100 +Grass Year 1 (MSS),temporary_grass,3301090100 +Grass Year 2,temporary_grass,3301090100 +Grass Year 2 (MSS),temporary_grass,3301090100 +Grass Year 3,temporary_grass,3301090100 +Grass Year 3 (MSS),temporary_grass,3301090100 +Grass Year 4,temporary_grass,3301090100 +Grass Year 4 (MSS),temporary_grass,3301090100 +Grass Year 5,temporary_grass,3301090100 +Grass Year 5 (MSS),temporary_grass,3301090100 +Grassmeal,temporary_grass,3301090100 +Habitat,not_known_and_other,3399000000 +Hemp for Food Use,hemp_cannabis,3301061000 +Hemp for Industrial Use,hemp_cannabis,3301061000 +Inactive,not_known_and_other,3399000000 +Invalid Crop,not_known_and_other,3399000000 +Kale,kale,3301210208 +Lake / Waterway / Pond,not_known_and_other,3399000000 +Leeks - Spring,leek,3301220300 +Leeks - Winter,leek,3301220300 +Lettuce,salads_lettuce_leaf_vegetables,3301310000 +Linnet Habitat,not_known_and_other,3399000000 +Linseed,flax_linseed,3301060700 +Loganberries,berries_berry_species,3303020000 +Low Input Grassland,pasture_meadow_grassland_grass,3302000000 +Low Input Peat Grassland,pasture_meadow_grassland_grass,3302000000 +Low Input Permanent Pasture,pasture_meadow_grassland_grass,3302000000 +Lucerne,alfalfa_lucerne,3301090301 +Lupins,sweet_lupins,3301020700 +Maize,grain_maize_corn_popcorn,3301010600 +Management of Environmental Fallow (horticulture),fallow_land_not_crop,3301110000 +Management of intensive grassland next to a watercourse,pasture_meadow_grassland_grass,3302000000 +Millet,millet_sorghum,3301010900 +Mint,mints_peppermint,3301061222 +Miscanthus Sinensis,miscanthus_silvergrass,3301083000 +Mixed Cropping,arable_crops,3301000000 +Mustard,mustard,3301210100 +Nursery,nurseries_nursery,3303070000 +Oats - Spring,spring_oats,3301010502 +Oats - Winter,winter_oats,3301010501 +Oilseed Rape - Spring,spring_rapeseed_rape,3301060402 +Oilseed Rape - Winter,winter_rapeseed_rape,3301060401 +Onions,onions,3301220400 +Orchard,orchards_fruits,3303010000 +Other cut flower / bulb crops,unspecified_flowers_ornamental_plants,3301089800 +Pak Choi,bok_choy_pak_choi,3301210201 +Parsley,parsly,3301061227 +Parsnips,parsnips,3301290500 +Pears,pears,3303011200 +Peas,peas,3301020600 +Peppers,capsicum,3301300000 +Permanent Pasture,pasture_meadow_grassland_grass,3302000000 +Permanent Pasture (MSS Eco-Scheme 2023),pasture_meadow_grassland_grass,3302000000 +Permanent Pasture (MSS Measure),pasture_meadow_grassland_grass,3302000000 +Permanent Pasture (MSS),pasture_meadow_grassland_grass,3302000000 +Perpetual Spinach,spinach,3301310800 +Planted Buffer Zone,not_known_and_other,3399000000 +Plums,plums,3303011300 +Potatoes - Early,potatoes,3301030000 +Potatoes - Maincrop,potatoes,3301030000 +Potatoes - Seed,potatoes,3301030000 +Protein/Cereal Mix 50/50,legumes_dried_pulses_protein_crops,3301020000 +Pumpkins,pumpkin_squash_gourd,3301140400 +Quarry,not_known_and_other,3399000000 +Quinoa,quinoa,3301150300 +Raspberries,raspberry_raspberries,3303021000 +Recreational Area,not_known_and_other,3399000000 +Red Clover,clover,3301090303 +Redcurrants,redcurrant,3303021100 +Reed Canary Grass,poaceae_grasses,3301090200 +Rhubarb,rhubarb,3301230000 +Riparian Buffer Zone - Arable,not_known_and_other,3399000000 +Riparian Buffer Zone - Grassland,pasture_meadow_grassland_grass,3302000000 +Riparian Zone,not_known_and_other,3399000000 +Rocket,rocket_arugula,3301310600 +Rocky Outcrop,not_known_and_other,3399000000 +Rosemary,rosemary,3301061230 +Rye,rye,3301010300 +Scallions,scallion,3301220500 +Scrub,shrubberries_shrubs,3303080000 +Shallot,shallot,3301220600 +Short Rotation Coppice,tree_wood_forest,3306000000 +Soya Bean,soy_soybeans,3301160000 +Squash,pumpkin_squash_gourd,3301140400 +Strawberries,strawberries,3301130000 +Sugar Beet,sugar_beet,3301290700 +Sunflower,sunflower,3301060500 +Swede,swede_rutabaga,3301210500 +Sweetcorn,grain_maize_corn_popcorn,3301010600 +Thyme,thyme,3301061237 +Tomatoes,tomato,3301280000 +Traditional Hay Meadow,pasture_meadow_grassland_grass,3302000000 +Tree belts for ammonia capture from farmyards,tree_wood_forest,3306000000 +Triticale - Spring,spring_triticale,3301010802 +Triticale - Winter,winter_triticale,3301010801 +Tulips,tulips,3301084900 +Turnips,turnips,3301290800 +Unknown,not_known_and_other,3399000000 +Vetch,vetches,3301090305 +Wheat - Spring,spring_common_soft_wheat,3301010102 +Wheat - Winter,winter_common_soft_wheat,3301010101 +Wild Bird Cover,not_known_and_other,3399000000 +Willow,willows_osiers,3306080000 +Winter Bird Food Plot,not_known_and_other,3399000000 +Woodland,tree_wood_forest,3306000000 diff --git a/fiboa_cli/datasets/data-files/jecam_crop.csv b/fiboa_cli/datasets/data-files/jecam_crop.csv new file mode 100644 index 00000000..f2080a2a --- /dev/null +++ b/fiboa_cli/datasets/data-files/jecam_crop.csv @@ -0,0 +1,106 @@ +crop_name +Agricultural bare soil +Albizia gummifera +Annual crop +Apple tree +Asparagus +Avocado tree +Banana +Barley +Bean +Beet +Bissap +Brede +Cabbage +Cape mahogany +Carrot +Cash woody crop +Cashew tree +Cashew +Cassava +Casava +Cauliflower and brocoli +Cereals +Citrus tree +Citrus +Coffee +Cordia Africana +Cotton +Coton +Cowpea +Croton +Cucumber +Cucurbit +Cyprus +Eggplant +Eucalyptus +Fallow +Fibre crop +Ficus lutea +Fodder +Forest plantation +Fruit crop +Fruit-bearing vegetable +Gabon tulip tree +Goat tree +Gombo +Goyava +Grasses and other fodder crop +Grevillea +Groundnut +Hibiscus +Jatropha +Leafy or stem vegetable +Macadamia tree +Maize +Mango tree +Mango +Market gardening +Mid fallow +Millet +Mixed annual crops +Mixed Cereals +Napier grass +NULL +Oat +Oilseed crop +Old fallow +Onion +Orange tree +Other crop +Papaya tree +Palm +Pea +Peach tree +Pear tree +Pine +Pineapple +Potato +Ravintsara +Rice +Root +Root, bulb or tuberous vegetable +Root/tuber crop with high starch or inulin content +Rubber +Sanio +Sapodilla tree +Sesame +Sorghum +Soybean +Sugarcane +Sunflower +Sweet potato +Taro +Tea +Tomato +Vegetable and root +Vegetables +Vineyard +Watermelon +Wattle tree +Weakly vegetated agricultural +Wheat +Wild radish +Woodlot +Young fallow +Zucchini diff --git a/fiboa_cli/datasets/de_sax.py b/fiboa_cli/datasets/de_sax.py index 055f47a9..5412f708 100644 --- a/fiboa_cli/datasets/de_sax.py +++ b/fiboa_cli/datasets/de_sax.py @@ -21,7 +21,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} columns = { "geometry": "geometry", - "FB_FLIK": ["id", "flik"], + "FB_FLIK": ("id", "flik"), "JAHR": "determination:datetime", "FB_A_FLAE": "metrics:area", "FB_BN_KAT": "FB_BN_KAT", diff --git a/fiboa_cli/datasets/de_sh.py b/fiboa_cli/datasets/de_sh.py index a3fc84b8..dcc2818c 100644 --- a/fiboa_cli/datasets/de_sh.py +++ b/fiboa_cli/datasets/de_sh.py @@ -16,7 +16,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): columns = { "geometry": "geometry", "fachguelti": "determination:datetime", - "FLIK": ["flik", "id"], + "FLIK": ("flik", "id"), "Flaeche": "metrics:area", "HBN": "hbn", } diff --git a/tests/test_convert.py b/tests/test_convert.py index b88898f0..c634e849 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -20,6 +20,7 @@ "be_vlg", "br_ba_lem", "de_sh", + "de_bb", "ec_lv", "ec_si", "fi", @@ -94,6 +95,6 @@ def load_ec(csv_file=None, url=None): ValidateData().validate(tmp_parquet_file) df = pq.read_table(tmp_parquet_file).to_pandas() - if "metrics:area" in df.columns: + if "metrics:area" in df.columns and converter not in ("de_bb",): # Check for accidental hectare conversion; fields should be more than 10 square meters assert (df["metrics:area"] > 10).all() From ad45f2d56f1d3a147538343b572ca30fa94048f7 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 10:52:30 +0200 Subject: [PATCH 06/19] Support HCAT mapping CSV files without crop_code --- fiboa_cli/datasets/commons/hcat.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/fiboa_cli/datasets/commons/hcat.py b/fiboa_cli/datasets/commons/hcat.py index 0df5e929..a04728ed 100644 --- a/fiboa_cli/datasets/commons/hcat.py +++ b/fiboa_cli/datasets/commons/hcat.py @@ -17,7 +17,7 @@ class AddHCATMixin: ec_mapping_csv: Optional[str] = None # TODO rename to hcat_mapping_csv mapping_file = None - ec_mapping: Optional[dict] = None # TODO rename to hcat_mapping + ec_mapping: Optional[list[dict]] = None # TODO rename to hcat_mapping hcat_columns = { "hcat:name_en": "hcat:name_en", @@ -38,11 +38,11 @@ def convert(self, *args, **kwargs): ) return super().convert(*args, **kwargs) - def get_code_column(self, gdf): + def get_code_column(self, gdf, code="crop:code"): try: - attribute = next(k for k, v in self.columns.items() if v == "crop:code") + attribute = next(k for k, v in self.columns.items() if v == code) except StopIteration: - raise Exception(f"Misssing crop:code column in converter {self.__class__.__name__}") + raise Exception(f"Misssing {code} column in converter {self.__class__.__name__}") col = gdf[attribute] # Should be corrected in original parser return col if col.dtype == "object" else col.astype(str) @@ -56,15 +56,23 @@ def add_hcat(self, gdf): if self.ec_mapping is None: self.ec_mapping = load_ec_mapping(self.ec_mapping_csv, url=self.mapping_file) - crop_code_col = self.get_code_column(gdf) + + from_code = "orginal_code" + if from_code not in self.ec_mapping[0]: + # Some code lists have no code, only a crop_name + from_code = "original_name" + crop_code_col = self.get_code_column(gdf, "crop:name") + else: + crop_code_col = self.get_code_column(gdf) def map_to(attribute): - return {e["original_code"]: e[attribute] for e in self.ec_mapping} + return {e[from_code]: e[attribute] for e in self.ec_mapping} for k, v in zip( self.hcat_columns.keys(), ("translated_name", "HCAT3_name", "HCAT3_code") ): - gdf[k] = crop_code_col.map(map_to(v)) + if v in self.ec_mapping[0]: + gdf[k] = crop_code_col.map(map_to(v)) if "crop:code_list" not in gdf.columns: gdf["crop:code_list"] = ( From b8befd711664396c61abafeecaf275490580b59e Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 10:57:38 +0200 Subject: [PATCH 07/19] Update Changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06504361..71f489cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +- Support HCAT mapping CSV files without crop_code +- Split Germany BB and NDS in block dataset and crop fields +- Add HCAT to datasets where possible +- Updated years & variants for at_crop, be_vlg, es_an, es_cl, es_pv, ie, pt, se - Fix to vecorel: converter.license and provider should be string - Added a Dockerfile to simplify working with fiboa - Command `fiboa publish` to automate source coop publication process From f99b41bc1c13c04f1329f1c824734a85e0ed2585 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 13:13:45 +0200 Subject: [PATCH 08/19] Rename at_crop and nl_crop to default at/nl, and blocks to at_block/nl_block --- fiboa_cli/datasets/at.py | 55 ++++++------- fiboa_cli/datasets/at_block.py | 44 +++++++++++ fiboa_cli/datasets/at_crop.py | 47 ----------- fiboa_cli/datasets/nl.py | 73 ++++++++++++------ fiboa_cli/datasets/nl_block.py | 46 +++++++++++ fiboa_cli/datasets/nl_crop.py | 69 ----------------- .../convert/{at_crop => at}/at_2021.csv | 0 .../inspire_schlaege_2025-1_polygon.gpkg.zip | Bin .../inspire_referenzen_2021_polygon.gpkg.zip | Bin .../brpgewaspercelen_definitief_2023.gpkg | Bin .../{nl => nl_block}/referentiepercelen.gpkg | Bin tests/test_convert.py | 7 +- 12 files changed, 171 insertions(+), 170 deletions(-) create mode 100644 fiboa_cli/datasets/at_block.py delete mode 100644 fiboa_cli/datasets/at_crop.py create mode 100644 fiboa_cli/datasets/nl_block.py delete mode 100644 fiboa_cli/datasets/nl_crop.py rename tests/data-files/convert/{at_crop => at}/at_2021.csv (100%) rename tests/data-files/convert/{at_crop => at}/inspire_schlaege_2025-1_polygon.gpkg.zip (100%) rename tests/data-files/convert/{at => at_block}/inspire_referenzen_2021_polygon.gpkg.zip (100%) rename tests/data-files/convert/{nl_crop => nl}/brpgewaspercelen_definitief_2023.gpkg (100%) rename tests/data-files/convert/{nl => nl_block}/referentiepercelen.gpkg (100%) diff --git a/fiboa_cli/datasets/at.py b/fiboa_cli/datasets/at.py index ec2baee1..777f1d76 100644 --- a/fiboa_cli/datasets/at.py +++ b/fiboa_cli/datasets/at.py @@ -1,44 +1,47 @@ from vecorel_cli.conversion.admin import AdminConverterMixin -from fiboa_cli.conversion.fiboa_converter import FiboaBaseConverter +from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.ec import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = { - "https://inspire.lfrz.gv.at/009501/ds/inspire_referenzen_2021_polygon.gpkg.zip": [ - "INSPIRE_REFERENZEN_2021_POLYGON.gpkg" - ] +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + variants = { + "2025": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2025-1_polygon.gpkg.zip", + "2024": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2024-2_polygon.gpkg.zip", + "2023": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2023-2_polygon.gpkg.zip", + "2022": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2022_polygon.gpkg.zip", + "2021": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2021_polygon.gpkg.zip", + "2020": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2020_polygon.gpkg.zip", + "2019": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2019_polygon.gpkg.zip", + "2018": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2018_polygon.gpkg.zip", } + id = "at" country = "AT" short_name = "Austria" title = "Field boundaries for Austria" description = """ - **Field boundaries for Austria - INVEKOS Referenzen Österreich 2021.** - - The layer includes all reference parcels ("Referenzparzellen") defined by the paying agency Agrarmarkt Austria and recorded landscape elements (landscape element layers) within the meaning of Art. 5 of Regulation (EU) No. 640/2014 and Regulation of the competent federal ministry with horizontal rules for the area of the Common Agricultural Policy (Horizontal CAP Regulation) StF: Federal Law Gazette II No. 100/2015. + **Crop Field boundaries for Austria - INVEKOS Schläge Österreich 2025.** - Reference parcel: is the physical block that can be clearly delimited from the outside (e.g. forest, roads, water bodies) and is formed by contiguous agricultural areas that are recognizable in nature. + This layer includes all field uses recorded by the applicants, which serve as the basis for the funding process. A field + is a contiguous area of a piece of land that is cultivated for a growing season with only one crop (field use type) and + uniform management requirements or as a landscape element type in accordance with Annex 1 of the regulation of the responsible + Federal Ministry with horizontal rules for the area of the Common Agricultural Policy (Horizontal CAP Regulation) + StF: BGBl. II No. 100/2015 or is simply maintained in good agricultural and ecological condition in accordance with + Art. 94 of Regulation (EU) No. 1306/2013 and is digitized in the GIS as a polygon or as a point. """ provider = "Agrarmarkt Austria " license = "CC-BY-4.0" columns = { - "geometry": "geometry", - "RFL_ID": "id", - "REF_ART": "ref_art", - "BRUTTOFLAECHE_HA": "metrics:area", + "GEO_ID": "id", "INSPIRE_ID": "inspire:id", - "REF_ART_BEZEICHNUNG": "ref_art_bezeichnung", - "REFERENZ_KENNUNG": "referenz_kennung", - "FART_ID": "fart_id", - "GEO_DATERF": "determination:datetime", + "geometry": "geometry", + "SNAR_CODE": "crop:code", + "SNAR_BEZEICHNUNG": "crop:name", + "SL_FLAECHE_BRUTTO_HA": "metrics:area", + "GEOM_DATE_CREATED": "determination:datetime", } - extensions = {"https://fiboa.org/inspire-extension/v0.3.0/schema.yaml"} - missing_schemas = { - "properties": { - "ref_art": {"type": "string"}, - "ref_art_bezeichnung": {"type": "string"}, - "referenz_kennung": {"type": "uint64"}, - "fart_id": {"type": "uint32"}, - } + ec_mapping_csv = "at_2021.csv" + extensions = { + "https://fiboa.org/inspire-extension/v0.3.0/schema.yaml", } diff --git a/fiboa_cli/datasets/at_block.py b/fiboa_cli/datasets/at_block.py new file mode 100644 index 00000000..9a89c6dc --- /dev/null +++ b/fiboa_cli/datasets/at_block.py @@ -0,0 +1,44 @@ +from vecorel_cli.conversion.admin import AdminConverterMixin + +from fiboa_cli.conversion.fiboa_converter import FiboaBaseConverter + + +class Converter(AdminConverterMixin, FiboaBaseConverter): + sources = { + "https://inspire.lfrz.gv.at/009501/ds/inspire_referenzen_2021_polygon.gpkg.zip": [ + "INSPIRE_REFERENZEN_2021_POLYGON.gpkg" + ] + } + id = "at_block" + country = "AT" + short_name = "Austria" + title = "Field boundaries for Austria" + description = """ + **Field boundaries for Austria - INVEKOS Referenzen Österreich 2021.** + + The layer includes all reference parcels ("Referenzparzellen") defined by the paying agency Agrarmarkt Austria and recorded landscape elements (landscape element layers) within the meaning of Art. 5 of Regulation (EU) No. 640/2014 and Regulation of the competent federal ministry with horizontal rules for the area of the Common Agricultural Policy (Horizontal CAP Regulation) StF: Federal Law Gazette II No. 100/2015. + + Reference parcel: is the physical block that can be clearly delimited from the outside (e.g. forest, roads, water bodies) and is formed by contiguous agricultural areas that are recognizable in nature. + """ + provider = "Agrarmarkt Austria " + license = "CC-BY-4.0" + columns = { + "geometry": "geometry", + "RFL_ID": "id", + "REF_ART": "ref_art", + "BRUTTOFLAECHE_HA": "metrics:area", + "INSPIRE_ID": "inspire:id", + "REF_ART_BEZEICHNUNG": "ref_art_bezeichnung", + "REFERENZ_KENNUNG": "referenz_kennung", + "FART_ID": "fart_id", + "GEO_DATERF": "determination:datetime", + } + extensions = {"https://fiboa.org/inspire-extension/v0.3.0/schema.yaml"} + missing_schemas = { + "properties": { + "ref_art": {"type": "string"}, + "ref_art_bezeichnung": {"type": "string"}, + "referenz_kennung": {"type": "uint64"}, + "fart_id": {"type": "uint32"}, + } + } diff --git a/fiboa_cli/datasets/at_crop.py b/fiboa_cli/datasets/at_crop.py deleted file mode 100644 index fb4a5bcf..00000000 --- a/fiboa_cli/datasets/at_crop.py +++ /dev/null @@ -1,47 +0,0 @@ -from vecorel_cli.conversion.admin import AdminConverterMixin - -from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import AddHCATMixin - - -class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): - variants = { - "2025": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2025-1_polygon.gpkg.zip", - "2024": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2024-2_polygon.gpkg.zip", - "2023": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2023-2_polygon.gpkg.zip", - "2022": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2022_polygon.gpkg.zip", - "2021": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2021_polygon.gpkg.zip", - "2020": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2020_polygon.gpkg.zip", - "2019": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2019_polygon.gpkg.zip", - "2018": "https://inspire.lfrz.gv.at/009501/ds/inspire_schlaege_2018_polygon.gpkg.zip", - } - - id = "at_crop" - country = "AT" - short_name = "Austria" - title = "Field boundaries for Austria" - description = """ - **Crop Field boundaries for Austria - INVEKOS Schläge Österreich 2025.** - - This layer includes all field uses recorded by the applicants, which serve as the basis for the funding process. A field - is a contiguous area of a piece of land that is cultivated for a growing season with only one crop (field use type) and - uniform management requirements or as a landscape element type in accordance with Annex 1 of the regulation of the responsible - Federal Ministry with horizontal rules for the area of the Common Agricultural Policy (Horizontal CAP Regulation) - StF: BGBl. II No. 100/2015 or is simply maintained in good agricultural and ecological condition in accordance with - Art. 94 of Regulation (EU) No. 1306/2013 and is digitized in the GIS as a polygon or as a point. - """ - provider = "Agrarmarkt Austria " - license = "CC-BY-4.0" - columns = { - "GEO_ID": "id", - "INSPIRE_ID": "inspire:id", - "geometry": "geometry", - "SNAR_CODE": "crop:code", - "SNAR_BEZEICHNUNG": "crop:name", - "SL_FLAECHE_BRUTTO_HA": "metrics:area", - "GEOM_DATE_CREATED": "determination:datetime", - } - ec_mapping_csv = "at_2021.csv" - extensions = { - "https://fiboa.org/inspire-extension/v0.3.0/schema.yaml", - } diff --git a/fiboa_cli/datasets/nl.py b/fiboa_cli/datasets/nl.py index e4c65162..a9e49177 100644 --- a/fiboa_cli/datasets/nl.py +++ b/fiboa_cli/datasets/nl.py @@ -1,46 +1,69 @@ +import pandas as pd from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.ec import ec_url +# see https://service.pdok.nl/rvo/brpgewaspercelen/atom/v1_0/basisregistratie_gewaspercelen_brp.xml +base = "https://service.pdok.nl/rvo/brpgewaspercelen/atom/v1_0/downloads" -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = ( - "https://service.pdok.nl/rvo/referentiepercelen/atom/downloads/referentiepercelen.gpkg" - ) + +class NLCropConverter(AdminConverterMixin, FiboaBaseConverter): + area_calculate_missing = True + variants = { + "2025": f"{base}/brpgewaspercelen_concept_2025.gpkg", + **{str(y): f"{base}/brpgewaspercelen_definitief_{y}.gpkg" for y in range(2024, 2020, -1)}, + **{str(y): f"{base}/brpgewaspercelen_definitief_{y}.zip" for y in range(2020, 2009, -1)}, + } id = "nl" - short_name = "Netherlands" - title = "Field boundaries for The Netherlands" + short_name = "Netherlands (Crops)" + title = "BRP Crop Field Boundaries for The Netherlands (CAP-based)" description = """ - A field block (Dutch: "Referentieperceel"), formerly known as "AAN" (Agrarisch Areaal Nederland), - is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated by one or - more farmers with one or more crops, is fully or partially set aside or is fully or partially - taken out of production. + BasisRegistratie Percelen (BRP) combines the location of + agricultural plots with the crop grown. The data set + is published by RVO (Netherlands Enterprise Agency). The boundaries of the agricultural plots + are based within the reference parcels (formerly known as AAN). A user an agricultural plot + annually has to register his crop fields with crops (for the Common Agricultural Policy scheme). + A dataset is generated for each year with reference date May 15. + A view service and a download service are available for the most recent BRP crop plots. - The following field block types exist: + - - Woods (Hout) - - Agricultural area (Landbouwgrond) - - Other (Overig) - - Water (Water) - - We filter on "Agricultural area" in this converter. - For crop data, look at BasisRegistratie gewasPercelen (BRP) + Data is currently available for the years 2009 to 2024. """ - provider = "RVO / PDOK " + provider = ( + "RVO / PDOK " + ) # Both http://creativecommons.org/publicdomain/zero/1.0/deed.nl and http://creativecommons.org/publicdomain/mark/1.0/ license = "CC0-1.0" - column_additions = {"determination:datetime": "2023-06-15T00:00:00Z"} - columns = {"geometry": "geometry", "id": "id", "area": "metrics:area", "versiebron": "source"} + + columns = { + "geometry": "geometry", + "id": "id", + "area": "metrics:area", + "category": "coverage", + "gewascode": "crop:code", + "gewas": "crop:name", + "jaar": "determination:datetime", + } + column_filters = { - # type = "Hout" | "Landbouwgrond" | "Overig" | "Water" - "type": lambda col: col == "Landbouwgrond" + # category = "Grasland" | "Bouwland" | "Sloot" | "Landschapselement" + "category": lambda col: col.isin(["Grasland", "Bouwland"]) + } + + column_migrations = { + # Add 15th of may to original "year" (jaar) column + "jaar": lambda col: pd.to_datetime(col, format="%Y") + pd.DateOffset(months=4, days=14) } + extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} + column_additions = {"crop:code_list": ec_url("nl_2020.csv")} index_as_id = True - area_calculate_missing = True + missing_schemas = { "properties": { - "source": {"type": "string"}, + "coverage": {"type": "string", "enum": ["Grasland", "Bouwland"]}, } } diff --git a/fiboa_cli/datasets/nl_block.py b/fiboa_cli/datasets/nl_block.py new file mode 100644 index 00000000..fbf30369 --- /dev/null +++ b/fiboa_cli/datasets/nl_block.py @@ -0,0 +1,46 @@ +from vecorel_cli.conversion.admin import AdminConverterMixin + +from ..conversion.fiboa_converter import FiboaBaseConverter + + +class Converter(AdminConverterMixin, FiboaBaseConverter): + sources = ( + "https://service.pdok.nl/rvo/referentiepercelen/atom/downloads/referentiepercelen.gpkg" + ) + + id = "nl_block" + short_name = "Netherlands" + title = "Field blocks for The Netherlands" + description = """ + A field block (Dutch: "Referentieperceel"), formerly known as "AAN" (Agrarisch Areaal Nederland), + is a contiguous agricultural area surrounded by permanent boundaries, which is cultivated by one or + more farmers with one or more crops, is fully or partially set aside or is fully or partially + taken out of production. + + The following field block types exist: + + - Woods (Hout) + - Agricultural area (Landbouwgrond) + - Other (Overig) + - Water (Water) + + We filter on "Agricultural area" in this converter. + For crop data, look at BasisRegistratie gewasPercelen (BRP) + """ + + provider = "RVO / PDOK " + # Both http://creativecommons.org/publicdomain/zero/1.0/deed.nl and http://creativecommons.org/publicdomain/mark/1.0/ + license = "CC0-1.0" + column_additions = {"determination:datetime": "2023-06-15T00:00:00Z"} + columns = {"geometry": "geometry", "id": "id", "area": "metrics:area", "versiebron": "source"} + column_filters = { + # type = "Hout" | "Landbouwgrond" | "Overig" | "Water" + "type": lambda col: col == "Landbouwgrond" + } + index_as_id = True + area_calculate_missing = True + missing_schemas = { + "properties": { + "source": {"type": "string"}, + } + } diff --git a/fiboa_cli/datasets/nl_crop.py b/fiboa_cli/datasets/nl_crop.py deleted file mode 100644 index 2136722f..00000000 --- a/fiboa_cli/datasets/nl_crop.py +++ /dev/null @@ -1,69 +0,0 @@ -import pandas as pd -from vecorel_cli.conversion.admin import AdminConverterMixin - -from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url - -# see https://service.pdok.nl/rvo/brpgewaspercelen/atom/v1_0/basisregistratie_gewaspercelen_brp.xml -base = "https://service.pdok.nl/rvo/brpgewaspercelen/atom/v1_0/downloads" - - -class NLCropConverter(AdminConverterMixin, FiboaBaseConverter): - area_calculate_missing = True - variants = { - "2025": f"{base}/brpgewaspercelen_concept_2025.gpkg", - **{str(y): f"{base}/brpgewaspercelen_definitief_{y}.gpkg" for y in range(2024, 2020, -1)}, - **{str(y): f"{base}/brpgewaspercelen_definitief_{y}.zip" for y in range(2020, 2009, -1)}, - } - - id = "nl_crop" - short_name = "Netherlands (Crops)" - title = "BRP Crop Field Boundaries for The Netherlands (CAP-based)" - description = """ - BasisRegistratie Percelen (BRP) combines the location of - agricultural plots with the crop grown. The data set - is published by RVO (Netherlands Enterprise Agency). The boundaries of the agricultural plots - are based within the reference parcels (formerly known as AAN). A user an agricultural plot - annually has to register his crop fields with crops (for the Common Agricultural Policy scheme). - A dataset is generated for each year with reference date May 15. - A view service and a download service are available for the most recent BRP crop plots. - - - - Data is currently available for the years 2009 to 2024. - """ - - provider = ( - "RVO / PDOK " - ) - # Both http://creativecommons.org/publicdomain/zero/1.0/deed.nl and http://creativecommons.org/publicdomain/mark/1.0/ - license = "CC0-1.0" - - columns = { - "geometry": "geometry", - "id": "id", - "area": "metrics:area", - "category": "coverage", - "gewascode": "crop:code", - "gewas": "crop:name", - "jaar": "determination:datetime", - } - - column_filters = { - # category = "Grasland" | "Bouwland" | "Sloot" | "Landschapselement" - "category": lambda col: col.isin(["Grasland", "Bouwland"]) - } - - column_migrations = { - # Add 15th of may to original "year" (jaar) column - "jaar": lambda col: pd.to_datetime(col, format="%Y") + pd.DateOffset(months=4, days=14) - } - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("nl_2020.csv")} - index_as_id = True - - missing_schemas = { - "properties": { - "coverage": {"type": "string", "enum": ["Grasland", "Bouwland"]}, - } - } diff --git a/tests/data-files/convert/at_crop/at_2021.csv b/tests/data-files/convert/at/at_2021.csv similarity index 100% rename from tests/data-files/convert/at_crop/at_2021.csv rename to tests/data-files/convert/at/at_2021.csv diff --git a/tests/data-files/convert/at_crop/inspire_schlaege_2025-1_polygon.gpkg.zip b/tests/data-files/convert/at/inspire_schlaege_2025-1_polygon.gpkg.zip similarity index 100% rename from tests/data-files/convert/at_crop/inspire_schlaege_2025-1_polygon.gpkg.zip rename to tests/data-files/convert/at/inspire_schlaege_2025-1_polygon.gpkg.zip diff --git a/tests/data-files/convert/at/inspire_referenzen_2021_polygon.gpkg.zip b/tests/data-files/convert/at_block/inspire_referenzen_2021_polygon.gpkg.zip similarity index 100% rename from tests/data-files/convert/at/inspire_referenzen_2021_polygon.gpkg.zip rename to tests/data-files/convert/at_block/inspire_referenzen_2021_polygon.gpkg.zip diff --git a/tests/data-files/convert/nl_crop/brpgewaspercelen_definitief_2023.gpkg b/tests/data-files/convert/nl/brpgewaspercelen_definitief_2023.gpkg similarity index 100% rename from tests/data-files/convert/nl_crop/brpgewaspercelen_definitief_2023.gpkg rename to tests/data-files/convert/nl/brpgewaspercelen_definitief_2023.gpkg diff --git a/tests/data-files/convert/nl/referentiepercelen.gpkg b/tests/data-files/convert/nl_block/referentiepercelen.gpkg similarity index 100% rename from tests/data-files/convert/nl/referentiepercelen.gpkg rename to tests/data-files/convert/nl_block/referentiepercelen.gpkg diff --git a/tests/test_convert.py b/tests/test_convert.py index c634e849..3f94c0de 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -16,7 +16,7 @@ tests = [ "at", - "at_crop", + "at_block", "be_vlg", "br_ba_lem", "de_sh", @@ -27,7 +27,7 @@ "fr", "hr", "nl", - "nl_crop", + "nl_block", "pt", "dk", "be_wal", @@ -57,7 +57,8 @@ def _input_files(converter, *names): extra_convert_parameters = { "ai4sf": _input_files("ai4sf", "1_vietnam_areas.gpkg", "4_cambodia_areas.gpkg"), - "nl_crop": {"variant": "2023"}, + "nl": {"variant": "2023"}, + "se": {"variant": "2023"}, "be_vlg": {"variant": "2023"}, "br_ba_lem": _input_files("br_ba_lem", "LEM_dataset.zip"), "ch": _input_files("ch", "lwb_nutzungsflaechen_v2_0_lv95.gpkg"), From 949f753d4e37ae74026c8adc8ef0a04d57ba3cb0 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sat, 25 Oct 2025 13:13:53 +0200 Subject: [PATCH 09/19] Typo --- fiboa_cli/datasets/commons/hcat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fiboa_cli/datasets/commons/hcat.py b/fiboa_cli/datasets/commons/hcat.py index a04728ed..21c14297 100644 --- a/fiboa_cli/datasets/commons/hcat.py +++ b/fiboa_cli/datasets/commons/hcat.py @@ -57,7 +57,7 @@ def add_hcat(self, gdf): if self.ec_mapping is None: self.ec_mapping = load_ec_mapping(self.ec_mapping_csv, url=self.mapping_file) - from_code = "orginal_code" + from_code = "original_code" if from_code not in self.ec_mapping[0]: # Some code lists have no code, only a crop_name from_code = "original_name" From d6b194681860ab56d5fc142cde20bb7972672f33 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Wed, 29 Oct 2025 22:06:37 +0100 Subject: [PATCH 10/19] Fix tests --- fiboa_cli/datasets/ec_nl_crop.py | 2 +- tests/data-files/convert/ie/GSAA_2024.zip | Bin 0 -> 79818 bytes tests/data-files/convert/ie/IACS_GSAA_2022.zip | Bin 52768 -> 0 bytes tests/test_publish.py | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 tests/data-files/convert/ie/GSAA_2024.zip delete mode 100644 tests/data-files/convert/ie/IACS_GSAA_2022.zip diff --git a/fiboa_cli/datasets/ec_nl_crop.py b/fiboa_cli/datasets/ec_nl_crop.py index 3fb0a82c..c81c57d1 100644 --- a/fiboa_cli/datasets/ec_nl_crop.py +++ b/fiboa_cli/datasets/ec_nl_crop.py @@ -1,5 +1,5 @@ from .commons.ec import EuroCropsConverterMixin -from .nl_crop import NLCropConverter +from .nl import NLCropConverter class NLEuroCropConverter(EuroCropsConverterMixin, NLCropConverter): diff --git a/tests/data-files/convert/ie/GSAA_2024.zip b/tests/data-files/convert/ie/GSAA_2024.zip new file mode 100644 index 0000000000000000000000000000000000000000..2141fdbad42acc51ab7e454eacb81916b4bc2e11 GIT binary patch literal 79818 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 a~OTqo*K9dmL% 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 NSO5S3vdsVh008&Xsnq}g diff --git a/tests/test_publish.py b/tests/test_publish.py index 663b2c4b..cf960760 100644 --- a/tests/test_publish.py +++ b/tests/test_publish.py @@ -3,7 +3,7 @@ from fiboa_cli.publish import Publish -class TestPublish(Publish): +class PublishTest(Publish): def generate_pmtiles(self, target, file_name, parquet_file): pass @@ -22,7 +22,7 @@ def test_publish(tmp_folder): body=open(f"tests/data-files/publish/{base}-survey.md").read(), ) responses.add(rsp1) - TestPublish(converter).run( + PublishTest(converter).run( variant="2023", target=tmp_folder, cache=path, generate_meta=True, yes=True ) files = [f.name for f in tmp_folder.iterdir() if f.is_file()] From 8ef867f605edc52d568aa430ec3dfdefd5a62bf4 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Fri, 28 Nov 2025 14:18:17 +0100 Subject: [PATCH 11/19] Update datasets to proper hcat-codes --- fiboa_cli/datasets/be_wal.py | 9 ++++---- fiboa_cli/datasets/commons/hcat.py | 15 ++++++++++++- fiboa_cli/datasets/de_mv.py | 32 +++++++++------------------ fiboa_cli/datasets/de_nrw.py | 9 ++++---- fiboa_cli/datasets/fi.py | 2 +- fiboa_cli/datasets/hr.py | 7 +++++- tests/data-files/stac-collection.json | 2 +- 7 files changed, 41 insertions(+), 35 deletions(-) diff --git a/fiboa_cli/datasets/be_wal.py b/fiboa_cli/datasets/be_wal.py index 3ce07c39..94ad8452 100644 --- a/fiboa_cli/datasets/be_wal.py +++ b/fiboa_cli/datasets/be_wal.py @@ -41,10 +41,6 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): column_additions = { "determination:datetime": "2022-01-01T00:00:00Z", } - column_migrations = { - "crop_code": lambda col: col.str.extract(r"\.(\d+)$", expand=False), - "crop_name": lambda col: col.str.strip(), - } index_as_id = True def layer_filter(self, layer: str, uri: str) -> bool: @@ -53,7 +49,7 @@ def layer_filter(self, layer: str, uri: str) -> bool: def file_migration( self, gdf: gpd.GeoDataFrame, path: str, uri: str, layer: str = None ) -> gpd.GeoDataFrame: - return gml_assure_columns( + gdf = gml_assure_columns( gdf, path, uri, @@ -61,3 +57,6 @@ def file_migration( crop_name={"ElementPath": "specificLandUse@title", "Type": "String", "Width": 255}, crop_code={"ElementPath": "specificLandUse@href", "Type": "String", "Width": 255}, ) + gdf["crop_code"] = gdf["crop_code"].str.extract(r"\.(\d+)$", expand=False) + gdf["crop_name"] = gdf["crop_name"].str.strip() + return gdf diff --git a/fiboa_cli/datasets/commons/hcat.py b/fiboa_cli/datasets/commons/hcat.py index 21c14297..06570a3a 100644 --- a/fiboa_cli/datasets/commons/hcat.py +++ b/fiboa_cli/datasets/commons/hcat.py @@ -3,6 +3,7 @@ from typing import Optional import geopandas as gpd +import numpy as np from vecorel_cli.vecorel.util import load_file HCAT_EXTENSION = "https://fiboa.org/hcat-extension/v0.3.0/schema.yaml" @@ -68,11 +69,21 @@ def add_hcat(self, gdf): def map_to(attribute): return {e[from_code]: e[attribute] for e in self.ec_mapping} + col = None for k, v in zip( self.hcat_columns.keys(), ("translated_name", "HCAT3_name", "HCAT3_code") ): if v in self.ec_mapping[0]: - gdf[k] = crop_code_col.map(map_to(v)) + col = crop_code_col.map(map_to(v)) + gdf[k] = col + assert np.unique(col[~col.isna()]).size > 1, "No HCAT crops mapped" + + if col is not None and col.isna().any(): + index = [ + k for k, v in self.columns.items() if v.startswith("crop:") and k in gdf.columns + ] + missing = gdf[col.isna()][index].drop_duplicates() + self.info(f"Missing codes in HCAT mapping:\n{missing}") if "crop:code_list" not in gdf.columns: gdf["crop:code_list"] = ( @@ -86,6 +97,8 @@ def migrate(self, gdf) -> gpd.GeoDataFrame: def ec_url(csv_file): + if csv_file.startswith("https://"): + return csv_file return f"https://raw.githubusercontent.com/maja601/EuroCrops/refs/heads/main/csvs/country_mappings/{csv_file}" diff --git a/fiboa_cli/datasets/de_mv.py b/fiboa_cli/datasets/de_mv.py index 765abc37..ce62ff95 100644 --- a/fiboa_cli/datasets/de_mv.py +++ b/fiboa_cli/datasets/de_mv.py @@ -1,10 +1,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.hcat import AddHCATMixin +from .commons.hcat import CROP_EXTENSION -class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, FiboaBaseConverter): sources = { "https://www.geodaten-mv.de/dienste/gdimv_feldblock_wfs?SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=mv:feldbloecke&OUTPUTFORMAT=shape-zip": "gdimv_feldblock_wfs.zip" } @@ -16,8 +16,10 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): provider = "Ministerium für Landwirtschaft und Umwelt M-V " license = "No restrictions apply " - extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml"} - ec_mapping_csv = "de.csv" + extensions = {"https://fiboa.org/flik-extension/v0.2.0/schema.yaml", CROP_EXTENSION} + column_additions = {"crop:code_list": "https://fiboa.org/code/de/de_mv.csv"} + + # ec_mapping_csv = "de.csv" columns = { "geometry": "geometry", @@ -53,33 +55,21 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): missing_schemas = { "properties": { "dgl_jahr": {"type": "int16"}, - "bodennutzu": { - "type": "string", - "enum": [ - "AAF", # Aufforstung auf Ackerfläche - "AF", # Ackerfläche - "AGL", # Aufforstung auf Grünland - "AÖD", # Aufforstung auf Ödland - "DK", # Dauerkultur - "FO", # Forst - "GL", # Grünland - ], - }, "bez_kreis": {"type": "string"}, "erwind": { "type": "string", "enum": [ - "CC0", # nicht relevant für Cross Compliance - "CC1", # Erosionsgefährdung nach Direktzahlungen-Verpflichtungenverordnung + "0", # nicht relevant für Cross Compliance + "1", # Erosionsgefährdung nach Direktzahlungen-Verpflichtungenverordnung "-", # keine Angabe ], }, "erwater": { "type": "string", "enum": [ - "CC0", # nicht relevant für Cross Compliance - "CC1", # Erosionsgefährdung nach Direktzahlungen-Verpflichtungenverordnung (15-27,5 t/ha/a Bodenabtrag durch Wasser) - "CC2", # hohe Erosionsgefährdung nach Direktzahlungen-Verpflichtungenverordnung (>27,5 t/ha/a Bodenabtrag durch Wasser) + "0", # nicht relevant für Cross Compliance + "1", # Erosionsgefährdung nach Direktzahlungen-Verpflichtungenverordnung (15-27,5 t/ha/a Bodenabtrag durch Wasser) + "2", # hohe Erosionsgefährdung nach Direktzahlungen-Verpflichtungenverordnung (>27,5 t/ha/a Bodenabtrag durch Wasser) "-", # keine Angabe ], }, diff --git a/fiboa_cli/datasets/de_nrw.py b/fiboa_cli/datasets/de_nrw.py index e4913685..58f95c86 100644 --- a/fiboa_cli/datasets/de_nrw.py +++ b/fiboa_cli/datasets/de_nrw.py @@ -5,7 +5,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): - sources = "https://www.opengeodata.nrw.de/produkte/umwelt_klima/bodennutzung/landwirtschaft/LFK-AKTI_EPSG25832_Shape.zip" + sources = "https://www.opengeodata.nrw.de/produkte/umwelt_klima/bodennutzung/landwirtschaft/LWK-TSCHLAG_EPSG25832_Shape.zip" id = "de_nrw" admin_subdivision_code = "NW" short_name = "Germany, North Rhine-Westphalia" @@ -21,10 +21,9 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): columns = { "geometry": "geometry", "ID": "id", - "INSPIRE_ID": "inspire:id", "FLIK": "flik", - "GUELT_VON": "determination:datetime", - "NUTZ_CODE": "crop:code", - "NUTZ_TXT": "crop:name", + "BEGINLIFES": "determination:datetime", + "CODE": "crop:code", + "CODE_TXT": "crop:name", "AREA_HA": "metrics:area", } diff --git a/fiboa_cli/datasets/fi.py b/fiboa_cli/datasets/fi.py index b6d1222e..ed79c059 100644 --- a/fiboa_cli/datasets/fi.py +++ b/fiboa_cli/datasets/fi.py @@ -31,7 +31,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): # Make year (1st January) from column "VUOSI" "VUOSI": lambda col: pd.to_datetime(col, format="%Y"), } - ec_mapping_csv = "fi_2020.csv" + ec_mapping_csv = "https://fiboa.org/code/fi/fi_2023.csv" area_is_in_ha = False area_calculate_missing = True diff --git a/fiboa_cli/datasets/hr.py b/fiboa_cli/datasets/hr.py index 9f6d9d56..0ff50a75 100644 --- a/fiboa_cli/datasets/hr.py +++ b/fiboa_cli/datasets/hr.py @@ -1,3 +1,4 @@ +import geopandas as gpd from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter @@ -59,6 +60,10 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): ec_mapping_csv = "hr_2020.csv" + def migrate(self, gdf) -> gpd.GeoDataFrame: + gdf["land_use_id"] = gdf["land_use_id"].astype(int) + return super().migrate(gdf) + missing_schemas = { "required": [ "mines_status", @@ -69,7 +74,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "jpaid", ], "properties": { - "land_use_id": {"type": "double"}, + "land_use_id": {"type": "integer"}, "home_name": {"type": "string"}, "slope": {"type": "double"}, "z_avg": {"type": "double"}, diff --git a/tests/data-files/stac-collection.json b/tests/data-files/stac-collection.json index 6fc921da..fef2cb62 100644 --- a/tests/data-files/stac-collection.json +++ b/tests/data-files/stac-collection.json @@ -1,7 +1,7 @@ { "stac_version": "1.1.0", "stac_extensions": [ - "https://stac-extensions.github.io/processing/v1.1.0/schema.json" + "https://stac-extensions.github.io/processing/v1.2.0/schema.json" ], "type": "Collection", "id": "de_nrw", From 19114a330d308b12bc8e586892a8396ffae7efb5 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sun, 30 Nov 2025 15:20:15 +0100 Subject: [PATCH 12/19] Complete HCAT mappings with custom lists --- fiboa_cli/datasets/at.py | 6 +----- fiboa_cli/datasets/ie.py | 2 +- fiboa_cli/datasets/nl.py | 6 +++--- fiboa_cli/datasets/pt.py | 2 +- fiboa_cli/datasets/se.py | 4 +++- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/fiboa_cli/datasets/at.py b/fiboa_cli/datasets/at.py index 00ff1320..4ebbc3e2 100644 --- a/fiboa_cli/datasets/at.py +++ b/fiboa_cli/datasets/at.py @@ -34,14 +34,10 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): license = "CC-BY-4.0" columns = { "GEO_ID": "id", - "INSPIRE_ID": "inspire:id", "geometry": "geometry", "SNAR_CODE": "crop:code", "SNAR_BEZEICHNUNG": "crop:name", "SL_FLAECHE_BRUTTO_HA": "metrics:area", "GEOM_DATE_CREATED": "determination:datetime", } - ec_mapping_csv = "at_2021.csv" - extensions = { - "https://fiboa.org/inspire-extension/v0.3.0/schema.yaml", - } + ec_mapping_csv = "https://fiboa.org/code/at/at.csv" diff --git a/fiboa_cli/datasets/ie.py b/fiboa_cli/datasets/ie.py index 517333c6..611b47a9 100644 --- a/fiboa_cli/datasets/ie.py +++ b/fiboa_cli/datasets/ie.py @@ -32,7 +32,7 @@ class IEConverter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "localId": "id", "determination:datetime": "determination:datetime", } - ec_mapping_csv = "ie_2023.csv" + ec_mapping_csv = "https://fiboa.org/code/ie/ie.csv" def migrate(self, gdf) -> gpd.GeoDataFrame: # crop_name can be multiple: "crop1, crop2, crop3". We only read the main crop (first). diff --git a/fiboa_cli/datasets/nl.py b/fiboa_cli/datasets/nl.py index d6eade46..3bdc9213 100644 --- a/fiboa_cli/datasets/nl.py +++ b/fiboa_cli/datasets/nl.py @@ -2,13 +2,13 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter -from .commons.ec import ec_url +from .commons.hcat import AddHCATMixin # see https://service.pdok.nl/rvo/brpgewaspercelen/atom/v1_0/basisregistratie_gewaspercelen_brp.xml base = "https://service.pdok.nl/rvo/brpgewaspercelen/atom/v1_0/downloads" -class NLCropConverter(AdminConverterMixin, FiboaBaseConverter): +class NLCropConverter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): area_calculate_missing = True variants = { "2025": f"{base}/brpgewaspercelen_concept_2025.gpkg", @@ -59,7 +59,7 @@ class NLCropConverter(AdminConverterMixin, FiboaBaseConverter): "jaar": lambda col: pd.to_datetime(col, format="%Y") + pd.DateOffset(months=4, days=14) } extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - column_additions = {"crop:code_list": ec_url("nl_2020.csv")} + ec_mapping_csv = "https://fiboa.org/code/nl/nl.csv" index_as_id = True missing_schemas = { diff --git a/fiboa_cli/datasets/pt.py b/fiboa_cli/datasets/pt.py index b2d4ff0f..25b0769e 100644 --- a/fiboa_cli/datasets/pt.py +++ b/fiboa_cli/datasets/pt.py @@ -41,7 +41,7 @@ def layer_filter(self, layer, uri): "Shape_Length": "metrics:perimeter", } extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - ec_mapping_csv = "pt_2021.csv" + ec_mapping_csv = "https://fiboa.org/code/pt/pt.csv" column_additions = { "determination:datetime": "2023-01-01T00:00:00Z", } diff --git a/fiboa_cli/datasets/se.py b/fiboa_cli/datasets/se.py index 042d1af3..2853b11b 100644 --- a/fiboa_cli/datasets/se.py +++ b/fiboa_cli/datasets/se.py @@ -22,6 +22,8 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): To receive compensation for agricultural support (EU support), farmers apply for support from the Swedish Agency for Agriculture via a SAM application. The data set contains parcels where the area applied for and the area decided on are the same. The data is published at the end of a year. + + Codes found at https://jordbruksverket.se/stod/jordbruk-tradgard-och-rennaring/sam-ansokan-och-allmant-om-jordbrukarstoden/grodkoder """ provider = "Jordbruksverket (The Swedish Board of Agriculture) " attribution = "Jordbruksverket" @@ -34,7 +36,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "arslager": "determination:datetime", } extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} - ec_mapping_csv = "se_2021.csv" + ec_mapping_csv = "https://fiboa.org/code/se/se.csv" column_migrations = { # Make year (1st January) from column "arslager" "arslager": lambda col: pd.to_datetime(col, format="%Y") From eb548e53a4215b04dcd1f7f19b7edca7c3aaa9a0 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Sun, 30 Nov 2025 20:04:47 +0100 Subject: [PATCH 13/19] Improve hcat mappings --- fiboa_cli/datasets/commons/hcat.py | 12 +++++++++++- fiboa_cli/datasets/si.py | 9 +++++++-- fiboa_cli/datasets/sk.py | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/fiboa_cli/datasets/commons/hcat.py b/fiboa_cli/datasets/commons/hcat.py index 06570a3a..d4a3626b 100644 --- a/fiboa_cli/datasets/commons/hcat.py +++ b/fiboa_cli/datasets/commons/hcat.py @@ -4,6 +4,7 @@ import geopandas as gpd import numpy as np +import pandas as pd from vecorel_cli.vecorel.util import load_file HCAT_EXTENSION = "https://fiboa.org/hcat-extension/v0.3.0/schema.yaml" @@ -83,7 +84,16 @@ def map_to(attribute): k for k, v in self.columns.items() if v.startswith("crop:") and k in gdf.columns ] missing = gdf[col.isna()][index].drop_duplicates() - self.info(f"Missing codes in HCAT mapping:\n{missing}") + missing.reset_index(drop=True, inplace=True) + with pd.option_context( + "display.max_colwidth", + None, + "display.max_columns", + None, + "display.max_rows", + None, + ): + self.info(f"Missing codes in HCAT mapping:\n{missing}") if "crop:code_list" not in gdf.columns: gdf["crop:code_list"] = ( diff --git a/fiboa_cli/datasets/si.py b/fiboa_cli/datasets/si.py index 50c114fd..ea1784c1 100644 --- a/fiboa_cli/datasets/si.py +++ b/fiboa_cli/datasets/si.py @@ -5,7 +5,12 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): - sources = {"https://rkg.gov.si/razno/portal_analysis/KMRS_2023.rar": ["KMRS_2023.shp"]} + variants = { + str(year): { + f"https://rkg.gov.si/razno/portal_analysis/KMRS_{year}.rar": [f"KMRS_{year}.shp"] + } + for year in range(2024, 2020, -1) + } id = "si" short_name = "Slovenia" title = "Slovenia Crop Fields" @@ -27,7 +32,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "RASTLINA": "crop:name", "CROP_LAT_E": "crop:name_en", } - ec_mapping_csv = "si_2021.csv" + ec_mapping_csv = "https://fiboa.org/code/si/si.csv" column_migrations = {"geometry": lambda col: col.make_valid()} area_is_in_ha = False missing_schemas = { diff --git a/fiboa_cli/datasets/sk.py b/fiboa_cli/datasets/sk.py index 833ef394..71b78891 100644 --- a/fiboa_cli/datasets/sk.py +++ b/fiboa_cli/datasets/sk.py @@ -10,6 +10,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "HU2024_20240917shp/HU2024_20240917.shp" ] } + # https://data.slovensko.sk/download?id=626c1181-bc53-40b6-9715-3c10164760ec id = "sk" short_name = "Slovakia" title = "Slovakia Agricultural Land Identification System" @@ -25,7 +26,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): """ provider = "Pôdohospodárska platobná agentúra " license = "CC0-1.0" # "Open Data" - ec_mapping_csv = "sk_2021.csv" + ec_mapping_csv = "https://fiboa.org/code/sk/sk.csv" columns = { "geometry": "geometry", "KODKD": "id", From 2e7fc32ce5eba4ce1d665822abb17263f7a70076 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Mon, 1 Dec 2025 16:00:10 +0100 Subject: [PATCH 14/19] Update Converters for HCAT compatibility --- fiboa_cli/datasets/be_wal.py | 7 ++++-- fiboa_cli/datasets/ch.py | 11 +++------ fiboa_cli/datasets/commons/hcat.py | 4 +-- fiboa_cli/datasets/ee.py | 39 ++++++++++++++++++++++++++++++ fiboa_cli/datasets/hr.py | 14 +++++------ fiboa_cli/datasets/lt.py | 6 +---- fiboa_cli/datasets/lv.py | 6 +++-- tests/test_convert.py | 1 + 8 files changed, 63 insertions(+), 25 deletions(-) create mode 100644 fiboa_cli/datasets/ee.py diff --git a/fiboa_cli/datasets/be_wal.py b/fiboa_cli/datasets/be_wal.py index 94ad8452..99eb957e 100644 --- a/fiboa_cli/datasets/be_wal.py +++ b/fiboa_cli/datasets/be_wal.py @@ -46,6 +46,11 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): def layer_filter(self, layer: str, uri: str) -> bool: return layer == "ExistingLandUseObject" + column_migrations = { + "crop_code": lambda col: col.str.extract(r"\.(\d+)$", expand=False), + "crop_name": lambda col: col.str.strip(), + } + def file_migration( self, gdf: gpd.GeoDataFrame, path: str, uri: str, layer: str = None ) -> gpd.GeoDataFrame: @@ -57,6 +62,4 @@ def file_migration( crop_name={"ElementPath": "specificLandUse@title", "Type": "String", "Width": 255}, crop_code={"ElementPath": "specificLandUse@href", "Type": "String", "Width": 255}, ) - gdf["crop_code"] = gdf["crop_code"].str.extract(r"\.(\d+)$", expand=False) - gdf["crop_name"] = gdf["crop_name"].str.strip() return gdf diff --git a/fiboa_cli/datasets/ch.py b/fiboa_cli/datasets/ch.py index 34eea68e..65c0156b 100644 --- a/fiboa_cli/datasets/ch.py +++ b/fiboa_cli/datasets/ch.py @@ -2,9 +2,10 @@ from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): sources = None data_access = """ Data must be obtained from the Swiss open data portal at https://www.geodienste.ch/services/lwb_nutzungsflaechen . @@ -32,7 +33,7 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): "id": "id", "flaeche_m2": "metrics:area", "kanton": "admin:subdivision_code", - "nutzung": "crop_name", + "nutzung": "crop:name", "bezugsjahr": "determination:datetime", } column_filters = { @@ -43,8 +44,4 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): column_migrations = { "bezugsjahr": lambda col: pd.to_datetime(col, format="%Y"), } - missing_schemas = { - "properties": { - "crop_name": {"type": "string"}, - } - } + ec_mapping_csv = "https://fiboa.org/code/ch/ch.csv" diff --git a/fiboa_cli/datasets/commons/hcat.py b/fiboa_cli/datasets/commons/hcat.py index d4a3626b..90915b87 100644 --- a/fiboa_cli/datasets/commons/hcat.py +++ b/fiboa_cli/datasets/commons/hcat.py @@ -101,8 +101,8 @@ def map_to(attribute): ) return gdf - def migrate(self, gdf) -> gpd.GeoDataFrame: - gdf = super().migrate(gdf) + def post_migrate(self, gdf) -> gpd.GeoDataFrame: + gdf = super().post_migrate(gdf) return self.add_hcat(gdf) diff --git a/fiboa_cli/datasets/ee.py b/fiboa_cli/datasets/ee.py new file mode 100644 index 00000000..777e827b --- /dev/null +++ b/fiboa_cli/datasets/ee.py @@ -0,0 +1,39 @@ +import pandas as pd + +from ..conversion.fiboa_converter import FiboaBaseConverter +from .commons.hcat import AddHCATMixin + +COLUMNS = { + "geometry": "geometry", + "pollu_id": "id", + "taotlusaasta": "determination:datetime", # year + "pindala_ha": "metrics:area", # area (in ha) + "taotletud_kultuur": "crop:name", # requested crop culture +} +ATTRIBUTES = ",".join(["geom" if k == "geometry" else k for k in COLUMNS.keys()]) + + +class Convert(AddHCATMixin, FiboaBaseConverter): + variants = { + str( + year + ): f"https://kls.pria.ee/geoserver/inspire_gsaa/wfs?service=WFS&version=2.0.0&request=GetFeature&typeName=inspire_gsaa:LU.GSAA.AGRICULTURAL_PARCELS_{year}&propertyName={ATTRIBUTES}" + for year in range(2024, 2009, -1) + } + ec_mapping_csv = "https://fiboa.org/code/ee/ee.csv" + id = "ee" + short_name = "Estonia" + title = "Field boundaries for Estonia" + description = """ +Geospatial Aid Application Estonia Agricultural parcels. +The original dataset is provided by ARIB and obtained from the INSPIRE theme GSAA (specifically Geospaial Aid Application Estonia Agricultural parcels) through which the data layer Fields and Eco Areas (GSAA) is made available. +The data comes from ARIB's database of agricultural parcels. + """ + provider = "Põllumajanduse Registrite ja Informatsiooni Amet " + attribution = "© Põllumajanduse Registrite ja Informatsiooni Amet" + license = "CC-BY-SA-3.0" + columns = COLUMNS + column_migrations = {"taotlusaasta": lambda col: pd.to_datetime(col, format="%Y")} + + def file_migration(self, gdf, path: str, uri: str, layer=None): + return gdf.set_crs(3301) diff --git a/fiboa_cli/datasets/hr.py b/fiboa_cli/datasets/hr.py index 0ff50a75..08ea26e0 100644 --- a/fiboa_cli/datasets/hr.py +++ b/fiboa_cli/datasets/hr.py @@ -36,15 +36,15 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "home_name": "home_name", "perim": "metrics:perimeter", "slope": "slope", - "z_avg": "z_avg", + "z_avg": "height", "eligibility_coef": "eligibility_coef", - "mines_status": "mines_status", - "mines_year_removed": "mines_year_removed", + # "mines_status": "mines_status", + # "mines_year_removed": "mines_year_removed", "water_protect_zone": "water_protect_zone", "natura2000": "natura2000", - "natura2000_ok": "natura2000_ok", - "natura2000_pop": "natura2000_pop", - "natura2000_povs": "natura2000_povs", + # "natura2000_ok": "natura2000_ok", + # "natura2000_pop": "natura2000_pop", + # "natura2000_povs": "natura2000_povs", "anc": "anc", "anc_area": "anc_area", "rp": "rp", @@ -77,7 +77,7 @@ def migrate(self, gdf) -> gpd.GeoDataFrame: "land_use_id": {"type": "integer"}, "home_name": {"type": "string"}, "slope": {"type": "double"}, - "z_avg": {"type": "double"}, + "height": {"type": "double"}, "eligibility_coef": {"type": "double"}, "mines_status": {"type": "string", "enum": ["N", "M", "R"]}, "mines_year_removed": {"type": "int32"}, diff --git a/fiboa_cli/datasets/lt.py b/fiboa_cli/datasets/lt.py index b88a1346..42a00b3a 100644 --- a/fiboa_cli/datasets/lt.py +++ b/fiboa_cli/datasets/lt.py @@ -10,8 +10,4 @@ class LTConverter(EuroLandBaseConverter): provider = "Nacionalinė mokėjimo agentūra prie Žemės ūkio ministerijos " attribution = "Nacionalinė mokėjimo agentūra prie Žemės ūkio ministerijos" ec_mapping_csv = "lt_2021.csv" - sources = { - "https://zenodo.org/records/14384070/files/LT_2024.zip?download=1": [ - "GSA-LT-2024.geoparquet" - ] - } + sources = {"https://zenodo.org/records/14384070/files/LT_2024.zip": ["GSA-LT-2024.geoparquet"]} diff --git a/fiboa_cli/datasets/lv.py b/fiboa_cli/datasets/lv.py index c0faded3..aa62293f 100644 --- a/fiboa_cli/datasets/lv.py +++ b/fiboa_cli/datasets/lv.py @@ -27,7 +27,6 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): Relevant datasets are: Country blocks (Lauku Bloki), Fields (Lauki), and Landscape elements. """ - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} provider = "Rural Support Service Republic of Latvia (Lauku atbalsta dienests) " attribution = "Lauku atbalsta dienests" license = "CC-BY-SA-4.0" # Not sure, taken from Eurocrops. It is "public" and free and "available to any user" @@ -38,6 +37,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): "DATA_CHANGED_DATE": "determination:datetime", "area": "metrics:area", "PRODUCT_CODE": "crop:code", + "PRODUCT_DESCRIPTION": "crop:name", } missing_schemas = { "properties": { @@ -47,5 +47,7 @@ class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): } } ec_mapping_csv = "lv_2021.csv" - + column_migrations = { + "PRODUCT_CODE": lambda col: col.fillna(0).astype(int).astype(str), + } area_calculate_missing = True diff --git a/tests/test_convert.py b/tests/test_convert.py index 9c6c2c17..73edd375 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -60,6 +60,7 @@ def _input_files(converter, *names): "ai4sf": _input_files("ai4sf", "1_vietnam_areas.gpkg", "4_cambodia_areas.gpkg"), "nl": {"variant": "2023"}, "se": {"variant": "2023"}, + "si": {"variant": "2023"}, "be_vlg": {"variant": "2023"}, "br_ba_lem": _input_files("br_ba_lem", "LEM_dataset.zip"), "ch": _input_files("ch", "lwb_nutzungsflaechen_v2_0_lv95.gpkg"), From 171a04cbccdb36f893cfecbc834928c501f1622b Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Thu, 4 Dec 2025 21:48:55 +0100 Subject: [PATCH 15/19] Allow empty mapping table --- fiboa_cli/datasets/commons/hcat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fiboa_cli/datasets/commons/hcat.py b/fiboa_cli/datasets/commons/hcat.py index 90915b87..5a94d219 100644 --- a/fiboa_cli/datasets/commons/hcat.py +++ b/fiboa_cli/datasets/commons/hcat.py @@ -68,7 +68,7 @@ def add_hcat(self, gdf): crop_code_col = self.get_code_column(gdf) def map_to(attribute): - return {e[from_code]: e[attribute] for e in self.ec_mapping} + return {e[from_code]: e[attribute] or None for e in self.ec_mapping} col = None for k, v in zip( From 88841f34fba14152eb7dae1d6c9170f7c46066fd Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Mon, 8 Dec 2025 00:13:10 +0100 Subject: [PATCH 16/19] Update USA converters --- fiboa_cli/datasets/us_ca_scm.py | 21 +++++++++----- fiboa_cli/datasets/us_usda_cropland.py | 40 +++++++++++++++++--------- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/fiboa_cli/datasets/us_ca_scm.py b/fiboa_cli/datasets/us_ca_scm.py index 61f58b25..9a191ada 100644 --- a/fiboa_cli/datasets/us_ca_scm.py +++ b/fiboa_cli/datasets/us_ca_scm.py @@ -4,13 +4,21 @@ from ..conversion.fiboa_converter import FiboaBaseConverter from .commons.ec import load_ec_mapping +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = { - "https://data.cnra.ca.gov/dataset/6c3d65e3-35bb-49e1-a51e-49d5a2cf09a9/resource/f38d3f6f-dcf1-4553-9f07-4f381d494320/download/i15_crop_mapping_2022_provisional_gdb.zip": [ - "i15_Crop_Mapping_2022_Provisional_GDB/i15_Crop_Mapping_2022_Provisional.gdb" - ] +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + variants = { + "2023": { + "https://data.cnra.ca.gov/dataset/6c3d65e3-35bb-49e1-a51e-49d5a2cf09a9/resource/4e17ca38-268e-4bf5-bbc5-09636d44ed60/download/i15_crop_mapping_2023_provisional_20241127.gdb.zip": [ + "i15_Crop_Mapping_2023_Provisional_20241127.gdb" + ] + }, + "2022": { + "https://data.cnra.ca.gov/dataset/6c3d65e3-35bb-49e1-a51e-49d5a2cf09a9/resource/f38d3f6f-dcf1-4553-9f07-4f381d494320/download/i15_crop_mapping_2022_provisional_gdb.zip": [ + "i15_Crop_Mapping_2022_Provisional_GDB/i15_Crop_Mapping_2022_Provisional.gdb" + ] + }, } id = "us_ca_scm" admin_subdivision_code = "CA" @@ -24,7 +32,6 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): seek to address resource management issues, regulatory compliance issues, environmental impacts, ecosystem services, urban and economic development, and other issues. """ - extensions = {"https://fiboa.org/crop-extension/v0.2.0/schema.yaml"} provider = "County of Santa Clara " license = "CC0-1.0" columns = { @@ -36,8 +43,8 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): } column_additions = { "determination:datetime": "2023-05-01T00:00:00Z", - "crop:code_list": "https://fiboa.org/code/us/ca/scm.csv", } + ec_mapping_csv = "https://fiboa.org/code/us/ca/scm.csv" missing_schemas = { "properties": { "admin_level_2": {"type": "string"}, diff --git a/fiboa_cli/datasets/us_usda_cropland.py b/fiboa_cli/datasets/us_usda_cropland.py index e5aef1af..35850d48 100644 --- a/fiboa_cli/datasets/us_usda_cropland.py +++ b/fiboa_cli/datasets/us_usda_cropland.py @@ -1,18 +1,24 @@ -from os.path import dirname, join - import pandas as pd from loguru import logger from vecorel_cli.conversion.admin import AdminConverterMixin from ..conversion.fiboa_converter import FiboaBaseConverter from .commons.ec import load_ec_mapping +from .commons.hcat import AddHCATMixin -class Converter(AdminConverterMixin, FiboaBaseConverter): - sources = { - "https://www.nass.usda.gov/Research_and_Science/Crop-Sequence-Boundaries/datasets/NationalCSB_2016-2023_rev23.zip": [ - "NationalCSB_2016-2023_rev23/CSB1623.gdb" - ] +class Converter(AdminConverterMixin, AddHCATMixin, FiboaBaseConverter): + variants = { + "2024": { + "https://www.nass.usda.gov/Research_and_Science/Crop-Sequence-Boundaries/datasets/NationalCSB_2017-2024_rev23.zip": [ + "NationalCSB_2017-2024_rev23/CSB1724.gdb" + ] + }, + "2023": { + "https://www.nass.usda.gov/Research_and_Science/Crop-Sequence-Boundaries/datasets/NationalCSB_2016-2023_rev23.zip": [ + "NationalCSB_2016-2023_rev23/CSB1623.gdb" + ] + }, } id = "us_usda_cropland" short_name = "US (USDA CSB)" @@ -30,19 +36,19 @@ class Converter(AdminConverterMixin, FiboaBaseConverter): columns = { "geometry": "geometry", "CSBID": "id", - "CDL2023": "crop:code", + # "CDL2023": "crop:code", "crop:name": "crop:name", "CNTY": "administrative_area_level_2", } column_additions = { "determination:datetime": "2023-05-01T00:00:00Z", - "crop:code_list": "https://fiboa.org/code/us/usda/crop.csv", } missing_schemas = { "properties": { "administrative_area_level_2": {"type": "string"}, } } + ec_mapping_csv = "https://fiboa.org/code/us/usda/cropland.csv" def migrate(self, gdf): """ @@ -53,18 +59,24 @@ def migrate(self, gdf): geodataframe.Dissolve(method="unary") is **slow** for large datasets So we're handling this huge dataset in blocks, states are a natural grouping-method """ + assert self.variant, "Variant must be set" + crop_key = f"CDL{self.variant}" + self.columns[crop_key] = "crop:code" + gdf = super().migrate(gdf) states = list(gdf["STATEFIPS"].unique()) gdfs = [] for state in states: logger.info(f"Handling State {state}") df = gdf[gdf["STATEFIPS"] == state].explode() - # TODO is this correct, don't we need `df = df.dissolve?` - df.dissolve(by=["CDL2023"], aggfunc="first").explode() + df = df.dissolve(by=[crop_key], aggfunc="first", as_index=False).explode() gdfs.append(df) gdf = pd.concat(gdfs) del gdfs - mapping = load_ec_mapping(url=join(dirname(__file__), "data-files", "us_usda_cropland.csv")) - original_name_mapping = {int(e["original_code"]): e["original_name"] for e in mapping} - gdf["crop:name"] = gdf["CDL2023"].map(original_name_mapping) + if self.ec_mapping is None: + self.ec_mapping = load_ec_mapping(self.ec_mapping_csv, url=self.mapping_file) + original_name_mapping = { + int(e["original_code"]): e["original_name"] for e in self.ec_mapping + } + gdf["crop:name"] = gdf[crop_key].map(original_name_mapping) return gdf From cd650ca349c4154ea1ab6f2988a707c19468f40a Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Mon, 8 Dec 2025 19:40:14 +0100 Subject: [PATCH 17/19] Update vecorel version --- pixi.lock | 42 +++++++++++++++++++++--------------------- pyproject.toml | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pixi.lock b/pixi.lock index f7ff81e9..ce310736 100644 --- a/pixi.lock +++ b/pixi.lock @@ -177,7 +177,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-64: @@ -342,7 +342,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-arm64: @@ -508,7 +508,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ win-64: @@ -672,7 +672,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl - pypi: ./ @@ -828,7 +828,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-64: @@ -968,7 +968,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-arm64: @@ -1109,7 +1109,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ win-64: @@ -1249,7 +1249,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl - pypi: ./ @@ -1368,7 +1368,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-64: @@ -1471,7 +1471,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-arm64: @@ -1575,7 +1575,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ win-64: @@ -1676,7 +1676,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl - pypi: ./ @@ -1820,7 +1820,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-64: @@ -1948,7 +1948,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ osx-arm64: @@ -2077,7 +2077,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: ./ win-64: @@ -2202,7 +2202,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl - pypi: ./ @@ -2917,9 +2917,9 @@ packages: - pypi: ./ name: fiboa-cli version: 0.20.3 - sha256: 0b3743a9a5f590df1aa36c60901b73456e1f2f7dbc25163ba4597134928c1132 + sha256: 37684f32135ca252711dae982a7f5f80dbc23a622225cf0c6118a9632584059f requires_dist: - - vecorel-cli==0.2.11 + - vecorel-cli==0.2.12 - spdx-license-list==3.27.0 requires_python: '>=3.10,<3.14' editable: true @@ -7322,10 +7322,10 @@ packages: purls: [] size: 113963 timestamp: 1753739198723 -- pypi: https://files.pythonhosted.org/packages/04/ed/c3c3cee45ca60be5f4766bc8dcf6ff904b70b5ca80c603d14297a830d1f0/vecorel_cli-0.2.11-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/95/f1/7b40045bfb8de925f0f510b36e269b474766711a5d4b78b47d97c9695e8d/vecorel_cli-0.2.12-py3-none-any.whl name: vecorel-cli - version: 0.2.11 - sha256: 405e04bac3f4818787d3a17e57d13985dcfc9a8f3704454cfa45ca7702243951 + version: 0.2.12 + sha256: c984d5522e84f5b374d9778a617006afa06e549fdde423a2f8170cbc399731a1 requires_dist: - pyyaml>=6.0,<7.0 - click>=8.1,<9.0 diff --git a/pyproject.toml b/pyproject.toml index cb36db97..12e7ccc2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ classifiers = [ ] requires-python = ">=3.10,<3.14" dependencies = [ - "vecorel-cli==0.2.11", + "vecorel-cli==0.2.12", "spdx-license-list==3.27.0", ] From f4125992e278cb02f231f74a71a8993a8562a3e7 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Mon, 8 Dec 2025 20:53:14 +0100 Subject: [PATCH 18/19] Update cropland testing dataset --- .../NationalCSB_2016-2023_rev23.zip | Bin 34569 -> 0 bytes .../NationalCSB_2017-2024_rev23.zip | Bin 0 -> 34357 bytes .../convert/us_usda_cropland/cropland.csv | 256 ++++++++++++++++++ tests/test_convert.py | 2 + 4 files changed, 258 insertions(+) delete mode 100644 tests/data-files/convert/us_usda_cropland/NationalCSB_2016-2023_rev23.zip create mode 100644 tests/data-files/convert/us_usda_cropland/NationalCSB_2017-2024_rev23.zip create mode 100644 tests/data-files/convert/us_usda_cropland/cropland.csv diff --git a/tests/data-files/convert/us_usda_cropland/NationalCSB_2016-2023_rev23.zip b/tests/data-files/convert/us_usda_cropland/NationalCSB_2016-2023_rev23.zip deleted file mode 100644 index fcc4ec9c0e0cc21f3bab1891f3c7d3d8fc8ea991..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34569 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 N>ffC`kNZD<`#)NSgbV-x diff --git a/tests/data-files/convert/us_usda_cropland/NationalCSB_2017-2024_rev23.zip b/tests/data-files/convert/us_usda_cropland/NationalCSB_2017-2024_rev23.zip new file mode 100644 index 0000000000000000000000000000000000000000..93c13ae0e1302ea4c2ad5877ec96bd27810f6572 GIT binary patch literal 34357 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 Date: Mon, 8 Dec 2025 21:17:41 +0100 Subject: [PATCH 19/19] Extend tests --- ...op_mapping_2023_provisional_20241127.gdb.zip | Bin 0 -> 42956 bytes tests/test_convert.py | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 tests/data-files/convert/us_ca_scm/i15_crop_mapping_2023_provisional_20241127.gdb.zip diff --git a/tests/data-files/convert/us_ca_scm/i15_crop_mapping_2023_provisional_20241127.gdb.zip b/tests/data-files/convert/us_ca_scm/i15_crop_mapping_2023_provisional_20241127.gdb.zip new file mode 100644 index 0000000000000000000000000000000000000000..0b662e1eca89f079787b144683c5c298ea38bce2 GIT binary patch literal 42956 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 literal 0 HcmV?d00001 diff --git a/tests/test_convert.py b/tests/test_convert.py index f5f4baaa..dc7698d0 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -37,6 +37,7 @@ "ch", "cz", "us_usda_cropland", + "us_ca_scm", "jp", "lv", "ie", @@ -77,7 +78,7 @@ def test_converter(load_ec_mock, capsys, tmp_parquet_file, converter): from fiboa_cli import Registry # noqa def load_ec(csv_file=None, url=None): - if "://" in csv_file: + if csv_file and "://" in csv_file: csv_file = csv_file.split("/")[-1] path = url if url and "://" not in url else f"{test_path}/{converter}/{csv_file}" return list(DictReader(open(path, "r", encoding="utf-8")))