← Zpět na mapu

Open Mapa

Technická dokumentace - vrstvy, POI, barvy, ikony, architektura

Architektura

Data se jednorázově naimportují do úložišť (PMTiles, PostGIS, Valhalla tiles). Běžící služby z těchto úložišť servírují obsah do frontendu.

Import dat (jednorázové pipeline)

Vrstva mapyPipelineÚložiště
Podkladová mapaGeofabrik PBF → PlanetilerPMTiles
Overlay (trasy, POI)Geofabrik PBF → osmium filter → osm2pgsqlPostGIS
VrstevniceCopernicus DEM → gdal_contourPostGIS
RoutingCopernicus DEM + Geofabrik PBF → valhalla_build_tilesValhalla tiles

Běžící služby

Martin čte dvě úložiště (PMTiles + PostGIS); frontend konzumuje tři služby.

PMTiles ──┐ ├──► Martin ───────┐ PostGIS ──┘ │ ├──► Frontend Valhalla ────────────────────┤ │ MapProxy ────────────────────┘
SlužbaÚčel
MartinTile server - čte PMTiles (podklad) a PostGIS (overlay + vrstevnice), servíruje vektorové dlaždice a fonty
PostGISJedna databáze - overlay vrstvy (trasy, POI) i vrstevnice
ValhallaRouting engine - plánování tras (pěší, kolo, auto), výškový profil
MapProxyCache leteckých snímků ČÚZK - servíruje ortofoto jako WMS
Frontendnginx + MapLibre GL JS - konzumuje Martin, Valhalla i MapProxy

Frontend - ES moduly

Frontend používá nativní ES moduly (type="module") bez bundleru. Jeden entry point app.js; MapLibre GL JS se importuje jako ES modul a servíruje se z této domény, ne z CDN.

config.js ← standalone (konstanty: URL, barvy, POI_DEFS, ZOOM) state.js ← config.js (sdílený stav: map, activePoi, activeGroups) icons.js ← config.js (SVG ikony → MapLibre sprite) track.js ← standalone (geolokace, haversineMeters) layers.js ← config.js, state.js (skupiny vrstev, viditelnost, profily) hash.js ← config.js, state.js, layers.js (URL hash parsing) ui.js ← config.js, state.js, layers.js, icons.js (legenda, popup) routing.js ← config.js, track.js, dom.js (Valhalla routing UI) layers-setup.js ← config.js, state.js, layers.js, hash.js, icons.js, track.js poi-handlers.js ← poi-wiki.js, poi-transit.js (skládá interakce POI) poi-wiki.js ← config.js, wiki.js (hover preview, long-press, klik) poi-transit.js ← config.js, dom.js (zastávky → linky → zvýraznění trasy) dom.js ← standalone (el(), clear() - tvorba DOM) wiki.js ← config.js (dotazy na Wikidata/Wikipedia API) side-panel.js ← dom.js (vysouvací panel s detailem) search.js ← config.js, wiki.js, dom.js, side-panel.js, track.js (fulltext) maplibre.js ← standalone (jediné místo, odkud se MapLibre importuje) tile-retry.js ← standalone (opakuje dotaz na dlaždici, která selhala) app.js ← všechno (entry point - inicializace mapy) Mimo tento graf: sw-register.js ← standalone (registrace service workeru; samostatný <script>, protože CSP nepovoluje inline skripty) wiki-tables.js ← config.js, icons.js, dom.js (generuje tabulky této stránky)

Wiki hover preview

Při najetí na POI s Wikidata/Wikipedia odkazem se zobrazí náhled článku.

FázePopis
Debounce300 ms zpoždění před fetch požadavkem - zabraňuje zbytečným dotazům při pohybu myši
Wikidata APIwbgetentities (sitelinks + labels + claims/P18) → sitelink, label, obrázek
Wikipedia API/api/rest_v1/page/summary/ → shrnutí článku + thumbnail
FallbackPokud Wikipedia článek neexistuje → Wikidata label + P18 obrázek
CacheIn-memory JS Map: wikidataCache (ID → data), summaryCache (lang:title → data)
Race conditionGenerační čítač (hoverGen) zabraňuje zobrazení zastaralého popupu
Kliknutí na POI s wiki odkazem otevře příslušný Wikipedia článek v nové záložce. Jazyky: cs → sk → en (priorita).

POI - Body zájmu

Generováno z POI_DEFS (config.js) + obarveno přes icons.js

Barevná paleta

Turistické trasy (KČT)

TrasaBarvaKód

Vrstevnice

TypBarvaKódInterval

Ikony

ParametrHodnota
Velikost výstupního obrázku32 × 32 px
Velikost symbolu (s pozadím)16 px (uvnitř kruhu)
Velikost symbolu (bez pozadí)20 px
Poloměr kruhu pozadí14 px
MapLibre icon-size0.8 (globální)
Zdroj ikonopenstreetmap-carto (CC0) - frontend/symbols/

Podkladová mapa (hiking-base.json)

Styl podkladové mapy + vrstevnice + lanovky. Servírováno přes Martin (PMTiles + PostGIS).

Datové zdroje

DataZdrojLicence
Podkladová mapa + overlay (trasy, POI)OpenStreetMap (Geofabrik PBF)ODbL 1.0
VrstevniceCopernicus DEM GLO-30 (AWS S3)Copernicus DEM licence
Ortofoto (letecké snímky)ČÚZK - Ortofoto ČR (WMS)CC BY 4.0
Fotografie ulicPanoramax (federativní index, fotografie z jednotlivých instancí)CC BY-SA 4.0
Polygony oceánůosmdata.openstreetmap.deODbL 1.0
Středové osy jezerosm-lakelinesODbL 1.0
Hranice, pobřeží (nízké zoomu)Natural EarthPublic Domain
Ikonyopenstreetmap-cartoCC0
FontOpen SansApache 2.0

Použité technologie

NástrojÚčelLicence
MapLibre GL JSKlientský renderer mapy (WebGL)BSD-3-Clause
MartinVektorové dlaždice - podkladová mapa (PMTiles) + overlay (PostGIS) + fontyApache 2.0
PlanetilerGenerování PMTiles z OSM datApache 2.0
osm2pgsqlImport OSM dat do PostGIS (trasy, POI)GPL-2.0
osmium-toolFiltrování a slučování PBF souborůGPL-3.0
GDALZpracování Copernicus DEM (vrstevnice + elevation HGT pro Valhalla)MIT
ValhallaRouting engine - plánování tras (pěší, kolo, auto), výškový profil trasMIT
MapProxyCache leteckých snímků z ČÚZK WMS (ortofoto podklad)Apache 2.0
PostGIS / PostgreSQLProstorová databáze overlay vrstevGPL-2.0 / PostgreSQL
nginxWebový server a reverzní proxyBSD-2-Clause

Zoom tier systém

TierZoomMěřítkoCo se zobrazí
Z00VždyTerén, voda, hranice, parky, NP/CHKO, města, dálnice
Z17KrajHlavní silnice, železnice, transit linky, obce, vodní toky
Z210OkresDůležité POI (vrcholy, hrady, stanice, rozhledny), transit, landuse
Z312ObecTuristické a cyklistické trasy, většina POI, budovy, cesty, vrstevnice, popisky silnic
Z414DetailDrobné POI (lavičky, bariéry, stromy), popisky cest

Použití podkladové mapy v jiném projektu

Obě služby, ze kterých se mapa vykresluje, mají vlastní stránku s popisem koncových bodů, licencí a limitů.

SlužbaCo poskytuje
https://tiler.openmapa.czVektorové dlaždice: podkladová mapa, vrstevnice, overlay vrstvy a PBF fonty. Seznam všech zdrojů vrací její katalog.
https://ortofoto.openmapa.czOrtofoto ČÚZK jako WMS (mezipaměť před službou úřadu).

Přehled zoom rozsahů

Svislé pruhy znázorňují zoom úrovně, na kterých je vrstva viditelná. Zvýrazněné sloupce = zoom tiery.

Open Mapa · Technická dokumentace