From 308e1e82aba67fed19d478153317392c04cc8268 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:46:52 +0000 Subject: [PATCH 1/7] The joining page opens with the promise the setup actually keeps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit repo's zero-config .env.example is on main (8c529c031), verified before writing about it: every DX_* and VITE_* line is present and empty, empty meaning the local default. That is the follow-up patch I held back rather than documenting a file whose contents had not landed. "Every line in it is optional" is a better opening than the list I had, because it IS the zero-config promise in five words — a reader who copies the file and fills in nothing has a working setup, which is exactly what the Driver asked the default to be. Also states what happens if the Mapbox token is left empty: the Mapbox-backed maps do not draw, and the keyless MapLibre provider is the alternative. My previous wording implied the token was required to get anywhere, which is not true and is discouraging at exactly the wrong moment. --- documentation/HOWTO-join-the-table.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/documentation/HOWTO-join-the-table.md b/documentation/HOWTO-join-the-table.md index af5a5c59a..c02e585c6 100644 --- a/documentation/HOWTO-join-the-table.md +++ b/documentation/HOWTO-join-the-table.md @@ -162,13 +162,18 @@ The only other thing here is `DX_PB_PORT`, which you set only if the log says po ## One more thing to set -The maps need a Mapbox token. It is the one credential you have to ask the team for: +Copy `.env.example` to `.env.local`. **Every line in it is optional** — empty means the default, which is +the all-local setup described above. You can start with none of them filled in. + +The one you will probably want is a Mapbox token, which is the single credential you have to ask the team +for: ``` VITE_MAPBOX_TOKEN= ``` -That, plus `DX_SYNC_REMOTE=origin` if you want it, is the whole of `.env.local`. +Leave it empty and the Mapbox-backed maps will not draw; you can also work with the keyless MapLibre +provider instead. --- From 304a4c1206eb9471f8139c7c4d731b59b439d49f Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:49:11 +0000 Subject: [PATCH 2/7] The 162 boundary licences, fetched rather than assumed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit regions-plugin's third-party register (their ATTRIBUTION landing) flagged this row as mine, and they were right: my own PROVENANCE.json already said "gbOpen passes through each country UPSTREAM licence — this collection is MIXED-LICENCE with per-country attribution duties" and then left `licences: {}` empty. The duty was NAMED and not DISCHARGED, which is the worst of both — it reads as handled. ★ THE NUMBERS ARE WHY THIS MATTERED, and I did not expect them to be this lopsided: 130 of 162 countries carry an ATTRIBUTION or SHARE-ALIKE duty 32 are duty-free (Public Domain 28 + CC0 4) 58 Open Data Commons ODbL · 44 CC BY 4.0 · 13 CC BY 3.0 IGO · 7 ShareAlike · 2 OGL v3 · … The repo is meant to be given away, so those duties travel with boundaries/world-adm0*.geojson. Shipping the file does not discharge them; naming the source does. ⚠ THE 7 SHARE-ALIKE COUNTRIES GET THEIR OWN FIELD (AGO GAB GEO GIN MMR NER TUR) because ShareAlike is a STRONGER duty than attribution — a derivative may have to be licensed alike — and a blanket "mostly CC BY" summary would hide exactly the ones that constrain a giveaway. METHOD: one query per country against the endpoint the file already documents, https://www.geoboundaries.org/api/current/gbOpen//ADM0/, throttled at ~3/s, recording boundaryLicense / licenseSource / boundaryID / boundarySource verbatim. 162 fetched, 0 failures. Spot-checked SDN against the live API after writing: byte-identical. No licence is inferred — regions' point that "guessing a licence is worse than recording none" is exactly right, and every value here came off the wire. ⚠ THE OLD "CCK: meta HTTP 404" GAP IS RESOLVED AS OBSOLETE, NOT FIXED, and the distinction is recorded in the file. CCK is not in world-adm0.geojson at all — 0 features, absent from the ISO list — so that 404 was a fetch for a country that never shipped. It took three checks to establish: `.get('CCK',{})` returned None and I read it as "null licence", then as "failed fetch", before asking whether the key was there at all. The gaps list is now genuinely empty rather than empty-because-unmeasured. --- .../my-upg-100-list/data/adm0/PROVENANCE.json | 1003 ++++++++++++++++- 1 file changed, 998 insertions(+), 5 deletions(-) diff --git a/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json b/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json index 2b84e5718..7a273f255 100644 --- a/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json +++ b/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json @@ -1,12 +1,1005 @@ { "generated": "2026-08-02T10:05:15.721Z", + "licences_fetched": "2026-09-28", "source": "geoBoundaries gbOpen", "endpoint": "https://www.geoboundaries.org/api/current/gbOpen///", "note": "gbOpen passes through each country UPSTREAM licence — this collection is MIXED-LICENCE with per-country attribution duties.", "adm0_features": 162, - "licences": {}, + "_duty": "130 of the 162 countries carry an ATTRIBUTION or SHARE-ALIKE duty that travels with any redistribution of boundaries/world-adm0*.geojson. Only 32 are duty-free (Public Domain or CC0). This matters because the repo is intended to be given away: CC BY obligations are not discharged by shipping the file, they are discharged by naming the source. See data/boundaries/ATTRIBUTION.", + "_shareAlike": "These 7 are ShareAlike, a STRONGER duty than attribution — a derivative may have to be licensed alike. Flagged separately because a blanket 'CC BY' summary would hide them: AGO, GAB, GEO, GIN, MMR, NER, TUR", + "summary": { + "countries": 162, + "duty_free": 32, + "attribution_or_sharealike": 130, + "by_licence": { + "Open Data Commons Open Database License 1.0": 58, + "Creative Commons Attribution 4.0 International (CC BY 4.0)": 33, + "Public Domain": 28, + "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)": 13, + "Creative Commons Attribution 4.0 (CC BY 4.0)": 11, + "Creative Commons Attribution-ShareAlike 2.0": 6, + "Creative Commons Attribution 2.5 Generic": 4, + "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication": 4, + "Open Government Licence v3.0": 2, + "Creative Commons Attribution 3.0 License": 2, + "Creative Commons Attribution-ShareAlike 3.0 Unported": 1 + } + }, + "licences": { + "ABW": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "ABW-ADM0-13396579", + "source": "Sentinel-2 10m LandCover" + }, + "AFG": { + "license": "Public Domain", + "licenseSource": "hub.arcgis.com/datasets/2b63527870ef416bacf83bcaf388685f_0?geometry=53.805%2C30.812%2C81.556%2C37.181", + "boundaryID": "AFG-ADM0-77858471", + "source": "geoBoundaries, ArcGIS Hub" + }, + "AGO": { + "license": "Creative Commons Attribution-ShareAlike 2.0", + "licenseSource": "osm-boundaries.com/Documentation", + "boundaryID": "AGO-ADM0-71192764", + "source": "Open Street Map" + }, + "ALB": { + "license": "Public Domain", + "licenseSource": "en.wikipedia.org/wiki/Outline_of_Albania#/media/File", + "boundaryID": "ALB-ADM0-44221866", + "source": "geoBoundaries, Wikipedia" + }, + "AND": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "AND-ADM0-62012451", + "source": "geoBoundaries, Wikimedia Commons" + }, + "ARE": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "ARE-ADM0-71949806", + "source": "geoBoundaries, Wikipedia" + }, + "ARM": { + "license": "Creative Commons Attribution 2.5 Generic", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "ARM-ADM0-83012948", + "source": "geoBoundaries, Wikimedia" + }, + "ASM": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "livingatlas.arcgis.com/landcover/", + "boundaryID": "ASM-ADM0-72969383", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "ATG": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "ATG-ADM0-82762519", + "source": "geoBoundaries, Wikimedia" + }, + "AZE": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "AZE-ADM0-83331535", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "BEN": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BEN-ADM0-84139743", + "source": "geoBoundaries, Wikimedia Commons" + }, + "BFA": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "datacatalog.worldbank.org/public-licenses#cc-by", + "boundaryID": "BFA-ADM0-72675738", + "source": "GeoBoundaries, World Bank" + }, + "BGD": { + "license": "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BGD-ADM0-71232402", + "source": "geoBoundaries, Wikimedia Commons" + }, + "BGR": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BGR-ADM0-55223397", + "source": "geoBoundaries, Wikimedia" + }, + "BHR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "BHR-ADM0-88433195", + "source": "OpenStreetMap, Wambacher" + }, + "BHS": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "BHS-ADM0-55510642", + "source": "Natural Earth" + }, + "BIH": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BIH-ADM0-45210373", + "source": "Wikimedia Commons" + }, + "BLM": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "BLM-ADM0-10240690", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "BLR": { + "license": "Open Government Licence v3.0", + "licenseSource": "www.nationalarchives.gov.uk/doc/open-government-licence/version/3/", + "boundaryID": "BLR-ADM0-10690812", + "source": "OpenDataSoft, WFPGeoNode" + }, + "BMU": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "BMU-ADM0-94457821", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "BOL": { + "license": "Public Domain", + "licenseSource": "geo.gob.bo/geonetwork/srv/spa/catalog.search#/metadata/aeeb85a9-23df-48d4-a4e5-dd19e8b206db", + "boundaryID": "BOL-ADM0-4181665", + "source": "GeoBolivia, Derived from ADM3 layer" + }, + "BRA": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/brazil-administrative-level-0-boundaries", + "boundaryID": "BRA-ADM0-88855331", + "source": "Instituto Brasileiro de Geografia e Estatística (IBGE)" + }, + "BRB": { + "license": "Creative Commons Attribution 2.5 Generic", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BRB-ADM0-86514546", + "source": "geoBoundaries, Wikimedia" + }, + "BRN": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BRN-ADM0-51999400", + "source": "Wikimedia Commons" + }, + "BTN": { + "license": "Creative Commons Attribution 3.0 License", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "BTN-ADM0-95260433", + "source": "geoBoundaries, Wikimedia Commons; credit to author 'Babbage'" + }, + "CAF": { + "license": "Creative Commons Attribution 2.5 Generic", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "CAF-ADM0-9860799", + "source": "geoBoundaries, Wikimedia" + }, + "CHN": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "CHN-ADM0-351020", + "source": "geoBoundaries, Wikimedia Commons" + }, + "CIV": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "CIV-ADM0-2848817", + "source": "Natural Earth" + }, + "CMR": { + "license": "Creative Commons Attribution 3.0 License", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "CMR-ADM0-59405334", + "source": "geoBoundaries, Wikimedia" + }, + "COD": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "COD-ADM0-95928705", + "source": "OpenStreetMap, Wambacher" + }, + "COG": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "COG-ADM0-69207274", + "source": "OpenStreetMap, Wambacher" + }, + "COK": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "COK-ADM0-34037180", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "COL": { + "license": "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "COL-ADM0-68469763", + "source": "Geoboundaries, Wikimedia" + }, + "COM": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "COM-ADM0-59328049", + "source": "OpenStreetMap, Wambacher" + }, + "CUB": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "CUB-ADM0-1007861", + "source": "OpenStreetMap, Wambacher" + }, + "CUW": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "CUW-ADM0-78966013", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "CYM": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "CYM-ADM0-85170139", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "CYP": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "CYP-ADM0-39009224", + "source": "OpenStreetMap, Wambacher" + }, + "CZE": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "creativecommons.org/licenses/by/4.0/", + "boundaryID": "CZE-ADM0-82561520", + "source": "Czech Office for Surveying" + }, + "DJI": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "DJI-ADM0-68745449", + "source": "Natural Earth" + }, + "DMA": { + "license": "Creative Commons Attribution 2.5 Generic", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "DMA-ADM0-26965486", + "source": "geoBoundaries, Wikimedia Commons" + }, + "DZA": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "DZA-ADM0-9297773", + "source": "OpenStreetMap, Wambacher" + }, + "ECU": { + "license": "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "ECU-ADM0-53374128", + "source": "geoBoundaries, Wikimedia Commons" + }, + "EGY": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "EGY-ADM0-61154384", + "source": "OpenStreetMap, Wambacher" + }, + "ERI": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "ERI-ADM0-35143426", + "source": "OpenStreetMap, Wambacher" + }, + "ESP": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "centrodedescargas.cnig.es/CentroDescargas/index.jsp#", + "boundaryID": "ESP-ADM0-43220588", + "source": "Instituto de Geografico Nacional" + }, + "ETH": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "africaopendata.org/dataset/ethiopia-shapefiles", + "boundaryID": "ETH-ADM0-96871213", + "source": "Open Africa, Code for Ethiopia" + }, + "FIN": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "FIN-ADM0-59408979", + "source": "OpenStreetMap, Wambacher" + }, + "FJI": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "FJI-ADM0-17002246", + "source": "geoBoundaries, OpenStreetMap" + }, + "FRO": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "FRO-ADM0-35448735", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "FSM": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "Data https", + "boundaryID": "FSM-ADM0-75748993", + "source": "OCHA ROP, Federated States of Micronesia Division of Statistics, 2010 Census of Population and Housing and Secretariat of the Pacific Community, Statistics for Development Division" + }, + "GAB": { + "license": "Creative Commons Attribution-ShareAlike 3.0 Unported", + "licenseSource": "en.wikipedia.org/wiki/Subdivisions_of_Gabon#/media/File", + "boundaryID": "GAB-ADM0-25889322", + "source": "geoBoundaries, Wikipedia" + }, + "GEO": { + "license": "Creative Commons Attribution-ShareAlike 2.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "GEO-ADM0-33476915", + "source": "OpenStreetMap, Wambacher" + }, + "GGY": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "GGY-ADM0-78196341", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "GHA": { + "license": "Public Domain", + "licenseSource": "purl.stanford.edu/rh271yg5585", + "boundaryID": "GHA-ADM0-71095829", + "source": "Stanford Digital Repository" + }, + "GIN": { + "license": "Creative Commons Attribution-ShareAlike 2.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "GIN-ADM0-15034222", + "source": "OSM Boundaries" + }, + "GLP": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "GLP-ADM0-43335349", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "GMB": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "datacatalog.worldbank.org/search/dataset/0038034", + "boundaryID": "GMB-ADM0-76403400", + "source": "geoBoundaries, Knippenberg, Erwin, & Moritz, Meyer. “The Hidden Potential of Mobile Phone Data Insights on COVID-19 in the Gambia.” The World Bank Data Catalog" + }, + "GNB": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "GNB-ADM0-84417234", + "source": "OpenStreetMap, Wambacher" + }, + "GNQ": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "GNQ-ADM0-36962785", + "source": "OpenStreetMap, Wambacher" + }, + "GRC": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "data.humdata.org/dataset/gree", + "boundaryID": "GRC-ADM0-45001669", + "source": "EuroGeoGraphics, Regional IM Working Group - Europe" + }, + "GRD": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "GRD-ADM0-78934639", + "source": "OpenStreetMap, Wambacher" + }, + "GUF": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "GUF-ADM0-11180146", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / erase adm0 overlap / processed by IMB" + }, + "GUM": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "GUM-ADM0-54299874", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "GUY": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "GUY-ADM0-53426202", + "source": "geoBoundaries, Wikimedia Commons" + }, + "IDN": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "IDN-ADM0-11942859", + "source": "OpenStreetMap, Wambacher" + }, + "IND": { + "license": "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", + "licenseSource": "commons.wikimedia.org/wiki/Category", + "boundaryID": "IND-ADM0-67634026", + "source": "geoBoundaries, Wikimedia Commons" + }, + "IRN": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "IRN-ADM0-36920063", + "source": "Natural Earth" + }, + "IRQ": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "IRQ-ADM0-29142881", + "source": "Natural Earth" + }, + "ISL": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "gatt.lmi.is/geonetwork/srv/eng/catalog.search#/metadata/A1919501-BA1F-4AEE-ABB8-00A3217258AA", + "boundaryID": "ISL-ADM0-46540832", + "source": "Lýsigagnagátt" + }, + "ISR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "ISR-ADM0-37499698", + "source": "OpenStreetMap, Wambacher" + }, + "JAM": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "JAM-ADM0-78483674", + "source": "geoBoundaries, Wikimedia Commons" + }, + "JOR": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "en.wikipedia.org/wiki/Geography_of_Jordan#/media/File", + "boundaryID": "JOR-ADM0-64752131", + "source": "geoBoundaries, Wikipedia" + }, + "JPN": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "nlftp.mlit.go.jp/ksj/other/agreement.html#agree-01", + "boundaryID": "JPN-ADM0-22093344", + "source": "Ministry of Land, Infrastructure, Transport and Tourism National Land Numerical Information Download Site" + }, + "KAZ": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "KAZ-ADM0-12445969", + "source": "OpenStreetMap, Wambacher" + }, + "KEN": { + "license": "Public Domain", + "licenseSource": "rcmrd.africageoportal.com/datasets/africageoportal", + "boundaryID": "KEN-ADM0-21065076", + "source": "RCMRD GeoPortal, geoBoundaries" + }, + "KGZ": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "KGZ-ADM0-96190653", + "source": "OpenStreetMap, Wambacher" + }, + "KHM": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "KHM-ADM0-94605694", + "source": "OpenStreetMap, Wambacher" + }, + "KIR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "KIR-ADM0-77750713", + "source": "OpenStreetMap, Wambacher" + }, + "KWT": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "KWT-ADM0-12940379", + "source": "OpenStreetMap, Wambacher" + }, + "LAO": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "LAO-ADM0-69401296", + "source": "OpenStreetMap, Wambacher" + }, + "LBN": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "LBN-ADM0-18678258", + "source": "geoBoundaries, Wikimedia Commons" + }, + "LBR": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/liberia-admin-level-2-boundaries", + "boundaryID": "LBR-ADM0-59954213", + "source": "UNMIL, OCHA ROWCA" + }, + "LBY": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "LBY-ADM0-86523102", + "source": "Natural Earth" + }, + "LCA": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "LCA-ADM0-98054014", + "source": "geoBoundaries, Wikimedia Commons" + }, + "LIE": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "LIE-ADM0-60073359", + "source": "OpenStreetMap, Wambacher" + }, + "LKA": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "LKA-ADM0-54457186", + "source": "OpenStreetMap, Wambacher" + }, + "LUX": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "LUX-ADM0-64508393", + "source": "OpenStreetMap, Wambacher" + }, + "MAR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MAR-ADM0-5654995", + "source": "OpenStreetMap, Wambacher" + }, + "MDV": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "MDV-ADM0-21348113", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "MHL": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MHL-ADM0-89087692", + "source": "OpenStreetMap, Wambacher" + }, + "MLI": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "data.humdata.org/dataset/mali-admin-boundaries-level-1-2-and-3-including-2017-population-desagregated-by-sexe", + "boundaryID": "MLI-ADM0-8439793", + "source": "DNCT - Direction Nationale des Colelctivités Territorielles, DNP - Direction Nationale de la Population, United Nations Office for the Coordination of Humanitarian Affairs, Mali" + }, + "MLT": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "MLT-ADM0-38034468", + "source": "geoBoundaries, Wikimedia Commons" + }, + "MMR": { + "license": "Creative Commons Attribution-ShareAlike 2.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MMR-ADM0-35516675", + "source": "OpenStreetMap" + }, + "MNE": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MNE-ADM0-69169217", + "source": "OpenStreetMap, Wambacher" + }, + "MNG": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MNG-ADM0-74336971", + "source": "OpenStreetMap, Wambacher" + }, + "MNP": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "MNP-ADM0-30081990", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "MOZ": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MOZ-ADM0-74581448", + "source": "OpenStreetMap, Wambacher" + }, + "MRT": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/mauritania-administrative-boundaries", + "boundaryID": "MRT-ADM0-45414712", + "source": "World Food Programme and OCHA" + }, + "MSR": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "MSR-ADM0-1980395", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "MUS": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MUS-ADM0-6221475", + "source": "OpenStreetMap, Wambachers" + }, + "MWI": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MWI-ADM0-68747529", + "source": "OpenStreetMap, Wambacher" + }, + "MYS": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "MYS-ADM0-87038898", + "source": "OpenStreetMap, Wambacher" + }, + "MYT": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "MYT-ADM0-23144892", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "NAM": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "NAM-ADM0-72404144", + "source": "geoBoundaries, Wikimedia" + }, + "NCL": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "NCL-ADM0-60653274", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "NER": { + "license": "Creative Commons Attribution-ShareAlike 2.0", + "licenseSource": "mapcruzin.com/free-niger-country-city-place-gis-shapefiles.htm", + "boundaryID": "NER-ADM0-22259449", + "source": "geoBoundaries, Open Street Map, Converted Lines into Polygon Layer" + }, + "NGA": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "data.grid3.org/datasets/grid3-nigeria-state-boundaries/explore?location=8.992006%2C8.685290%2C6.82", + "boundaryID": "NGA-ADM0-39225661", + "source": "GRID3" + }, + "NIU": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "NIU-ADM0-98221342", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "NPL": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "opendatanepal.com/dataset/new-political-and-administrative-boundaries-shapefile-of-nepal", + "boundaryID": "NPL-ADM0-63295607", + "source": "Geoboundaries, Open Data Nepal" + }, + "NZL": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "www.stats.govt.nz/about_us/about-this-site/copyright-terms-of-use.aspx", + "boundaryID": "NZL-ADM0-90488144", + "source": "NZ Stats" + }, + "OMN": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "OMN-ADM0-13493377", + "source": "OpenStreetMap, Wambacher" + }, + "PAK": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "PAK-ADM0-80972501", + "source": "OpenStreetMap, Wambacher" + }, + "PAN": { + "license": "Public Domain", + "licenseSource": "www.cia.gov/the-world-factbook/countries/panama/map", + "boundaryID": "PAN-ADM0-86535646", + "source": "The World Factbook - CIA" + }, + "PER": { + "license": "Public Domain", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "PER-ADM0-96739428", + "source": "Wikimedia Commons" + }, + "PHL": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "Data https", + "boundaryID": "PHL-ADM0-24100683", + "source": "OCHA Philippines, National Mapping and Resource Information Authority" + }, + "PLW": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "PLW-ADM0-91809328", + "source": "OpenStreetMap, Wambacher" + }, + "PNG": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "PNG-ADM0-50406891", + "source": "OpenStreetMap, Wambacher" + }, + "PRK": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/dpr-korea-administrative-boundaries", + "boundaryID": "PRK-ADM0-24118357", + "source": "World Food Programme, OCHA ROAP" + }, + "PRY": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "twitter.com/WMgeoLab/status/1179001467669078017/photo/1", + "boundaryID": "PRY-ADM0-89047665", + "source": "Direcion General de Estadica, Encuestas y Censos" + }, + "PSE": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "PSE-ADM0-62339095", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / erase adm0 overlap / processed by IMB" + }, + "PYF": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "PYF-ADM0-99418368", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "QAT": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "wiki.openstreetmap.org/wiki/Legal_FAQ#What_is_the_license_for_OpenStreetMap.27s_geodata.3F", + "boundaryID": "QAT-ADM0-15585745", + "source": "Open Street Map, Wambacher (https//wambachers-osm.website/boundaries/)" + }, + "RUS": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "RUS-ADM0-89588193", + "source": "geoBoundaries, OpenStreetMap" + }, + "SAU": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "SAU-ADM0-44563762", + "source": "OpenStreetMap, Wambacher" + }, + "SDN": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/sudan-administrative-boundaries-levels-0-2", + "boundaryID": "SDN-ADM0-86632940", + "source": "Information Management Working Group (IMWG), OCHA ROSEA" + }, + "SEN": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/senegal-administrative-boundaries", + "boundaryID": "SEN-ADM0-83371676", + "source": "Government of Senegal, OCHA ROWCA" + }, + "SHN": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "SHN-ADM0-31036641", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "SLB": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "SLB-ADM0-12472743", + "source": "Natural Earth" + }, + "SLE": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "africaopendata.org/dataset/sierra-leone-admin-level-4-boundaries", + "boundaryID": "SLE-ADM0-89611731", + "source": "openAfrica, geoBoundaries" + }, + "SMR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "SMR-ADM0-7152903", + "source": "OpenStreetMap, Wambacher" + }, + "SOM": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/somalia-administrative-boundaries", + "boundaryID": "SOM-ADM0-1309446", + "source": "United National Development Programme (UNDP), OCHA Somalia" + }, + "SSD": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/about/license", + "boundaryID": "SSD-ADM0-54869323", + "source": "South Sudan Information Management Working Group (IMWG), National Bureau of Statistics (NBS), and OCHA, OCHA South Sudan" + }, + "STP": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "STP-ADM0-85558007", + "source": "OpenStreetMap, Wambacher" + }, + "SUR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "SUR-ADM0-90644646", + "source": "OpenStreetMap, Wambacher" + }, + "SWE": { + "license": "Open Government Licence v3.0", + "licenseSource": "www.nationalarchives.gov.uk/doc/open-government-licence/version/3/", + "boundaryID": "SWE-ADM0-32631220", + "source": "Open Data Soft, World Food Programme" + }, + "SWZ": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "SWZ-ADM0-58888499", + "source": "OpenStreetMap, Wambacher" + }, + "SYR": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "SYR-ADM0-73488105", + "source": "OpenStreetMap, Wambacher" + }, + "TCA": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "TCA-ADM0-98428071", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "TCD": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "TCD-ADM0-68238479", + "source": "OpenStreetMap, Wambacher" + }, + "TGO": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "TGO-ADM0-75638443", + "source": "OpenStreetMap, Wambacher" + }, + "THA": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "THA-ADM0-76911100", + "source": "OpenStreetMap, Wambacher" + }, + "TJK": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "TJK-ADM0-77803701", + "source": "OpenStreetMap, Wambacher" + }, + "TON": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "TON-ADM0-98642404", + "source": "OpenStreetMap, Wambacher" + }, + "TUN": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "TUN-ADM0-74400859", + "source": "OpenStreetMap, Wambacher" + }, + "TUR": { + "license": "Creative Commons Attribution-ShareAlike 2.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "TUR-ADM0-4540299", + "source": "Open Street Map" + }, + "TZA": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "TZA-ADM0-36199320", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "UGA": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "UGA-ADM0-62106908", + "source": "OpenStreetMap, Wambacher" + }, + "USA": { + "license": "Public Domain", + "licenseSource": "www.census.gov/programs-surveys/geography/technical-documentation/naming-convention/cartographic-boundary-file.html", + "boundaryID": "USA-ADM0-2327393", + "source": "United States Census Bureau, MAF/TIGER Database" + }, + "UZB": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "UZB-ADM0-45261887", + "source": "OpenStreetMap, Wambacher" + }, + "VCT": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "VCT-ADM0-27863697", + "source": "OpenStreetMap, Wambacher" + }, + "VEN": { + "license": "Public Domain", + "licenseSource": "www.naturalearthdata.com/about/terms-of-use/", + "boundaryID": "VEN-ADM0-16608129", + "source": "Natural Earth" + }, + "VGB": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "VGB-ADM0-91551643", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "VIR": { + "license": "Creative Commons Attribution 4.0 (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "VIR-ADM0-52830179", + "source": "Sentinel-2 10-Meter Land Use/LandCover" + }, + "VNM": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "commons.wikimedia.org/wiki/File", + "boundaryID": "VNM-ADM0-46766057", + "source": "geoBoundaries, Wikipedia" + }, + "VUT": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "VUT-ADM0-10589628", + "source": "OpenStreetMap, Wambacher" + }, + "WLF": { + "license": "Creative Commons Attribution 4.0 International (CC BY 4.0)", + "licenseSource": "sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "boundaryID": "WLF-ADM0-48161578", + "source": "raster2polygon from Sentinel-2 10m Land Cover where Image Year = 2021 / exclude gridcode = 1 (water) / dissolve / processed by IMB" + }, + "WSM": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "WSM-ADM0-28090321", + "source": "OpenStreetMap, Wambacher" + }, + "YEM": { + "license": "Open Data Commons Open Database License 1.0", + "licenseSource": "www.openstreetmap.org/copyright", + "boundaryID": "YEM-ADM0-85191696", + "source": "OpenStreetMap, Wambacher" + }, + "ZAF": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/south-africa-admin-level-1-boundaries", + "boundaryID": "ZAF-ADM0-27424455", + "source": "OCHA ROSEA, South African Municipal Demarcation Board" + }, + "ZMB": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.grid3.org/datasets/GRID3", + "boundaryID": "ZMB-ADM0-29467570", + "source": "Disaster Management and Mitigation Unit (DMMU) Zambia, OCHA ROSEA" + }, + "ZWE": { + "license": "Creative Commons Attribution 3.0 Intergovernmental Organisations (CC BY 3.0 IGO)", + "licenseSource": "data.humdata.org/dataset/zimbabwe-administrative-levels-0-3-boundaries", + "boundaryID": "ZWE-ADM0-69731989", + "source": "Zimbabwe National Statistics Agency (ZIMSTAT www.zimstat.co.zw) Central Statistics Office, OCHA ROSEA" + } + }, "unverified_provenance": [], - "gaps": [ - "CCK: meta HTTP 404" - ] -} \ No newline at end of file + "gaps": [], + "_gaps_note": "The previous record listed 'CCK: meta HTTP 404'. RESOLVED AS OBSOLETE, not fixed: CCK is not in world-adm0.geojson at all (0 features, absent from the ISO list), so the 404 was a fetch for a country that never shipped. All 162 countries that ARE in the file returned a licence." +} From e1221a503d7ba478ba848260635ad95c02923030 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:49:44 +0000 Subject: [PATCH 3/7] Gospel x Internet: an always-on Glottolog credit; old links with map state still open the map --- .../scripts/check-gospel-internet-model.mjs | 7 +++++++ .../scripts/check-gospel-internet-render.mjs | 1 + .../gospel-internet/src/components/GiTree.vue | 6 ++++++ plugin-designs/gospel-internet/src/model.js | 11 +++++++++-- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/plugin-designs/gospel-internet/scripts/check-gospel-internet-model.mjs b/plugin-designs/gospel-internet/scripts/check-gospel-internet-model.mjs index ba2a831cf..4ad29d8a5 100644 --- a/plugin-designs/gospel-internet/scripts/check-gospel-internet-model.mjs +++ b/plugin-designs/gospel-internet/scripts/check-gospel-internet-model.mjs @@ -88,6 +88,13 @@ ok(M.parseQuery('?view=nonsense').view === 'board', 'an unknown view falls back // the tree is the default panel: a bare URL names no panel, only the map is written, both are read back ok(M.parseQuery('').panel === '' && M.parseQuery('?panel=map').panel === 'map' && M.parseQuery('?panel=tree').panel === 'tree' && M.buildQuery({ panel: 'map' }) === 'panel=map' && M.buildQuery({ panel: 'tree' }) === '', 'the tree is the default panel; ?panel=map restores the map') +// an OLD map link (map state, no ?panel=) still opens the map; a tree link with map state says panel=tree +ok(['?group=abai-sungai', '?groups=abai-sungai,hadrami-arabs', '?country=IND', '?province=IN-BR', '?view=province'].every((s) => M.parseQuery(s).panel === 'map') + && M.parseQuery('?access=none&band=yes').panel === '' && M.parseQuery('?codes=abf').panel === '' && M.parseQuery('?country=IND&panel=tree').panel === 'tree', + 'old links with map state and no panel open the map; a bare or map-free link opens the tree') +const treeBack = M.buildQuery({ panel: 'tree', keep: '?country=IND', filters: false }) +ok(M.parseQuery('?' + treeBack).panel === 'tree' && M.parseQuery('?' + M.buildQuery({ panel: 'tree', group: 'abai-sungai' })).panel === 'tree', + 'a tree view with map state round-trips to the tree') // embed-contract parity with Gospel Resources: ?groups= (peoples by slug) and ?codes= / ?code= (languages) const pg = M.parseQuery('?groups=abai-sungai,hadrami-arabs&codes=abf,ayh') ok(pg.groups.length === 2 && Array.isArray(pg.filters.language) && pg.filters.language.join('|') === 'abf|ayh', 'parses ?groups= (slugs) and ?codes= (languages), comma-separated as Gospel Resources writes them') diff --git a/plugin-designs/gospel-internet/scripts/check-gospel-internet-render.mjs b/plugin-designs/gospel-internet/scripts/check-gospel-internet-render.mjs index 5a8ae0ef9..32b201118 100644 --- a/plugin-designs/gospel-internet/scripts/check-gospel-internet-render.mjs +++ b/plugin-designs/gospel-internet/scripts/check-gospel-internet-render.mjs @@ -88,6 +88,7 @@ try { const shut = await render('en', {}) ok(!/data-tree-legend|class="gim-legend"/.test(shut.html) && /class="gtr-min"/.test(shut.html) && /class="gim-legend-min"/.test(shut.html), 'en: with no knob, the tree and map legends start collapsed') + ok(/data-tree-credit[^>]*>[\s\S]*?Glottolog[\s\S]*?CC BY 4\.0/.test(shut.html), 'en: the Glottolog CC BY credit is on screen with the legend collapsed') ok(en.errors.length === 0, `en: every panel rendered with no error (${en.errors.length}${en.errors[0] ? ': ' + en.errors[0].slice(0, 160) : ''})`) for (const [name, re] of [['GiFacetRail', /data-facet="access"/], ['GiGrid', /data-grid-total/], ['GiCharts', /data-region="charts"/], ['GiTree', /data-tree-legend[\s\S]*data-tree-poster/], ['GiResources', /data-resources-total/], ['GiMap', /data-region="map"/]]) ok(re.test(en.html), `en: ${name} rendered its region`) diff --git a/plugin-designs/gospel-internet/src/components/GiTree.vue b/plugin-designs/gospel-internet/src/components/GiTree.vue index 936b93bf7..da3d50a7a 100644 --- a/plugin-designs/gospel-internet/src/components/GiTree.vue +++ b/plugin-designs/gospel-internet/src/components/GiTree.vue @@ -328,6 +328,10 @@ useShadowStyles( '.gtr-row .gtr-dot{margin-top:3px}' + '.gtr-levels{margin:6px 0 2px;font-size:11.5px}' + '.gtr-note{font-size:10.5px;color:#6d766e;margin-top:4px}' + + // ALWAYS ON, like a map's attribution control: the CC BY credit never hides behind the collapsed legend + '.gtr-credit{position:absolute;z-index:3;inset-block-end:0;inset-inline-end:0;padding:2px 6px;font:11px/1.45 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;' + + 'background:rgba(255,255,255,.82);color:#3a4048;border-start-start-radius:3px}' + + '.gtr-credit a{color:#2a5d8f;text-decoration:none}' + '.gtr-poster{display:flex;align-items:center;gap:6px;margin-top:6px;padding-top:6px;border-top:1px solid #e6e8e3;font-weight:600}' + '.gtr-poster select,.gtr-poster button{font:inherit;font-weight:400;font-size:12px;border:1px solid #d1d4cd;background:#fff;color:#3b463d;border-radius:6px;min-height:26px;padding:2px 8px;cursor:pointer}' + '.gtr-poster button:focus-visible,.gtr-poster select:focus-visible{outline:2px solid #92b195;outline-offset:1px}' + @@ -385,5 +389,7 @@ useShadowStyles(
{{ T('gospelInternet.tree.sources', 'Tree: Glottolog (CC BY 4.0). Resources: eBible, Faith Comes By Hearing, Scripture Earth, PNG.Bible, JESUS Film, Global Recordings and others, keyed by ISO 639-3.') }} {{ citation }}
+ + diff --git a/plugin-designs/gospel-internet/src/model.js b/plugin-designs/gospel-internet/src/model.js index 0d3ee52c7..0ac7e35fe 100644 --- a/plugin-designs/gospel-internet/src/model.js +++ b/plugin-designs/gospel-internet/src/model.js @@ -86,6 +86,12 @@ export const VIEWS = ['board', 'zero', 'province', 'platforms'] * The published names are kept so links already shared keep restoring. */ export const SHARE_FACETS = Object.fromEntries(Object.entries(URL_KEYS)) +// MAP STATE: what a link written while the map was the default carries and only the map shows (an open or +// selected people group's pin, a country or province, the province view). Such a link with no ?panel= opens +// the MAP, so old map links keep working; a bare link opens the tree (dx-shepherd ENDTOKEN-GOINT-ATTR). +const MAP_STATE = ['group', 'groups', 'country', 'province'] +export const hasMapState = (q) => MAP_STATE.some((k) => q.get(k)) || q.get('view') === 'province' + /** Parse `?view=&access=…&group=` into { view, filters, group }. Unknown views fall back to board. */ export function parseQuery(search) { const q = new URLSearchParams(search || '') @@ -105,7 +111,7 @@ export function parseQuery(search) { if (codes.length && !filters.language) filters.language = codes.length === 1 ? codes[0] : codes const groups = list('groups').filter((s) => /^[a-z0-9-]+$/.test(s)) // '' = not in the URL: the board opens on its default (the language tree, the Driver 2026-09-28) - const panel = ['tree', 'map'].includes(q.get('panel')) ? q.get('panel') : '' + const panel = ['tree', 'map'].includes(q.get('panel')) ? q.get('panel') : hasMapState(q) ? 'map' : '' const tree = /^[a-z0-9-]{3,40}$/.test(q.get('tree') || '') ? q.get('tree') : '' // A tree node narrows by LANGUAGE (its ISO codes); the URL carries the node, not the code list. if (tree) delete filters.language @@ -119,7 +125,6 @@ export function buildQuery({ view, filterSet, group, keep, panel, tree, filters // delete nor write them, so the two writers never fight over one address bar for (const name of [...(filters ? Object.keys(URL_KEYS) : []), 'view', 'group', 'panel', 'tree']) q.delete(name) if (view && view !== 'board') q.set('view', view) - if (panel === 'map') q.set('panel', 'map') // the tree is the default, so only the map is written if (tree) q.set('tree', tree) if (filters) for (const [name, key] of Object.entries(URL_KEYS)) { if (tree && key === 'language') continue @@ -128,6 +133,8 @@ export function buildQuery({ view, filterSet, group, keep, panel, tree, filters q.set(name, Array.isArray(v) ? v.join('|') : String(v)) } if (group) q.set('group', group) + // the tree is the default, so it is written only where map state would otherwise open the map + if (panel === 'map' || (panel === 'tree' && hasMapState(q))) q.set('panel', panel) return q.toString() } From 2961b3ad22bd06bd11b880d9ace8d7d95ae903bd Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:50:36 +0000 Subject: [PATCH 4/7] Rebuild gospel-internet: the always-on tree credit and the map-state link rule --- public/dx-maps/doxa-maps-spa/manifest.json | 4 +- .../gospel-internet/board/board/index.html | 2 +- .../dx-maps/gospel-internet/board/index.html | 2 +- .../board/india-china/index.html | 2 +- .../board/language-tree/index.html | 2 +- .../board/platforms/index.html | 2 +- .../board/project-700/index.html | 2 +- .../gospel-internet/board/zero/index.html | 2 +- .../gospel-internet/gospel-internet.js | 46 +++++++++---------- public/dx-maps/manifest.json | 4 +- 10 files changed, 34 insertions(+), 34 deletions(-) diff --git a/public/dx-maps/doxa-maps-spa/manifest.json b/public/dx-maps/doxa-maps-spa/manifest.json index ee8f2be8c..4bfc8bea0 100644 --- a/public/dx-maps/doxa-maps-spa/manifest.json +++ b/public/dx-maps/doxa-maps-spa/manifest.json @@ -604,7 +604,7 @@ "bundle": "gospel-internet", "scriptUrl": "./gospel-internet/gospel-internet.js", "output": "dx-maps/gospel-internet/gospel-internet.js", - "integrity": "sha384-y/ti76gIc9CO7C0Q74z8teaxCKsB5xbb5sk+aDVBgZLecERoSaFhc+brdokaOTIb", + "integrity": "sha384-qdNXX4aWhgMvTym3O4xUzPisrdct3miCaawTtbiRDztj/iJyMddyGv7yA7mPtAzn", "elements": [ "gospel-internet-board" ], @@ -623,7 +623,7 @@ "scriptUrl": "./gospel-internet/gospel-internet.js", "embed": { "iframe": "", - "script": "\n\n\n\n" + "script": "\n\n\n\n" }, "instances": [ { diff --git a/public/dx-maps/gospel-internet/board/board/index.html b/public/dx-maps/gospel-internet/board/board/index.html index a071cfa76..1142d2b6e 100644 --- a/public/dx-maps/gospel-internet/board/board/index.html +++ b/public/dx-maps/gospel-internet/board/board/index.html @@ -36,7 +36,7 @@ - + - + - + - + - + - + - + \n\n" + "script": "\n\n\n\n" }, "instances": [ { From 66d4ebd72e36a5c784a3d43c045f6f57a0726ef1 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:51:24 +0000 Subject: [PATCH 5/7] The share-alike field should have held 65, not 7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit regions-plugin challenged the record I had just written, and they were right. I gave the 7 explicitly-named ShareAlike countries their own field because share-alike is a stronger duty than attribution — and by that same reasoning the field should hold 65. Open Data Commons ODbL 1.0 is itself a SHARE-ALIKE licence for databases: alongside attribution it requires a Derivative Database be offered under ODbL, and it carries a keep-open provision. So my 58 ODbL countries are the same class as my 7, and separating them buried exactly what the field existed to surface. ★ WHAT CONVINCED ME WAS THIS REPO, NOT THE LICENCE TEXT. regions pointed at library/scripts/posters/data/README.md:36-50, and I read it: Natural Earth's 1:10m ROADS were requested and DELIBERATELY NOT SHIPPED because of an ODbL attribution obligation. Someone here already dropped a whole dataset over this class of duty. An argument from the licence would have been my reading of a clause; an argument from a decision already taken in this tree is evidence. THE RECORD NOW SPLITS THREE WAYS, with the iso3 lists so each is checkable: 32 duty-free (28 Public Domain + 4 CC0) 65 attribution-only 65 SHARE-ALIKE CLASS (58 ODbL 1.0 + 7 explicit ShareAlike) That is a materially different picture from "130 need attribution, 7 are stronger": it says HALF the duty-bearing countries may constrain how a derivative is licensed, not merely how it is credited. ⚠ AND IT IS EXPLICITLY NOT A LEGAL CONCLUSION. Whether a redistributed boundary file is a "Derivative Database" under ODbL is precisely the clause a giveaway needs a real answer on, and neither regions-plugin nor I is qualified to give it. The record says so in _duty_classes._open and the question goes up with the other licensing items — visible rather than settled by omission, which is the same failure the empty `licences: {}` was. The table stays here as the single source of truth; regions' data/boundaries/ATTRIBUTION references it by path rather than copying it, because one table in two places drifts. --- .../my-upg-100-list/data/adm0/PROVENANCE.json | 193 +++++++++++++++++- 1 file changed, 191 insertions(+), 2 deletions(-) diff --git a/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json b/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json index 7a273f255..bff75663b 100644 --- a/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json +++ b/plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json @@ -5,8 +5,197 @@ "endpoint": "https://www.geoboundaries.org/api/current/gbOpen///", "note": "gbOpen passes through each country UPSTREAM licence — this collection is MIXED-LICENCE with per-country attribution duties.", "adm0_features": 162, - "_duty": "130 of the 162 countries carry an ATTRIBUTION or SHARE-ALIKE duty that travels with any redistribution of boundaries/world-adm0*.geojson. Only 32 are duty-free (Public Domain or CC0). This matters because the repo is intended to be given away: CC BY obligations are not discharged by shipping the file, they are discharged by naming the source. See data/boundaries/ATTRIBUTION.", - "_shareAlike": "These 7 are ShareAlike, a STRONGER duty than attribution — a derivative may have to be licensed alike. Flagged separately because a blanket 'CC BY' summary would hide them: AGO, GAB, GEO, GIN, MMR, NER, TUR", + "_duty": "130 of the 162 countries carry a duty that travels with any redistribution of boundaries/world-adm0*.geojson; only 32 are duty-free. The 130 split TWO ways and the split matters more than the total: 65 are attribution-only, and 65 are SHARE-ALIKE CLASS (58 ODbL + 7 explicit ShareAlike), which can constrain how a derivative is licensed rather than merely how it is credited. See _duty_classes. This matters because the repo is intended to be given away: these obligations are not discharged by shipping the file. See data/boundaries/ATTRIBUTION, which references this table by path.", + "_duty_classes": { + "_why": "THREE CLASSES, NOT TWO — corrected 2026-09-28 after regions-plugin's challenge, which was right. I first gave only the 7 explicitly-named ShareAlike countries their own field on the reasoning that share-alike is a stronger duty than attribution. By that same reasoning the field should hold 65: Open Data Commons ODbL 1.0 is itself a SHARE-ALIKE licence for databases — alongside attribution it requires a Derivative Database be offered under ODbL, and it has a keep-open provision. Separating 7 from 58 buried exactly the thing the field existed to surface.", + "_precedent": "THIS REPO ALREADY TREATS ODbL AS CONSEQUENTIAL, which is the evidence rather than my reading of the licence: library/scripts/posters/data/README.md:36-50 records that Natural Earth's 1:10m ROADS were requested and DELIBERATELY NOT SHIPPED because of an ODbL attribution obligation. Someone here dropped a dataset over this class of duty.", + "_open": "NOT A LEGAL CONCLUSION. Whether a redistributed boundary file is a 'Derivative Database' under ODbL is exactly the clause a giveaway needs a real answer on, and neither regions-plugin nor I is qualified to give it. Recorded here, and raised with the licensing items, so the question is visible rather than settled by omission.", + "duty_free": { + "count": 32, + "iso3": [ + "AFG", + "ALB", + "AND", + "ARE", + "ATG", + "BEN", + "BGD", + "BGR", + "BHS", + "BIH", + "BOL", + "BRN", + "CHN", + "CIV", + "COL", + "DJI", + "ECU", + "GHA", + "IND", + "IRN", + "IRQ", + "JAM", + "KEN", + "LBN", + "LBY", + "LCA", + "MLT", + "PAN", + "PER", + "SLB", + "USA", + "VEN" + ] + }, + "attribution_only": { + "count": 65, + "iso3": [ + "ABW", + "ARM", + "ASM", + "AZE", + "BFA", + "BLM", + "BLR", + "BMU", + "BRA", + "BRB", + "BTN", + "CAF", + "CMR", + "COK", + "CUW", + "CYM", + "CZE", + "DMA", + "ESP", + "FRO", + "FSM", + "GGY", + "GLP", + "GMB", + "GRC", + "GUF", + "GUM", + "GUY", + "ISL", + "JOR", + "JPN", + "LBR", + "MDV", + "MLI", + "MNP", + "MRT", + "MSR", + "MYT", + "NAM", + "NCL", + "NGA", + "NIU", + "NPL", + "NZL", + "PHL", + "PRK", + "PRY", + "PSE", + "PYF", + "SDN", + "SEN", + "SHN", + "SLE", + "SOM", + "SSD", + "SWE", + "TCA", + "TZA", + "VGB", + "VIR", + "VNM", + "WLF", + "ZAF", + "ZMB", + "ZWE" + ] + }, + "share_alike_class": { + "count": 65, + "odbl_1_0": { + "count": 58, + "iso3": [ + "BHR", + "COD", + "COG", + "COM", + "CUB", + "CYP", + "DZA", + "EGY", + "ERI", + "ETH", + "FIN", + "FJI", + "GNB", + "GNQ", + "GRD", + "IDN", + "ISR", + "KAZ", + "KGZ", + "KHM", + "KIR", + "KWT", + "LAO", + "LIE", + "LKA", + "LUX", + "MAR", + "MHL", + "MNE", + "MNG", + "MOZ", + "MUS", + "MWI", + "MYS", + "OMN", + "PAK", + "PLW", + "PNG", + "QAT", + "RUS", + "SAU", + "SMR", + "STP", + "SUR", + "SWZ", + "SYR", + "TCD", + "TGO", + "THA", + "TJK", + "TON", + "TUN", + "UGA", + "UZB", + "VCT", + "VUT", + "WSM", + "YEM" + ] + }, + "explicit_sharealike": { + "count": 7, + "iso3": [ + "AGO", + "GAB", + "GEO", + "GIN", + "MMR", + "NER", + "TUR" + ] + } + } + }, "summary": { "countries": 162, "duty_free": 32, From 2a692021c0d9fce3c99f49b5309bb17a3f7feff6 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:42:41 +0000 Subject: [PATCH 6/7] Boundary attribution travels with the boundaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The India ADM1 boundary is Creative Commons Attribution (CC BY 2.5 IN, sourced from DataMeet and the Election Commission of India), so the credit has to reach whoever receives the data. It did not: 6.1 MB of boundary GeoJSON shipped with no human-readable attribution, and a sidecar for one file of eight. data/boundaries/ATTRIBUTION now ships beside the data. Every licence value in it is verbatim from the geoBoundaries API, queried per boundary -- CC BY 2.5 IN for India, Public Domain for China. No licence wording is ours. ★ IT TOOK TWO ALLOWLIST EDITS, and the first one silently did nothing. The boundary staging is TWO-STAGE: a pair list gathers into the build pool, and a separate path list decides what reaches the tree. I added the file to the pair list, rebuilt, and it still did not ship. An entry in one stage of a two-stage pipeline is not an entry. WORLD-ADM0 IS CORRECTED, not closed. This register first guessed Natural Earth, public domain. It is geoBoundaries gbOpen assembled per country: its features carry geoBoundaries' own iso3/shapeGroup/shapeName, and the plugin's data/adm0/PROVENANCE.json names the source and endpoint. That file also states the real problem -- gbOpen passes each country's UPSTREAM licence through, so one file carries up to 162 licences and up to 162 attribution duties -- and its licences table is EMPTY. Which of the 162 are CC BY is unestablished. Stated in ATTRIBUTION as an undischarged duty rather than papered over. pplr's row is exp-shepherd's evidence: the PPLR ArcGIS org aggregating IMB, Joshua Project, ROP and WCD identifiers, publishing no licence at all, and WCD is a proprietary Brill database. --- data/boundaries/ATTRIBUTION | 41 ++++++++++++++++++++++++++++++++++++ documentation/THIRD-PARTY.md | 8 ++++--- internal/generate-tree.mjs | 9 ++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 data/boundaries/ATTRIBUTION diff --git a/data/boundaries/ATTRIBUTION b/data/boundaries/ATTRIBUTION new file mode 100644 index 000000000..cd25dfe1d --- /dev/null +++ b/data/boundaries/ATTRIBUTION @@ -0,0 +1,41 @@ +BOUNDARY DATA — SOURCES AND ATTRIBUTION +======================================= + +The .geojson files in this folder are third-party boundary data. Every value below is taken +VERBATIM from the upstream metadata (the geoBoundaries API, https://www.geoboundaries.org/api/current/gbOpen///). +Nothing here is our own wording about a licence. + +gb-IND-ADM1-full.geojson, gb-IND-ADM1-full-web.geojson + source geoBoundaries gbOpen (www.geoboundaries.org) + boundaryID IND-ADM1-1811400 + licence Creative Commons Attribution 2.5 India (CC BY 2.5 IN) + licenceSource github.com/datameet/maps + year 2011 + ATTRIBUTION IS REQUIRED for this file: it is Creative Commons Attribution, so a work that + redistributes or displays it must credit the source above. + +gb-IND-ADM1.geojson, gb-IND-ADM1-web.geojson + The same India ADM1 boundary as above, curated to the UPG-100 list's partition. + Same source, same boundaryID, same licence, same attribution duty. + +gb-CHN-ADM1.geojson + source geoBoundaries gbOpen (www.geoboundaries.org) + boundaryID CHN-ADM1-43563684 + licence Public Domain + licenceSource commons.wikimedia.org/wiki/File + year 2019 + No attribution duty: upstream records this boundary as Public Domain. + +world-adm0.geojson, world-adm0-web.geojson + source geoBoundaries gbOpen (www.geoboundaries.org), assembled per country + features 162 countries + licence MIXED, AND NOT YET RECORDED PER COUNTRY. + gbOpen passes each country's UPSTREAM licence through, so this one file carries up to 162 + different licences and therefore up to 162 separate attribution duties. The collection's own + provenance record (the plugin's data/adm0/PROVENANCE.json) states that principle but its + licences table is EMPTY, so which of the 162 are Creative Commons and which are public domain + is not established here. Establishing it means querying the endpoint above once per country. + UNTIL THEN, TREAT THIS FILE AS CARRYING ATTRIBUTION DUTIES THAT ARE NOT YET DISCHARGED. + One known gap in that record: CCK (Cocos Islands) returned HTTP 404 for its metadata. + +See documentation/THIRD-PARTY.md for the whole shipped tree. diff --git a/documentation/THIRD-PARTY.md b/documentation/THIRD-PARTY.md index bcfe354fb..6f9c3ba19 100644 --- a/documentation/THIRD-PARTY.md +++ b/documentation/THIRD-PARTY.md @@ -12,10 +12,11 @@ served folder". The licence travels with the asset; the explanation travels with | Fonts: bebas-neue, figtree, noto-serif-devanagari, oswald, poppins | Google Fonts / foundry repos | OFL-1.1 | **Yes** — each `LICENSE` is the family's own upstream OFL, verbatim, with its real copyright line | none (closed 2026-09-28) | | `vendor/vue/vue.global.prod.js` | vuejs/core | MIT | **Partly** — the minified banner carries `(c) 2018-present Yuxi (Evan) You` and `@license MIT`, but NOT the permission notice MIT asks to include | closed: upstream `LICENSE` now vendored beside it | | `vendor/tabulator/tabulator.min.js` + `.min.css` | olifolkerd/tabulator v6.3.1 | MIT | **No** — the `.js` had only `(c) Oliver Folkerd 2025`; the `.css` had nothing | closed: upstream `LICENSE` now vendored beside it | -| `boundaries/gb-*.geojson` (4 files) | geoBoundaries gbOpen (www.geoboundaries.org) | CC BY — the India ADM1 file records **CC BY 2.5 IN**, sourced from DataMeet/Election Commission of India | **Partly** — provenance sits in ONE sidecar, `gb-IND-ADM1-full.meta.json` (source, boundaryID, licence, fetch URL, processing). The other boundary files have none, and no human-readable attribution ships | **OPEN** — CC BY requires attribution to accompany the work | -| `boundaries/world-adm0*.geojson` | not verified — probably Natural Earth | Natural Earth is public domain | n/a if Natural Earth | **OPEN** — provenance unconfirmed for this file | +| `boundaries/gb-IND-ADM1*.geojson` (4 files) | geoBoundaries gbOpen, boundaryID `IND-ADM1-1811400` | **CC BY 2.5 IN**, licenceSource `github.com/datameet/maps`, year 2011 — fetched verbatim from the geoBoundaries API | **Yes** — `boundaries/ATTRIBUTION` now ships beside the data, plus the existing `.meta.json` sidecar | none (closed 2026-09-28) | +| `boundaries/gb-CHN-ADM1.geojson` | geoBoundaries gbOpen, boundaryID `CHN-ADM1-43563684` | **Public Domain**, licenceSource `commons.wikimedia.org`, year 2019 | recorded in `boundaries/ATTRIBUTION` | none — upstream records no attribution duty | +| `boundaries/world-adm0*.geojson` (2 files, 162 countries) | **geoBoundaries gbOpen, assembled per country** — corrected: its features carry geoBoundaries' own `iso3`/`shapeGroup`/`shapeName` properties, and the plugin's `data/adm0/PROVENANCE.json` names the source and endpoint. NOT Natural Earth, as this register first guessed | **MIXED — up to 162 different upstream licences.** gbOpen passes each country's own licence through | the principle is stated in `boundaries/ATTRIBUTION`; the per-country licences are **not** | **OPEN** — that PROVENANCE.json's `licences` table is EMPTY, so which of the 162 are CC BY is unestablished. Closing it means one API query per country. upg100-plugin's data; routed to them | | `people-groups/*` (3 files, 8 MB) | peoplegroups.org | **not established** | no terms ship | **OPEN, judgment** — redistribution terms unknown | -| `pplr/*` (6 files, 16 MB) | not resolved from `plugin-designs/pplr-data-maps/scripts/build-data.mjs` | **not established** | nothing ships | **OPEN, judgment** — owner should name the upstream | +| `pplr/*` (6 files, 16 MB) | **PPLR ArcGIS Online org** `services2.arcgis.com/S4ydGgujXcif36k3`, aggregating IMB (peoplegroups.org), Joshua Project, the ROP registry, and carrying WCD (World Christian Database) IDs. Built from a local 78 MB extract not present in this repo — evidence from exp-shepherd | **UNRESOLVED.** `aCountry` and `aIMBPeople` publish no `copyrightText`, description or licence (queried `f=json`) | nothing ships | **OPEN, judgment** — redistribution not established. WCD is a proprietary Brill database, so even the IDs need a check | | `tables/*` (304 files, 36 MB) | derived by `library/scripts/research/fetch-*.mjs` from several upstream APIs | **varies, not established per table** | nothing ships; there is no source or licence doc in `tables/` | **OPEN, judgment** — the largest gap by volume | | `images/worldmap.svg` | recorded in `images/PROVENANCE` | see that file | the PROVENANCE file ships and explains why no licence file sits beside it | none claimed; reasoning recorded rather than assumed | | `previews/*` (378 files) | our own poster previews | ours | n/a | none | @@ -25,6 +26,7 @@ served folder". The licence travels with the asset; the explanation travels with | Vendored file | Upstream URL | sha256 | |---|---|---| +| `data/boundaries/ATTRIBUTION` | geoBoundaries API, per boundary (values verbatim) | see the file | | `data/vendor/tabulator/LICENSE` | `https://raw.githubusercontent.com/olifolkerd/tabulator/master/LICENSE` | `191a2ee554684e1064c897b432f0e1bc6dfa714ca045d3f6ea2cf692cbd398b7` | | `data/vendor/vue/LICENSE` | `https://raw.githubusercontent.com/vuejs/core/main/LICENSE` | `49190d1f742dd61e47fe816df4963e5186a2a62100d9122f9883a60ea32973ac` | | `data/fonts/bebas-neue/LICENSE` | `https://raw.githubusercontent.com/google/fonts/main/ofl/bebasneue/OFL.txt` | see `documentation/vendored-fonts.md` | diff --git a/internal/generate-tree.mjs b/internal/generate-tree.mjs index bcb4408e7..bd71621a3 100644 --- a/internal/generate-tree.mjs +++ b/internal/generate-tree.mjs @@ -1551,6 +1551,10 @@ function main() { // COMPLETE India ADM1 (36 units, geoBoundaries gbOpen, CC BY 2.5 IN; source + licence in its meta), // for maps that colour every state. The curated file above is UPG-100's 34-unit partition. [resolve(__dirname, '..', 'data', 'boundaries', 'gb-IND-ADM1-full.geojson'), 'gb-IND-ADM1-full.geojson'], + // ★ AND THE ATTRIBUTION, because this pair list is what decides whether it TRAVELS. The India + // ADM1 boundary is Creative Commons Attribution, so the credit has to reach the recipient with + // the data; a file left in data/boundaries would never ship. Same trap as vendor/*/LICENSE. + [resolve(__dirname, '..', 'data', 'boundaries', 'ATTRIBUTION'), 'ATTRIBUTION'], [resolve(__dirname, '..', 'data', 'boundaries', 'gb-IND-ADM1-full.meta.json'), 'gb-IND-ADM1-full.meta.json'], // WEB copies (library/scripts/boundaries/build-web-boundaries.mjs): every feature and island kept, about // a fifth of the bytes. The interactive maps fetch these; posters, print and build-time point-in-polygon @@ -1618,6 +1622,11 @@ function main() { 'boundaries/gb-CHN-ADM1.geojson', 'boundaries/gb-IND-ADM1-full.geojson', // all 36 states (Cities with Internet's NFHS layer) 'boundaries/gb-IND-ADM1-full.meta.json', // its source and licence, served beside it + // ★ SECOND STAGE. The pair list above only gathers into the build POOL; THIS list decides what + // reaches the tree. I added ATTRIBUTION to the pair list, ran the build, and it still did not ship + // — a two-stage pipeline needs the entry in both. The India ADM1 boundary is Creative Commons + // Attribution, so the credit must travel with the data. + 'boundaries/ATTRIBUTION', 'boundaries/world-adm0-web.geojson', // the web copies the interactive maps fetch 'boundaries/gb-IND-ADM1-web.geojson', 'boundaries/gb-IND-ADM1-full-web.geojson', From 7165c0640d20e73c4b33024675bb0706a395ca72 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 01:51:14 +0000 Subject: [PATCH 7/7] world-adm0's 162 licences are established, and 65 are share-alike MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit upg100-plugin ran the per-country fetch (304a4c120): 162 queries against the geoBoundaries endpoint, values recorded verbatim, 0 failures, one spot-check re-verified live. 130 of 162 countries carry a duty; only 32 are duty-free. ATTRIBUTION now says the world-adm0 duties are DISCHARGEABLE and points at the single authority for them -- their PROVENANCE.json -- rather than copying the table, because one table in two places drifts. Their words. ★ THE DUTIES ARE RECORDED AS CLASSES, NOT AS ONE THING. They separated the 7 explicit ShareAlike countries because share-alike is a stronger duty than attribution, which is right; by the same reasoning the class holds 65, because Open Data Commons ODbL 1.0 also requires a derivative database to be offered under ODbL. 58 ODbL + 7 CC-SA. This repository already acted on that reading: Natural Earth's 1:10m roads were deliberately not shipped over an ODbL obligation. Whether "licensed alike" binds a giveaway is a legal question, not a measurement, and it is recorded as open rather than resolved here. The CCK line is gone. It read as an outstanding gap; CCK is absent from world-adm0 entirely, so that 404 was a fetch for a country that never shipped. --- data/boundaries/ATTRIBUTION | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/data/boundaries/ATTRIBUTION b/data/boundaries/ATTRIBUTION index cd25dfe1d..b3d176364 100644 --- a/data/boundaries/ATTRIBUTION +++ b/data/boundaries/ATTRIBUTION @@ -29,13 +29,33 @@ gb-CHN-ADM1.geojson world-adm0.geojson, world-adm0-web.geojson source geoBoundaries gbOpen (www.geoboundaries.org), assembled per country features 162 countries - licence MIXED, AND NOT YET RECORDED PER COUNTRY. - gbOpen passes each country's UPSTREAM licence through, so this one file carries up to 162 - different licences and therefore up to 162 separate attribution duties. The collection's own - provenance record (the plugin's data/adm0/PROVENANCE.json) states that principle but its - licences table is EMPTY, so which of the 162 are Creative Commons and which are public domain - is not established here. Establishing it means querying the endpoint above once per country. - UNTIL THEN, TREAT THIS FILE AS CARRYING ATTRIBUTION DUTIES THAT ARE NOT YET DISCHARGED. - One known gap in that record: CCK (Cocos Islands) returned HTTP 404 for its metadata. + licence MIXED — and now ESTABLISHED per country, not merely acknowledged. + THE PER-COUNTRY TABLE IS THE AUTHORITY, and it lives in ONE place on purpose: + plugin-designs/my-upg-100-list/data/adm0/PROVENANCE.json + It records boundaryLicense, licenseSource and boundaryID for all 162, each value taken + verbatim from https://www.geoboundaries.org/api/current/gbOpen/// (162 queries, + 0 failures, one spot-check re-verified against the live API). This file deliberately does NOT + copy that table: one table in two places drifts. + + 130 OF THE 162 CARRY A DUTY. Only 32 are duty-free (28 Public Domain, 4 CC0). By class: + + ATTRIBUTION-ONLY (credit the source) + 44 CC BY 4.0 13 CC BY 3.0 IGO 4 CC BY 2.5 2 CC BY 3.0 + 2 Open Government Licence v3 + + SHARE-ALIKE CLASS — A STRONGER DUTY: a derivative may have to be licensed alike, which is + the class that actually constrains giving this repository away. + 58 Open Data Commons ODbL 1.0 + 7 Creative Commons ShareAlike 2.0 / 3.0 — AGO GAB GEO GIN MMR NER TUR + + ODbL IS LISTED IN THAT CLASS DELIBERATELY. Alongside attribution it requires a Derivative + Database to be offered under ODbL and carries a keep-open provision, so by volume the + share-alike question covers 65 of 162 countries, not 7. This repository has already acted on + that reading once: library/scripts/posters/data/README.md records that Natural Earth's 1:10m + ROADS were requested and deliberately NOT shipped because of an ODbL obligation. + WHETHER 'licensed alike' binds a giveaway of this repository is a legal question, not a + measurement, and it is open. It is recorded here so nobody has to rediscover it. + + duty-free: 28 Public Domain, 4 CC0. See documentation/THIRD-PARTY.md for the whole shipped tree.