Import UIR-ZSJ

From OpenStreetMap Wiki
Jump to: navigation, search
Kraje ČR
Hlavní město Praha
Jihočeský kraj
Jihomoravský kraj
Karlovarský kraj
Královéhradecký kraj
Liberecký kraj
Moravskoslezský kraj
Olomoucký kraj
Pardubický kraj
Plzeňský kraj
Středočeský kraj
Ústecký kraj
Vysočina
Zlínský kraj


Ú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é!

Uirzsj2osm-priprav.png

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

Uirzsj2osm-upload.png

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

  1. Podle zadaného osm_id (nebo hodnoty ref tagu) najde relaci a zkontroluje, že se jedná o relaci obce.
  2. Načte data z UIR-ZSJ pro danou obci.
  3. 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.
  4. 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.
  5. Všem sídlům v UIR-ZSJ doplní tag place podle tabulky tagování importu.
  6. Stáhne data o případných licenčních problémech všech uzlů sídel.
  7. 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.
    1. 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.
    2. 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*).
    3. 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ý.
    4. Jsou aktualizovány všechny relace hranic, kde je uzel v roli admin_centre.
  8. Data jsou uložena do souboru v podadresáři import.

upload.py

  1. Podle zadaného osm_id (nebo hodnoty ref tagu) najde relaci a zkontroluje, že se jedná o relaci obce.
  2. Načte data z UIR-ZSJ pro danou obci.
  3. Načte originální data stažená pomocí priprav.py (z adresáře tmp) a date připravená k importu (z adresáře import).
  4. Doplní tag population všem samostatným sídelním uzlům, tj. těm, co mají tag place=city, town, village, hamlet.
    1. 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.
    2. 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.
    3. 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.
  5. Porovná výsledná data s originálními, vypíše změny a zeptá se zda pokračovat s uploadem.
  6. Odešle změny do OSM databáze.