Cs:JOSM/Plugins/CzechAddress

From OpenStreetMap Wiki
Jump to navigation Jump to search

CzechAddress je plugin do editoru JOSM pro vytváření a správu adres na území České republiky v mapě OpenStreetMap. Byl navržen pro následující použití:

  • Vytváření adresních bodů v nezmapovaných oblastech.
  • Doplňování detailů k neúplným adresním bodům.
  • Nacházení duplicitních adresních bodů a jejich odstraňování.

Úvod

Adresy v ČR

Česká republika používá dvojí číslování domů:

  • Číslo orientační určuje pořadí na jedné ulici. Je běžně používaným systémem číslování ve městech.
  • Číslo popisné určuje unikátní číslo v rámci města, případně u větších měst v rámci městské čtvrti.

Zatímco číslo popisné má každý dům, čísla orientační se používají jen ve větších městech.

Je zažitým mýtem, že čísla lze od sebe rozeznat dle barvy domovní cedule. Přestože se obě čísla značí jinou barvou, barevná schemata se liší město od města.

Pro menší stavby se používá třetí způsob číslování, tzv. číslo evidenční. Vzhledem k tomu, že jeho využití je minimální, nemá smysl jej zadávat do mapy OSM. Pro vyhledávání objektů dle čísla evidenčního lze případně použít službu nahlížení do katastru nemovitostí Českého úřadu zeměměřického a katastrálního (ČUZK).

Součástí adresy je též jméno ulice. Není však pravidlem, že obec s pojmenovanými ulicemi musí používat čísla orientační. Viz např. Bílovice nad Svitavou.

Podrobnosti o značení adres lze najít na české Wikipedii pod heslem Označování domů.

Adresy v OpenStreetMap

V současné době existuje několik návrhů na to, jak do mapy zapisovat informace o adresách domů. Ze seznamu navržených modelů však není žádný oficiálně schválen. Přesto se de-facto standardem stalo Karlsruhe schema, jehož části využívá i plugin CzechAddress.

Samotné informace o adrese se vkládají pomocí následujících atributů:

prvek adresy jméno klíče v mapě
číslo orientační addr:housenumber=*
číslo popisné addr:alternatenumber=*
ulice addr:street=*
město addr:city=*
PSČ addr:postcode=*
stát addr:country=CZ

Kromě těchto značek se též využívá atributu is_in=*, jehož definice je volnější. Dohodou v emailové konferenci bylo stanoveno, že pro adresy se bude vyplňovat následujícím způsobem:

[obec], [kraj], CZ

Pokud se obec dělí na čtvrtě, pak je jeho syntaxe následující:

[městská čtvrť], [město], [kraj], CZ

Informace o adrese lze v OpenStreetMap přiřadit dvěma typům objektů. Adresu může nést:

  • Samostatný bod umístěný přibližně na střed budovy.
  • Polygon (používá se termínu plocha), který má přiřazený tag building=yes.

Zdroje informací

Český úřad zeměměřičský a katastrální poskytuje mapu s vyznačenými čísly popisnými. Tuto mapu lze zobrazit např. v editoru JOSM pomocí pluginu WmsPlugin.

Ministerstvo vnitra České republiky (dále MVČR) poskytuje databázi adres bez geografických souřadnic. Tato databáze obsahuje číslo popisné, číslo orientační a ulici, část obce, obec, ORP, okres a kraj. Využít lze též informace o počtu obyvatel.

Databáze obsahuje i přibližný rozsah PSČ v dané oblasti, které jsou kvůli nepřesnostem pro OpenStreetMap nepoužitelné.

Databáze je dle vyjádření MVČR k dispozici bez licence a lze ji proto volně využít v OpenStreetMap.

Česká pošta nabízí přesnou databázi poštovních směrovacích čísel. Její licenční podmínky zatím nejsou známy.

Použití

Plugin CzechAddress se hodí v situaci, kdy je třeba všechny výše uvedené zdroje zkombinovat. V této části naleznete typické použití tohoto pluginu.

Minimální nároky

Plugin nemá příliš vysoké nároky na výkon procesoru, zato operační paměti si umí vzít i 200 MB. Lze proto doporučit spouštět Javu s parametrem -Xmx1024m, který nastavuje maximální množství využité operační paměti na dostatečnou hodnotu.

java -Xmx1024m -jar josm-latest.jar

Instalace

Plugin se instaluje standardním způsobem přímo v editoru JOSM. Instalaci tedy provedete vybráním položky menu UpravitNastaveníNastavení dostupných pluginů. V něm stačí zaškrtnout políčko u řádku czechaddress, okno zavřít a restartovat editor.

Inicializace

Po spuštění editoru JOSM s aktivovaným pluginem se minutu či dvě zdánlivě nic neděje. Ve skutečnosti na pozadí plugin automaticky stahuje databázi ze stránek MVČR a po jejím stažení ji začne načítat. Během této doby je však možné s editorem plnohodnotně pracovat. Čekání lze tedy využít na stažení samotné mapy a další nastavení editoru.

Samotná databáze se uchovává na místním pevném disku v adresáři s nastavením JOSM. Šetří se tak zátěž serveru MVČR a zároveň se tím po prvotním stažení umožní editace bez připojení na internet.

12.1.2013: V současné době je automatické stažení z webu MVČR nefunkční. Databázi je třeba stáhnout manuálně z adresy http://aplikace.mvcr.cz/adresy/Download.aspx , soubor přejmenovat na czechaddress-adresy.zip a přesunout do podadresáře plugins konfiguračního adresáře JOSM

12.1.2013 večer: Plugin je opět funkční. Po spuštění JOSM by mělo dojít k automatické aktualizaci na verzi s opraveným odkazem na databázi MVČR.

Pokud stažení či načtení selže, plugin zůstává neaktivní.

Výběr místa

Po načtení je třeba pluginu sdělit, v jakém místě mapování probíhá. Okno pro výběr umístění se zobrazí ihned po prvním aktivování kterékoli z funkcí pluginu. Jeho použití by mělo být intuitivní.

CzechAddress - Location select.png

Po zvolení místa se aktivuje fáze hledání souvislostí mezi daty na mapě a databází adres. To se provádí vyhodnocením podobnosti každého objektu ve stažené mapě obsahující informace o adrese (dále primitiva) s každým záznamem o adrese v databázi (dále element). Ze všech možných přiřazení každé primitivy se vyberou jen ty nejlepší, čímž se vytvoří počáteční mapování mezi databází a mapou. Každému takovému páru mezi primitivou a elementem se dále v textu říká relace.

Řešení konfliktů

Během přiřazení se samozřejmě může stát, že dvě primitivy se k jednomu elementu hodí stejnou měrou. Takovou situaci zobrazuje následující obrázek, na kterém jsou 2 primitivy, 1 element a 2 relace znázorněné červenou a modrou barvou:

CzechAddress - Conflict schema.svg

V takové situaci je třeba pluginu sdělit, která z relací je ta správná. K tomu slouží dialog Řešení konfliktů, který ve stromovém pohledu zobrazí vždy objekt „o které se vede boj“ a v podstromu pak všechny objekty, mezi kterými je třeba rozhodnout.

Ukázka takového okna je na následujícím obrázku, který však řeší lehce jinou situaci než ve výše uvedeném schematu. Na obrázku plugin správně přiřadil elementu „Šmahova 452/42“ primitivu označenou jako „Šmahova 452/42“. Jenže adresa „Ráj 452/18,“ kterou obsahuje jiná primitiva, v databázi neexistuje. Proto je nejlepším kandidátem již obsazený element „Šmahova 452/42“ tím, že si odpovídají alespoň čísla popisná.

CzechAddress - Conflict screenshot.png

Všimněte si druhé záložky nad stromem konfliktů. Ta umožňuje seřadit konflikty nikoli podle primitiv, ale podle elementů. To se může hodit zejména ve chvíli, kdy dojde k inverzní situaci, která zde byla popsána. Tedy tehdy, kdy na jednu primitivu připadá více elementů.–

Tlačítkem Přiřadit můžete algoritmu sdělit, že právě zvolená relace má mít v konfliktu přednost před všemi ostatními relacemi. Použitím tohoto tlačítka tedy tato relace získá přednost před všemi ostatními z daného konfliktu.

Tipy

  • Katastrální mapa ČUZK je známá tím, že často „usekává“ číslice z čísel popisných. Např. místo čísla 315 pak snadno přečtete pouze 31. Lze tomu snadno předejít zapnutím volby Overlap tiles v nastavení pluginu WmsPlugin. Výchozí hodnoty překryvu jsou nastavené ideálně pro ČUZK.
  • Chcete-li na mapě zobrazit čísla popisná namísto čísel orientačních, otevřete nastavení a pod „ikonou Einsteina“ přidejte novou dvojici klíč/hodnota:
    • Klíč: mappaint.nameOrder
    • Hodnota: name:cz;name;int_name;ref;operator;brand;addr:alternatenumber

Technické detaily

Může se stát, že si budete marně lámat hlavu nad podivným chováním přiřazovacího algoritmu. V takovém případě vězte, že při u každé relace zkoumá dvě kritéria:

  • Shodu čísla popisného
  • Horší ze shody jména ulice a shody čísla orientačního

Pokud jsou splněna obě kritéria, má taková relace přednost před relací, ve které došlo ke shodě pouze jednoho z kritérií.

V případě, že ani jedno z kritérií není splněno, algoritmus tedy konkrétní dvojici primitivy a elementu ignoruje. Může se proto stát, že takto skončí všechny relace některé primitivy skončí právě takto a není ji ani přiřazen element z databáze, ani se neobjeví v seznamu konfliktů. Zatím se v takovém případě neděje vůbec nic a plugin takové primitivy ignoruje. V další verzi by se však měl zobrazit alespoň jejich seznam s upozorněním, aby se na takové primitivy nezapomnělo.

Vytváření adres podle čísla popisného

Ve chvíli, kdy se octnete nad prázdnou mapou, ze které svítí jen červená čísla popisná z mapy ČUZK, lze nejrychleji začít takto:

  1. Vytvořte nový bod pomocí nástroje Kreslit uzly JOSM-Icon-autonode.svg dvojklikem na mapě.
  2. Zkontrolujte, že nově vytvořený bod je ve výběru (jeho čtvereček na mapě je červený a dokonale tak splývá s podkladovou mapou ČUZK)
  3. Adresu tomuto bodu přiřadíte pomocí okna Adresní bod, které aktivujete z menu AdresyVytvořit/upravit adresu.
  4. Opište číslo popisné z mapy ČUZK.
  5. Pokud je v databázi více domů se stejným číslem popisým, plugin Vás nechá vybrat ten správný z rozbalovacího menu.
  6. Seznam dole zobrazí všechny navržené změny. Pokud s některou nesouhlasíte, můžete ji smazat klávesou Delete.
CzechAddress - New address dialog.png

Co znamenají různé druhy obálek, které se zobrazují u adres?

Tyto ikonky umožňují zjistit, jestli daný element již má přiřazenou některou z primitiv.

  • CzechAddress - envelope-closed-star-small.png adresa nebyla zatím přiřazena žádné primitivě.
  • CzechAddress - envelope-closed-small.png adresa má přiřazený právě jednu primitivu.
  • CzechAddress - envelope-closed-exclamation-small.png o tuto adresu se právě vede konflikt.

Vytváření adres „jedním kliknutím“

Ve chvíli, kdy vložíte do mapy první adresní bod, znáte také jméno ulice, ke které náleží. Nyní lze použít mód vytváření adres jedním kliknutím.

CzechAddress - Address factory panel.png
  1. Nejdříve zobrazte panel Továrna na adresy pomocí ikony CzechAddress - images mapmode envelope-scrollbar.png v levém panelu.
  2. Z rozbalovací nabídky vyberte ulici.
  3. Ze seznamu adres vyberte libovolnou, kterou právě vidíte na mapě.
  4. Aktivujte mód Vytváření adres „jedním kliknutím“ ikonou CzechAddress - images mapmode envelope-cursor.png.
  5. Po vytvoření domu kliknutím na mapu plugin automaticky vybírá další dům na stejné ulici.

Recyklační ikona

JOSM bohužel neumožňuje pluginům žádným rozumným způsobem zjistit, zda se jedna či více primitiv na mapě změnila, či byla uživatelem smazána. Může se tak snadno stát, že CzechAddress v sobě drží relace na primitivy, které již dávno neexistují. Tlačítko s dvojitou šipkou proto provádí tuto kontrolu.

Pokud se Vám z nějakého důvodu nezdá chování pluginu, je dobré si vycvičit Pavlovův reflex a ihned klikat na tuto ikonu. Pokud potíže přetrvají i poté, je chyba buď na straně databáze nebo programu.

Tipy

  • Užitečnou klávesovou zkratkou je písmeno F, které ihned aktivuje mód přidávání adres.
  • Některé ulice nedodržují pravidlo lichá čísla na jedné straně, sudá napravo. V takovém případě je výhodné vypnout zaškrtávací políčko Zachovávat sudost/lichost a výběr dalšího domu se nebude tímto pravidlem řídit.

Doplňování adres

Výše uvedené příklady použití se hodí především pro mapování zatím ještě nezmapovaných oblastí. Tato sekce se zabývá situací, kdy je třeba zkontrolovat a opravit adresy již existující mapy.

Z menu vyberte AdresyPřiřadit adresy. Tento dialog prochází všechny relace (včetně těch, které vznikly manuálně vyřešením konfliktů) a snaží se upravit mapu tak, aby přesně odpovídala elementům v databázi. Příklad, jak takové přiřazení může vypadat je na následujícím obrázku:

CzechAddress - Address assignment.png

Varování

V případě, že mezi relacemi je některá špatná, tato chyba se nyní zkopíruje do mapy. Před potvrzením je proto nanejvýš vhodné všechny změny zkontrolovat.

Tip

Uvedený dialog je vhodné používat i na oblasti, ve kterých existují adresní body z dřívějších masových importů. Ty totiž neobsahují některé užitečné tagy jako např. is_in=*, addr:city=*, nebo addr:country=*.

Závěr

Důvěryhodnost dat

Data v databázi MVČR jsou poskytovány bez záruky. Je proto dobré se mít na pozoru před případnými chybami. Praktická zkušenost však říká, že chyb je v databázi minimum a když už se nějaká objeví, většinou chybí celý dům. Na takovou situaci je však plugin připraven a nedojde k poškození dat v OpenStreetMap.

V případě, že narazíte na oblast s větším množstvím chyb, bylo by dobré k tomuto textu přidat upozornění. Ještě lépe by pak bylo o chybě dát vědět přímo na MVČR, kde mohou databázi opravit.

Hlášení chyb

Informace o pádech a chybách pluginu zasílejte, prosím, autorovi pluginu na adresu radomir.cernoch@gmail.com.

Největší cenu mají hlášení, která:

  • obsahují přesný popis toho, kdy, kde a jak k chybě došlo;
  • jdou snadno reprodukovat;
  • obsahují tzv. standardní a chybový výstup programu. Ten získáte spuštěním editoru JOSM z příkazové řádky (ve Windows i v Linuxu) a zkopírováním všeho, co se během běhu programu do příkazové řádky vypíše.
  • Velkým bonusem pak je chybový výpis editoru se zapnutými assertions. Ty lze zapnout velmi snadno přidáním argumentu -ea Javě přímo na příkazové řádce. Pokud tedy chcete hlásit chybu, doporučuji spouštět JOSM z příkazové řádky následujícím způsobem:

java -Xmx1024m -ea -jar josm-latest.jar

Po zapnutí assertions plugin automaticky generuje obsáhlý výpis své činnosti. Jako součást hlášení má velkou hodnotu. Naleznete jej ve složce s nastavením JOSM: [JOSM home]/plugins/czechaddress-log.xml

TODO list

Ačkoli není nutné vytvořit z pluginu výstavní síň programátorského umění, několik užitečných úprav a nových funkcí k implementaci se najde. Pokud se chcete do kteréhokoli úkolu pustit, dveře jsou Vám otevřeny. Plugin sídlí ve standardní OpenStreetMap SVN.

Funkční autodetekce umístění

Ve chvíli, kdy se zobrazí dialog Zvolte umístění je nanejvýš praktické, aby počítač uměl poznat, která oblast je právě stažená. Tuto práci má na starosti funkce LocationSelector.autodetectLocation(), která je nyní spíše nefunkční.

Bylo by dobré na mapě najít bod place=* nejblíže středu obrazovky a k němu poté nalézt nejlepší odpovídající objekt z databáze.

Implementace této funkce je zároveň asi nejlepší příležitostí, jak se k vývoji pluginu přidat.

Česká pošta

Velkým plus by bylo propojení s databází České pošty. Samotné programátorské řešení není těžké, je však potřeba:

  • Dotázat se na licenční podmínky k databázi. Update: Data na webu České pošty jsou volně k dispozici bez jakýchkoli licenčních omezení.
  • Vymyslet, jak v Javě načíst Excelovský soubor. (Umístit na některý server databázi ve formátu CSV?)
  • Ačkoli přiřazení jmen obcí mezi databázemi by mělo být triviální, je třeba výsledný algoritmus pečlivě zkontrolovat.

Další vhodná příležitost, jak se zapojit do vývoje!

Inteligentně ignorovat adresy

Zejména při mapování velkých měst se snadno stane, že adresy z jedné čtvrti se přimísí mezi adresy sousední čtvrti. CzechAddress má nyní s podobnými situacemi velký problém. Vzhledem k tomu, že krajská města jsou pokryta dřívějším importem adres UIR-ADR, není tato funkce největším bolákem. Výhledově jí však bude třeba.

Warning: Default sort key "JOSM Plugins CzechAddress" overrides earlier default sort key "JOSM/Plugins/CzechAddress".