Cs:Import UIR-ZSJ
Úvod
Import má sloužit k doplnění názvů sídelních celků nebo-li sídel (zastavěné území), nikoliv k začlenění územně-správní struktury (např. stát-kraj-okres-obec-ku), která už v OSM je.
UIR-ZSJ (Územně identifikační registr - Základní sídelní jednotky) je součástí Registru sčítacích obvodů a budov. Metodická dokumentace registru uvádí Registr sčítacích obvodů a budov ze zákona č. 89/1995 Sb., o státní statistické službě, v platném znění, je dle novelizace zákona zveřejněné ve Sbírce zákonů 2004, částka 25 ze dne 25. února 2004 veřejným seznamem.
Z hlediska OSM jsou zajímavými údaji především jména, definiční body a počty obyvatel jednotlivých administrativních celků - importují se datasety obcí (OBCE), částí obcí (COBE) a základních sídelních jednotek (ZSJ). Datasety OBCE a COBE jsou importovány plošně pro celou republiku, případné chyby a konflikty se opraví přímo v OSM - na podstránkách krajů je uveden seznam (potenciálních) chyb nalezených během importu. Dataset ZSJ již vyžaduje trochu manuální práce a jeho import je možné provést poloautomaticky pro jednotlivé obce za asistence níže uvedených skriptů - na podstránkách jednotlivých krajů je seznam obcí pro něž ještě import ZSJ neproběhl (a zároveň dataset obsahuje nějaké užitečné údaje).
Jak tagovat
Obce, městys, město, statutární město vs. place= town, village
Obec (v OSM definovaná hranicemi relace s admin_level=8) může mít v ČR titul městys, město nebo statutární město. Pro udělení titulu města zákon sice stanovuje požadavek 3000 obyvatel, ale momentálně toto kritérium zhruba třetina měst nesplňuje (jelikož se jedná např. o historicky získaný titul). Naopak máme několik desítek obcí, které titul města nemají, ale toto kritérium splňují. Titul městyse i města je čistě formální záležitostí - nevyplývají z něj žádné další povinnosti nebo privilegia. Nejvhodnějším kritériem pro vymezení venkovských obcí [1] se jeví údaj o počtu obyvatel.
Tagování z pohledu mapera
Pro správné otagování jednotlivých sídel bude potřeba trocha místní znalosti...
Tag place | Popis |
---|---|
city | Administrativní centra měst s počtem obyvatel nad 90.000, tj. 10 krajských měst mimo Jihlavu, Karlovy Vary, Zlín (současný stav). |
town | Administrativní centra obcí s počtem obyvatel 3.000 až 90.000. |
village | Administrativní centra obcí s počtem obyvatel menším než 3.000. Dále všechna samostatná sídla označena dopravní značkou začátku a konce obce svým vlastním jménem. |
hamlet | Sídla, která nejsou označena dopravní značkou začátku a konce obce a zároveň nejsou "uvnitř" jiného takového sídla - typicky malé vesničky, do kterých vede pouze nějaká místní komunikace. |
isolated_dwelling | Samoty, narozdíl od hamlet se jedná o jednu až dvě domácnosti. |
suburb | Čtvrti ve městech - části obce, které jsou součástí nějakého sídla označeného pomocí place= city, town. |
neighbourhood | Místa uvnitř ostatních sídel (v importu se jedná o všechny ostatní části obce a obydlené ZSJ). |
locality | Neobydlená pojmenovaná místa (v importu se jedná o ZSJ s nulovým počtem obyvatel). |
Výchozí přiřazení tagu place při importu
Dataset OBCE
Tag place | Kritéria |
---|---|
city | Uzly obcí s počtem obyvatel nad 90.000. |
town | Uzly obcí s počtem obyvatel 3.000 až 90.000. |
village | Uzly obcí s počtem obyvatel menším než 3.000. |
Dataset COBE
Tag place | Kritéria |
---|---|
village | Uzly částí obce s počtem obyvatel více než 50, které jsou od centra obce vzdáleny více než 39*(obyvatelstvo obce)^0.39 + 200 metrů. |
hamlet | Uzly částí obce s počtem obyvatel méně než 50, které jsou od centra obce vzdáleny více než 39*(obyvatelstvo obce)^0.39 + 200 metrů. |
suburb | Uzly částí obce, které jsou od centra obce (s tagem place= city, town) vzdáleny méně než 39*(obyvatelstvo obce)^0.39 + 200 metrů. |
neighbourhood | Uzly částí obce, které jsou od centra obce (s tagem place= village) vzdáleny méně než 39*(obyvatelstvo obce)^0.39 + 200 metrů. |
locality | Uzly částí obce s nulovým počtem obyvatel. |
Dataset ZSJ
Tag place | Kritéria |
---|---|
village | Uzly ZSJ s počtem obyvatel více než 50, které jsou od centra obce a nadřazené části obce vzdáleny více než 39*(obyvatelstvo obce nebo části obce)^0.39 + 200 metrů. |
hamlet | Uzly ZSJ s počtem obyvatel 1 až 50, které jsou od centra obce a nadřazené části obce vzdáleny více než 39*(obyvatelstvo obce nebo části obce)^0.39 + 200 metrů. |
neighbourhood | Uzly ZSJ s nenulovým počtem obyvatel, které jsou od centra obce nebo nadřazené části obce vzdáleny méně než 39*(obyvatelstvo obce nebo části obce)^0.39 + 200 metrů. |
locality | Uzly ZSJ s nulovým počtem obyvatel. |
Plošný import COBE, OBCE
Je prováděn automaticky po okresech. Na podstránkách krajů je uveden seznam (potenciálních) chyb nalezených během importu - duplicity vzniklé v důsledku nějakého konfliktu, uzly přesunuté o větší vzdálenost a sídla nenalezená v UIR-ZSJ. Dále také seznam obcí, kde má smysl importovat také dataset ZSJ.
Poloautomatický import ZSJ (a COBE, OBCE) po jednotlivých obcích
Příprava
- Nainstalujte si python 2.7 a odpovídající verzi pyproj.
- Uživatelé Linuxu by měli mít příslušné balíčky přímo v repozitáři.
- Uživatelé Windows, budou muset instalovat ručně [2].
- Stáhněte si uirzsj2osm skripty pro import. Archiv stačí rozbalit do libovolného umístění.
- Stáhněte si poslední verzi UIR-ZSJ ze stránek statistického úřadu - označeno jako "Datový paket" "ČR - úplná verze kompaktní". Z tohoto archivu rozbalte DBF soubory do podadresáře uir-zsj (ve skutečnosti jsou potřeba pouze soubory OBCE.DBF, COBE.DBF, ZSJD.DBF).
- V adresáři se skripty vytvořte soubor credentials.txt, do kterého na první řádek napište své uživatelské jméno a na druhý řádek heslo pro přihlášení ke svému OSM účtu.
Postup při importu
Importují se data pro jednotlivé obce samostatně, než začnete budete potřebovat znát OSM id relace nebo její hodnotu ref tagu (např. pro Pardubice 440145, nebo CZ0532555134). Během plošného importu OBCE a COBE se ukázalo, že u většiny obcí odpovídají jednotlivé ZSJ částem obcí, tzn. z datasetu ZSJ se již nic dalšího importovat nedá... Na podstránkách jednotlivých krajů je seznam obcí pro něž ještě import ZSJ neproběhl a zároveň dataset obsahuje nějaké užitečné údaje.
Z konsole spusťte skript priprav.py s argumentem OSM id nebo ref relace obce, např.
cesta/ke/skriptum/priprav.py 440145
Tento skript načte všechny potřebné údaje z UIR-ZSJ a OSM, provede analýzu duplicit a připraví data ke kontrole a následnému importu. Během tohoto procesu jsou do konzole vypisovány různé údaje, které by měly posloužit k identifikaci případných chyb. Nalezené problémy zahrnují:
- Uzel je odkazovaný nějakou cestou, nebo relací a tedy jej není možné automaticky přesunout.
- Uzel je nekompatibilní s ODbL.
- Hodnoty tagu place "natipované" podle pravidel importu nemusí být vždy správné!
Otevřte připravená data ve vašem oblíbeném editoru (testoval jsem Merkaartor a JOSM) a opravte případné nedostatky. Hlavním vodítkem k opravám by měl být výpis skriptu (viz výše).
- Uzly, u kterých došlo k nějakému konfliktu, mají příslušné informace v tagu fixme. Některá sídla budou v datech zdvojená - verze z UIR-ZSJ a současná verze z OSM.
- Nejdůležitější je zkontrolovat hodnoty tagu place podle kapitoly Jak tagovat.
- Ne všechny uzly z datasetu ZSJ jsou nutně zajímavé pro import. V databázi jsou takto zaneseny i některé průmyslové komplexy, nákupní centra, nebo náměstí - v takovém případě je lepší název umístit přímo na příslušný polygon.
- Případně můžete pošoupat uzly na vhodnější místa.
Až budete s výsledkem spokojeni, uložte jej opět do stejného souboru (neuploadujte data přímo z editoru!). A nyní je možné spustit samotný upload dat do OSM pomocí:
cesta/ke/skriptum/upload.py 440145
Tento skript nejprve doplní tag population všem samostatným sídelním uzlům, tj. těm, co mají tag place=city, town, village, hamlet. Následně se data porovnají s původně staženými daty a po odsouhlasení se uploadují změny do OSM databáze.
Pozn.: Nápovědu k oběma skriptům je možné zobrazit pomocí přepínače -h. Pokud chcete vidět více informací o zpracování dat, použijte přepínač -v.
Co přesně skripty dělají?
priprav.py
- Podle zadaného osm_id (nebo hodnoty ref tagu) najde relaci a zkontroluje, že se jedná o relaci obce.
- Načte data z UIR-ZSJ pro danou obci.
- Stáhne relaci obce a všechny uzly sídel (tj. ty, které mají tagy place a name) na jejím území, dále pak:
- Všechny cesty (včetně jejich uzlů), které obsahují některý ze sídelních uzlů.
- Všechny relace, které odkazují některý ze sídelních uzlů. Standardně také všechny uzly a cesty (včetně jejich uzlů), které relace odkazuje - toto chování je možné potlačit pomocí přepínače -s, ale soubory pak není možné editovat v Merkaartoru (protože si při ukládání souboru chybějící členy relací "domyslí" jako prázdné cesty/uzly), potlačit toto chování může být žádoucí např. pro Prahu, kde by se jinak stahovaly kompletní hranice ČR.
- V UIR-ZSJ datech najde všechny sídla, která sdílí stejnou polohu - pokud mají stejné jméno, jsou sloučeny, v opačném případě jsou pošoupnuty o 30m, aby se neimportovali dva uzly se stejnou polohou.
- Všem sídlům v UIR-ZSJ doplní tag place podle tabulky tagování importu.
- Stáhne data o případných licenčních problémech všech uzlů sídel.
- Ke všem sídlům v UIR-ZSJ se pokusí najít odpovídající uzel v OSM datech.
- OBCE: admin_centre obce, pokud má shodné jméno, NEBO jiný uzel se shodným jménem v maximální vzdálenosti 3km.
- COBE: uzel s odpovídajícím tagem ref:cobe v maximální vzdálenosti 2km, NEBO uzel se shodným jménem v maximální vzdálenosti 2km.
- ZSJ: Uzel s odpovídajícím tagem ref:zsj v maximální vzdálenosti 1km, NEBO uzel se shodným jménem v maximální vzdálenosti 1km.
- Pokud je nalezený uzel součástí cesty, nebo relace (která není relací hranic), je v datech ponechán a vytvoří se nový na základě UIR-ZSJ dat (s poznámkou o duplicitě ve fixme tagu). Pokud je nalezený uzel kompatibilní s ODbL jsou na nový uzel zkopírovány tagy.
- Pokud je nalezený uzel nekompatibilní s ODbL, vytvoří se nový na základě UIR-ZSJ dat. Originální uzel je v datech ponechán (novému uzlu je přidána poznámka o duplicitě ve fixme tagu) pouze pokud obsahuje potenciálně důležité tagy (za nedůležité se považují name, place, population, source*, is_in*).
- V ostaních případech je nalezený uzel přesunut na pozici z UIR-ZSJ a jou mu aktualizovány tagy. Pokud nebyl nalezen odpovídající uzel, je vytvořen nový.
- Jsou aktualizovány všechny relace hranic, kde je uzel v roli admin_centre.
- Data jsou uložena do souboru v podadresáři import.
upload.py
- Podle zadaného osm_id (nebo hodnoty ref tagu) najde relaci a zkontroluje, že se jedná o relaci obce.
- Načte data z UIR-ZSJ pro danou obci.
- Načte originální data stažená pomocí priprav.py (z adresáře tmp) a date připravená k importu (z adresáře import).
- Doplní tag population všem samostatným sídelním uzlům, tj. těm, co mají tag place=city, town, village, hamlet.
- jedná-li se pouze o ZSJ (tj. má tag ref:zsj, ale ne ref:cobe a není administrativním centrem obce): počet obyvatel z datasetu ZSJ.
- jedná-li se o část obce (tj. má tag ref:cobe, ale není administrativním centrem obce): počet obyvatel z datasetu COBE, příp. snížený o obyvatele podřízených ZSJ z předchozího kroku.
- jedná-li se o administrativní centrum obce: počet obyvatel z datasetu OBCE, příp. snížený o obyvatele podřízených ZSJ a částí obce z předchozích kroků.
- Tento postup zajistí, že součet hodnot tagu population ze všech samostatných sídel na území obce bude odpovídat celkovému počtu obyvatel v dané obci.
- Porovná výsledná data s originálními, vypíše změny a zeptá se zda pokračovat s uploadem.
- Odešle změny do OSM databáze.