From 832cc9de6d41905008bbcc3091e9b7ea87dab905 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Fri, 11 Sep 2026 22:02:26 +0200 Subject: [PATCH] ES-CM: the year-named service, and the id field that is not OBJECTID The unnamed service moved on to 2025 with a different id field, so the converter reads the year-named one. Its id field is OBJECTID_1, and the case matters: the paging cursor filters on that name, and a mismatch returns every page from the start. REST field names arrive uppercase, and the determination date comes from the variant year. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01DVx9uQV2QPM8ecPAY3ZjXG --- CHANGELOG.md | 1 + fiboa_cli/datasets/es_cm.py | 36 ++++++++++---------- tests/data-files/convert/es_cm/es_cm_0.gpkg | Bin 0 -> 167936 bytes tests/test_convert.py | 2 ++ 4 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 tests/data-files/convert/es_cm/es_cm_0.gpkg diff --git a/CHANGELOG.md b/CHANGELOG.md index a654d7dd..1acf228c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - ES-CL: the ITACyL server is https-only, the 2025 shapefiles sit in province subfolders, and C_REFREC is the identifier - A test refuses a fixture above 5 MB, committed or merely lying in the fixture folder, because a failing convert test downloads the real source there - ES-MD: find RECINTO.shp wherever the archive puts it +- ES-CM: read the year-named SIGPAC service, whose id field is OBJECTID_1, with the determination date from the variant - Update vecorel-cli to v0.2.17: - GeoJSON is read as UTF-8 as the format mandates, instead of the platform locale (cp1252 on Windows mangled umlauts) - GeoJSON files with a byte order mark no longer fail to read diff --git a/fiboa_cli/datasets/es_cm.py b/fiboa_cli/datasets/es_cm.py index 789ce436..ded133bb 100644 --- a/fiboa_cli/datasets/es_cm.py +++ b/fiboa_cli/datasets/es_cm.py @@ -8,7 +8,7 @@ class ESCMConverter(EsriRESTConverterMixin, ESBaseConverter): id = "es_cm" - short_name = "Spain " + short_name = "Spain Castilla-La Mancha" title = "Spain Castilla-La Mancha Crop fields" description = """ SIGPAC is a Geographic Information System dedicated to the control of agricultural aid under @@ -19,16 +19,18 @@ class ESCMConverter(EsriRESTConverterMixin, ESBaseConverter): attribution = "Unidad de Cartografía. Secretaría General. Consejería de Agricultura, Ganadería y Desarrollo Rural." provider = "Unidad de Cartografía. Secretaría General. Consejería de Agricultura, Ganadería y Desarrollo Rural. " columns = { - "dn_oid": "id", + "DN_OID": "id", "geometry": "geometry", - "provincia": "admin_province_code", - "municipio": "admin_municipality_code", - "dn_surface": "metrics:area", - "uso_sigpac": "crop:code", + "PROVINCIA": "admin_province_code", + "MUNICIPIO": "admin_municipality_code", + "DN_SURFACE": "metrics:area", + "USO_SIGPAC": "crop:code", "crop:name": "crop:name", "crop:name_en": "crop:name_en", } + use_code_attribute = "USO_SIGPAC" area_is_in_ha = False + use_variant_as_determination = True missing_schemas = { "properties": { "admin_province_code": {"type": "string"}, @@ -38,19 +40,17 @@ class ESCMConverter(EsriRESTConverterMixin, ESBaseConverter): variants = {str(year): str(year) for year in range(2024, 2018 - 1, -1)} rest_base_url = "https://geoservicios.castillalamancha.es/arcgis/rest/services/Vector" - rest_attribute = "objectid_1" + rest_attribute = "OBJECTID_1" def get_urls(self): - latest_year = next(iter(self.variants)) if not self.variant: - self.variant = latest_year - if self.variant == latest_year: - layer = "Vector/Recintos_sigpac" - else: - services = requests.get(self.rest_base_url, {"f": "pjson"}).json()["services"] - layer = next( - s["name"] - for s in services - if re.search(f"Recintos_sigpac_{self.variant}", s["name"], re.IGNORECASE) - ) + self.variant = next(iter(self.variants)) + # Always use the year-named service: the unnamed "Recintos_sigpac" service is + # whatever year is current (2025 in August 2026) and keys on OBJECTID instead. + services = requests.get(self.rest_base_url, {"f": "pjson"}).json()["services"] + layer = next( + s["name"] + for s in services + if re.search(f"Recintos_sigpac_{self.variant}$", s["name"], re.IGNORECASE) + ) return {"REST": self.rest_base_url.replace("Vector", layer + "/MapServer")} diff --git a/tests/data-files/convert/es_cm/es_cm_0.gpkg b/tests/data-files/convert/es_cm/es_cm_0.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..d99d289148c7c5e6502b0415297f421137f3f17f GIT binary patch literal 167936 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 Jmwy)q{tqlti*5h_ literal 0 HcmV?d00001 diff --git a/tests/test_convert.py b/tests/test_convert.py index d3ce8c7e..65ecbab9 100644 --- a/tests/test_convert.py +++ b/tests/test_convert.py @@ -45,6 +45,7 @@ "ie", "es_cat", "es_cl", + "es_cm", "es", "nz", "lt", @@ -83,6 +84,7 @@ def _input_files(converter, *names): "variant": "2025", "input_files": {f"{test_path}/es_cl/AVILA.zip": ["replaceme.zip"]}, }, + "es_cm": {"variant": "2024", **_input_files("es_cm", "es_cm_0.gpkg")}, "es_cat": _input_files("es_cat", "Cultius_DUN2023_GPKG.zip"), "es": {"input_files": {f"{test_path}/es/1501_ALAVA_cd_2025_20250105.gpkg.zip": ["*.gpkg"]}}, "lv": _input_files("lv", "1_100.xml"),