diff --git a/frontend/src/components/MainMap.tsx b/frontend/src/components/MainMap.tsx index 3fd40c1..98ef11f 100644 --- a/frontend/src/components/MainMap.tsx +++ b/frontend/src/components/MainMap.tsx @@ -43,9 +43,20 @@ function unwrapLon(ring: [number, number][]): [number, number][] { } const CARTO_LIGHT = 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png'; -const OSM = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; const CARTO_ATTR = '© OpenStreetMap © CARTO'; -const OSM_ATTR = '© OpenStreetMap contributors'; + +// NOT tile.openstreetmap.org. Those are OpenStreetMap's VOLUNTEER-run servers, +// and their usage policy does not cover a desktop application handed to an +// unbounded number of operators — they blocked OpsLog for it, and every user's +// map filled with "Access blocked / 403" tiles at once. +// +// The replacements are tile services whose terms do cover redistributed apps, +// with no API key: Carto (whose tiles are OSM-derived, hence the attribution +// still credits OpenStreetMap) and Esri. Anything added here later must be +// checked the same way — a free tile URL is not the same thing as a tile URL we +// are allowed to ship. +const ESRI_STREET = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}'; +const ESRI_STREET_ATTR = 'Tiles © Esri — Source: Esri, HERE, Garmin, © OpenStreetMap contributors'; // Selectable basemaps for the world (great-circle) map. All key-free and all // LABELLED (country/continent names). `labelsUrl` adds a transparent place-name @@ -55,7 +66,7 @@ const BASEMAPS: Record