diff --git a/data/boundaries/ATTRIBUTION b/data/boundaries/ATTRIBUTION new file mode 100644 index 00000000..b3d17636 --- /dev/null +++ b/data/boundaries/ATTRIBUTION @@ -0,0 +1,61 @@ +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 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. diff --git a/documentation/HOWTO-join-the-table.md b/documentation/HOWTO-join-the-table.md index af5a5c59..c02e585c 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. --- diff --git a/documentation/THIRD-PARTY.md b/documentation/THIRD-PARTY.md index e3229561..2d535bd3 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 5c551ba7..8716fa35 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', diff --git a/plugin-designs/gospel-internet/gospel-internet.instances.json b/plugin-designs/gospel-internet/gospel-internet.instances.json index 7e55be06..ca843b01 100644 --- a/plugin-designs/gospel-internet/gospel-internet.instances.json +++ b/plugin-designs/gospel-internet/gospel-internet.instances.json @@ -24,6 +24,7 @@ "props": { "profile": "board", "view": "province", + "panel": "map", "urlState": "query" } }, 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 e0abc201..4ad29d8a 100644 --- a/plugin-designs/gospel-internet/scripts/check-gospel-internet-model.mjs +++ b/plugin-designs/gospel-internet/scripts/check-gospel-internet-model.mjs @@ -85,6 +85,16 @@ const back = M.buildQuery({ view: 'zero', filterSet: { band: ['yes', 'partial'], ok(back.includes('lang=ar') && back.includes('list=700') && back.includes('band=yes%7Cpartial') && back.includes('view=zero'), `query builds and keeps lang/list: ${back}`) ok(M.parseQuery('?view=nonsense').view === 'board', 'an unknown view falls back to board') +// 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 ef298845..19c44811 100644 --- a/plugin-designs/gospel-internet/scripts/check-gospel-internet-render.mjs +++ b/plugin-designs/gospel-internet/scripts/check-gospel-internet-render.mjs @@ -50,7 +50,7 @@ try { const res = T('gospel-internet-resources.json') const open = rows.find((r) => r.access_detail === 'none' && r.province) || rows[0] - async function render(lang) { + async function render(lang, extra = { legend: 'open' }) { const app = createSSRApp({ setup() { const b = useBoard() @@ -75,7 +75,7 @@ try { const appI18n = i18n.createAppI18n() app.use(appI18n) appI18n.global.locale.value = lang - app.provide('profileConfig', ref({ profile: 'board', lang })) + app.provide('profileConfig', ref({ profile: 'board', lang, ...extra })) // legends start collapsed; the content checks open them const errors = [] app.config.errorHandler = (e) => { errors.push(String(e && e.stack || e)) } app.config.warnHandler = (m) => { if (/Unhandled error|Property .* was accessed during render but is not defined/.test(m)) errors.push(m) } @@ -84,6 +84,11 @@ try { } const en = await render('en') + // the agent's default (2026-09-28): with no knob both legends start collapsed behind their "Legend" button + 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/GiCombos.vue b/plugin-designs/gospel-internet/src/components/GiCombos.vue index ef83f84f..fa6acb73 100644 --- a/plugin-designs/gospel-internet/src/components/GiCombos.vue +++ b/plugin-designs/gospel-internet/src/components/GiCombos.vue @@ -103,9 +103,10 @@ useShadowStyles( '.gic2{grid-area:combos;display:flex;align-items:center;gap:10px;padding:6px 14px;background:#fff;border-bottom:1px solid #d1d4cd;' + 'min-width:0;font:12.5px/1.3 Roboto,-apple-system,"Segoe UI",sans-serif;color:#3b463d}' + '.gic2-h{flex:none;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#6d766e}' + - // The selection side is BOUNDED and clips: its nowrap placeholder ran under "Try a combination" at 1280 - // and 1440 (rega r82). It now ellipsizes; the full text stays in the title tooltip. - '.gic2-sel{display:flex;align-items:center;gap:6px;min-width:0;flex:0 1 auto;max-width:40%;overflow:hidden}' + + // The selection side is BOUNDED at 40% (rega r82: the placeholder ran under "Try a combination"), but only + // its chips and placeholder clip: they scroll or ellipsize. No overflow here and no min-width:0, so the + // flex:none label sets the minimum width and is never cut ('YOUR S…' at 390, the zh/ru/hi/ar labels at 1280). + '.gic2-sel{display:flex;align-items:center;gap:6px;flex:0 1 auto;max-width:40%}' + '.gic2-none{color:#9aa19b;font-style:italic;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}' + '.gic2-try{display:flex;align-items:center;gap:6px;min-width:0;flex:1 1 auto;overflow-x:auto;scrollbar-width:thin}' + '.gic2-c{flex:none;display:inline-flex;align-items:center;gap:6px;border:1px solid #d1d4cd;background:#f3f3f1;color:#3b463d;border-radius:999px;' + diff --git a/plugin-designs/gospel-internet/src/components/GiMap.vue b/plugin-designs/gospel-internet/src/components/GiMap.vue index 59587c42..1ed1cbef 100644 --- a/plugin-designs/gospel-internet/src/components/GiMap.vue +++ b/plugin-designs/gospel-internet/src/components/GiMap.vue @@ -44,7 +44,8 @@ const ready = ref(false) // Province shading: 'zero' = groups with nothing found in their own language (from the rows in scope), // 'women' / 'men' = NFHS-5 ever used the internet (India only; China has no verified provincial source). const provinceMode = ref('zero') -const legendOpen = ref(true) +// the agent: legends start collapsed, one tap on "Legend" opens them; the embed knob legend:"open" opens them +const legendOpen = ref(board.profileConfig.value?.legend === 'open') let unmounted = false let adm1Table = null // { [shapeName]: { women, men } } India, NFHS-5 const nfhsAttribution = ref('') @@ -313,8 +314,6 @@ onMounted(async () => { // resize the canvas too, or it stretches the old bitmap. let ro = null onMounted(() => { - // A phone opens on the map, not on its legend: at 390px the card covered most of the map (rega r75). - if (mapEl.value && mapEl.value.clientWidth && mapEl.value.clientWidth < 520) legendOpen.value = false if (mapEl.value && typeof ResizeObserver !== 'undefined') { ro = new ResizeObserver(() => { try { mapRef.value && mapRef.value.resize() } catch (_) {} }) ro.observe(mapEl.value) diff --git a/plugin-designs/gospel-internet/src/components/GiTree.vue b/plugin-designs/gospel-internet/src/components/GiTree.vue index 1a6a22dd..9a384695 100644 --- a/plugin-designs/gospel-internet/src/components/GiTree.vue +++ b/plugin-designs/gospel-internet/src/components/GiTree.vue @@ -43,7 +43,8 @@ const mapRef = shallowRef(null) const err = ref('') const ready = ref(false) const hoverId = ref('') -const legendOpen = ref(true) +// the agent: legends start collapsed, one tap on "Legend" opens them; the embed knob legend:"open" opens them +const legendOpen = ref(board.profileConfig.value?.legend === 'open') let unmounted = false let ro = null @@ -242,7 +243,6 @@ async function build() { } catch (_) {} } onMounted(() => { - if (el.value && el.value.clientWidth && el.value.clientWidth < 520) legendOpen.value = false // a phone opens on the tree if (el.value && typeof ResizeObserver !== 'undefined') { // the engines only follow WINDOW resizes; a dragged rail or an un-hidden panel must resize the canvas ro = new ResizeObserver(() => { try { mapRef.value && mapRef.value.resize() } catch (_) {} }) @@ -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 8761ee08..8a467c48 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 || '') @@ -104,7 +110,8 @@ export function parseQuery(search) { const codes = [...list('codes'), ...list('code')].filter((c) => /^[a-z]{3}$/.test(c)) if (codes.length && !filters.language) filters.language = codes.length === 1 ? codes[0] : codes const groups = list('groups').filter((s) => /^[a-z0-9-]+$/.test(s)) - const panel = q.get('panel') === 'tree' ? 'tree' : 'map' + // '' = not in the URL: the board opens on its default (the language tree, the agent 2026-09-28) + 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 @@ -118,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 === 'tree') q.set('panel', 'tree') if (tree) q.set('tree', tree) if (filters) for (const [name, key] of Object.entries(URL_KEYS)) { if (tree && key === 'language') continue @@ -127,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() } diff --git a/plugin-designs/gospel-internet/src/useBoard.js b/plugin-designs/gospel-internet/src/useBoard.js index d528bf8f..19e2a6ee 100644 --- a/plugin-designs/gospel-internet/src/useBoard.js +++ b/plugin-designs/gospel-internet/src/useBoard.js @@ -37,7 +37,7 @@ export function useBoard() { const sort = ref({ key: 'population', dir: -1 }) const openSlug = ref('') // the group in the detail drawer ('' = closed) // ── the centre panel: the geographic map or the language tree (loaded on first use) ─────────────── - const centre = ref('map') + const centre = ref('tree') // the agent: people come for the language tree; the map is one tap away const tree = shallowRef(null) // indexTree(doc) + { meta } const resources = shallowRef(null) // { meta, rows } — gospel links for the board's languages const treeNode = ref('') // the tree node the board is narrowed to ('' = none) @@ -180,7 +180,8 @@ export function useBoard() { if (codes) bus.setFilter('language', codes) const group = q.group || cfg().group || '' if (group) pendingGroup = group - const panel = q.panel === 'tree' || cfg().panel === 'tree' ? 'tree' : 'map' + // the URL wins, then the embed knob (profile-config panel: 'map'), then the default: the tree + const panel = q.panel || (cfg().panel === 'map' ? 'map' : 'tree') if (q.tree) pendingTree = q.tree if (q.groups && q.groups.length) pendingSelection = q.groups setCentre(panel) 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 2b84e571..bff75663 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,1194 @@ { "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 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, + "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." +} diff --git a/public/dx-maps/assets/boundaries/ATTRIBUTION b/public/dx-maps/assets/boundaries/ATTRIBUTION new file mode 100644 index 00000000..b3d17636 --- /dev/null +++ b/public/dx-maps/assets/boundaries/ATTRIBUTION @@ -0,0 +1,61 @@ +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 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. diff --git a/public/dx-maps/doxa-maps-spa/manifest.json b/public/dx-maps/doxa-maps-spa/manifest.json index 9a011fbd..1be98635 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-VMy1YepTE3yXPhM0Er8cw6H/THhTAY6BV7KfoZtWyV3IXfAAMJTg7sTT8RuOuh/j", + "integrity": "sha384-qnCqwfYQGF8v4uMLnMn7+/XdVomUT71pJuy48PzBkuubKegi35eJCSO4hA7oWe8U", "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": [ { @@ -662,6 +662,7 @@ "props": { "profile": "board", "view": "province", + "panel": "map", "urlState": "query" }, "element": "gospel-internet-board", diff --git a/public/dx-maps/gospel-internet/board/board/index.html b/public/dx-maps/gospel-internet/board/board/index.html index bd694ca1..3bb15b94 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": [ { @@ -662,6 +662,7 @@ "props": { "profile": "board", "view": "province", + "panel": "map", "urlState": "query" }, "element": "gospel-internet-board",