Skip to content

Open-source data a algoritmus pro generování hranic PSČ v ČR. Exporty do GeoJSON a Vector Tiles.

License

Notifications You must be signed in to change notification settings

marekrost/mapa-psc

Repository files navigation

Interaktivní mapa PSČ ČR

Live Demo License: GPL v3

Interaktivní mapa poštovních směrovacích čísel České republiky s hranicemi odvozenými z RÚIAN adresních bodů. Open-source data a algoritmus pro generování hranic PSČ v ČR. Exporty do GeoJSON a Vector Tiles.

O projektu

Smyslem projektu je poskytnout online mapu příslušnosti k PSČ. PSČ není oficiální územní jednotka. PSČ se přiřazuje ke každému adresnímu bodu jednotlivě, a proto neexistuje žádná oficiální mapa PSČ. Zobrazované hranice PSČ jsou odvozené geometrie vypočtené z bodových dat RÚIAN.

Klíčové vlastnosti

  • Zero backend - statická prezentace hostovatelná bez CGI
  • Vektorové dlaždice - efektivní zobrazení s MapLibre GL JS
  • Voronoi tessellation - přirozené hranice mezi sousedícími PSČ bez mezer
  • Barevné rozdělení pomocí Welsh-Powell algoritmu - sousedící PSČ mají různé barvy
  • Konfigurovatelná paleta - barvy lze jednoduše měnit

Architektura

┌─────────────────┐      ┌──────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│  RÚIAN CSV      │ ───> │  ETL Pipeline    │ ───> │  Vector Tiles   │ ───> │  Static Web     │
│  (Oficiální)    │      │  (Python)        │      │  (MVT .pbf)     │      │  (MapLibre)     │
└─────────────────┘      └──────────────────┘      └─────────────────┘      └─────────────────┘

Instalace a použití

1. Instalace závislostí

Projekt používá správce závislostí uv. Všechny potřebné závislost se stáhnout při prvním spuštění pipeline.

# Pro stažení závislostní ručně stačí spustit:
uv sync

2. Zdroj dat

Zdrojová data pocházejí z RÚIAN (Registr územní identifikace, adres a nemovitostí) spravovaného ČÚZK. Pipeline automaticky stáhne aktuální data při prvním spuštění.

3. Spuštění ETL pipeline

# Kompletní pipeline (automaticky stáhne data při prvním spuštění):
./run_pipeline.sh

# Testovací pipeline s ukázkovými daty (Praha 1):
./run_sample_pipeline.sh

4. Spuštění webové aplikace

# Jednoduchý HTTP server pro testování
cd web
uv run python -m http.server 8000

# Otevřete v prohlížeči:
# http://localhost:8000

5. Deployment

Python pipeline automaticky zkopíruje vygenerované dlaždice do web/tiles/. Pro nasazení stačí zkopírovat celou složku web/ na statický hosting.

# Zkopírujte web/ na hosting
cp -r web/ /path/to/webroot/

Konfigurace

Všechny parametry jsou konfigurovatelné v src/config.py:

Geometrické parametry

# Voronoi tessellation
VORONOI_CLIP_BUFFER_METERS = 500  # Buffer kolem konvexního obalu
SIMPLIFY_TOLERANCE_METERS = 20    # Douglas-Peucker vyhlazení

# Buffer pro osamocené adresy
BUFFER_RADIUS_METERS = 500  # Poloměr pro PSČ s 1-2 adresami

Barevná paleta

Barevná paleta jde nastavit v python konfiguraci pomocí COLOR_PALETTE i úpravou v JS přes updateColorPalette().

Zoom levels

MIN_ZOOM = 6   # Přehled ČR
MAX_ZOOM = 14  # Městská detailnost

Struktura projektu

.
├── pyproject.toml                  # uv dependencies
├── run_pipeline.sh                 # Spuštění celého ETL pipeline
├── run_sample_pipeline.sh          # Spuštění ETL pipeline nad ukázkovými daty
│
├── data/
│   ├── raw/                        # RÚIAN CSV (CP-1250 encoding)
│   ├── processed/                  # Parquet s transformovanými body
│   ├── polygons/                   # GeoPackage s polygony PSČ
│   └── tiles/                      # MVT vector tiles {z}/{x}/{y}.pbf
│
├── src/
│   ├── config.py                   # Globální konfigurace
│   ├── 01_csv2parquet.py           # ETL: Načtení a transformace
│   ├── 02_parquet2geopkg-poly.py   # ETL: Generování polygonů (Voronoi)
│   └── 03_geopkg2geojson-tiles.py  # ETL: Generování MVT dlaždic
│
├── web/
│   ├── index.html                  # Web UI
│   ├── app.js                      # MapLibre logika
│   └── tiles/                      # MVT dlaždice (zkopírováno z data/tiles)
│
└── docs/                           # Dokumentace, popis zadání

Technologie

Backend (ETL)

  • pandas - zpracování CSV
  • geopandas - geografická data
  • pyproj - transformace souřadnic (S-JTSK → WGS84)
  • scipy.spatial - Voronoi tessellation
  • shapely - geometrické operace
  • pyarrow - Parquet I/O
  • tippecanoe - generování MVT dlaždic

Frontend

  • MapLibre GL JS - renderování vektorových map
  • OpenStreetMap - podkladová rasterová mapa

Aktualizace dat

RÚIAN data se aktualizují měsíčně. Pro aktualizaci mapy smažte data/raw/addresses.csv a spusťte pipeline znovu s nejnovějším zdrojovým ZIP souborem.

Pipeline je idempotentní a lze ji opakovaně spouštět.

Licence

GNU General Public License v3.0 or later (GPL-3.0-or-later)

Tento projekt je open-source software šířený pod licencí GPL-3.0-or-later. Zdrojový kód můžete volně používat, upravovat a šířit v souladu s touto licencí.

Upozornění k datům

Data nejsou ve vlastnictví autora projektu. Zdrojová data pocházejí z:

  • RÚIAN (Registr územní identifikace, adres a nemovitostí) - © Český úřad zeměměřický a katastrální (ČÚZK)
  • Podmínky použití RÚIAN dat: https://www.cuzk.cz/

Při použití této mapy je nutné uvést zdroj dat podle podmínek ČÚZK.