Sk:Slovak Libraries Import

From OpenStreetMap Wiki
Jump to navigation Jump to search

Slovak Libraries Import

Import slovenských knižníc z adresára SNK (Slovenská národná knižnica).

Cieľ

Pridať/doplniť verejné dostupné knižnice z adresára SNK do OSM. Priebežne opakovať po tom ako sa refreshne adresár SNK (cca raz za pol roka).

Licencia

Dňa 2016-11-02 sme od p. Janovskej z SNK získali emailom súhlas na použitie údajov z adresára knižníc SNK.

Vstupné dáta

Vstupné dáta sú XLS súbor na stránke SNK s nasledovnými stĺpcami:

  • názov knižnice
  • typ
  • stav
  • adresa
    • adresa je string v podobe A. Sládkoviča 2, alebo Horná Štubňa 472. Ak je názov "ulice" zhodný z názvom obce, uvažujeme, že ide o obec ktorá nepoužíva orientačné čísla a v OSM v takom prípade nepracujeme s addr:street a addr:street.
  • PSČ
  • obec
  • okres
  • kraj
  • email
  • web stránka
  • telefón

Identifikátor

Dataset SNK neobsahuje jednoduchý unikátny identifikátor knižnice (napr. integer). Samotný názov knižnice nie je unikátny, ani kombinácia názov knižnice + obec (pretože mnohé knižnice majú názov "Obecná knižnica" a obcí s rovnakým názvom môže byť viac). Pre účely mapovania SNK-OSM používame okrem vyhľadávania podľa adresy (bbox okres, obec, ulica, číslo) vyhľadávanie podľa názvu knižnice v rámci daného okresu (bbox), a import vizuálne kontrolujeme.

Dataset knižníc ministerstva školstva obsahuje unikátne identifikátory knižníc, neskôr ich možno bude možné domapovať ako ref do OSM. Dataset ministerstva školstva však neobsahuje úplné adresy knižníc (pri mnohých obecných knižniciach iba názov obce) a preto používame dataset SNK.

Priebeh importu

Databáza OSM obsahuje ku dňu 2016-11-09 približne 500 knižníc na území SR (node alebo way s amenity:library).

Adresár knižníc SNK (2016-11-09) obsahuje 2349 záznamov, z nich nás pre účely importu zaujímajú len verejné prístupné knižnice, ktoré sú v nasledovných počtoch:

  • regionálne: 37
  • mestské: 104
  • obecné: 1601

Úvodná fáza importu - synchronizácia SNK a OSM

Krok 1. Vyhľadávanie cez Overpass API

Pre každý záznam z SNK uvedený vyššie spravíme nasledovné (pracujeme v zvolenom bbox-e okresu):

  • A: hľadáme medzi cca 500 už existujúcimi knižnicami v OSM, t.j. hľadáme také nodes a ways, ktoré majú tag name=snk.názov a tag amenity=library
  • B: hľadame adresné body:
    • ak SNK záznam obsahuje v adrese názov ulice, v OSM hľadáme také nodes a ways, ktoré majú tagy addr:city=snk.obec, add:street=snk.ulica, addr:streetnumber=snk.adresne_cislo.
    • ak SNK záznam neobsahuje v adrese názov ulice, v OSM hľadáme také nodes a ways, ktoré majú tagy addr:city=snk.obec, addr:housenumber=snk.adresne cislo

Uvedený postup vyhľadávania v OSM aplikujeme len nad OSM nodes a ways, pretože OSM relation s amenity:library je na Slovensku len jedna, a adresné body sú v OSM nad node alebo way (veľká väčšina).

Výsledky vyhľadávania OSM nodes a ways spárujeme s SNK záznamami, pričom vzácne sa môže stať, že jeden SNK záznam môže mať viac OSM výsledkov (typicky way (dom) s kapor adresou a okrem toho je nad ním node s amenity:library).

Krok 2. - merge OSM a SNK údajov

Tento krok ešte nerobí zmeny v OSM db, len generuje osc súbor.

Všebecné pravidlá:

  • ak už pre SNK knižnicu existuje node alebo way s amenity:library, nevytvárame nový node, ale obohatíme existujúci záznam
  • ak pre SNK knižnicu nájdeme iba adresný bod:
    • ak je to way (typicky vzniknuvší cez kapor), vytvoríme nový node ktorý bude reprezentovať knižnicu.
    • ak je to adresný node, obohatíme ho tagmi.
  • názov knižnice z SNK prepisuje názov knižnice v OSM
  • existujúce addr: tagy v OSM neprepisujeme informáciami z SNK. chýbajúce addr: tagy dopĺňame z SNK údajov

V detaile - pre OSM výsledky z množiny A robíme nasledovné:

  • existujúci nájdený OSM node alebo way obohatíme o nasledovné tagy:
    • prepíšeme tag name hodnotou z snk.názov
    • ak OSM záznam neobsahuje addr: tagy, pridáme ich nasledovne:
      • addr:city=snk.obec
      • addr:postcode=snk.psc
      • ak SNK záznam obsahuje v adrese názov ulice, pridáme tagy:
        • addr:street=snk.ulica
        • addr:streetnumber=snk.adresne_cislo
        • addr:housenumber=snk.adresne_cislo
      • ak SNK záznam neobsahuje v adrese názov ulice ale obce, pridáme tagy:
        • addr:place=snk.obec
        • note: += pre addr:place overit ci nie sme v casti obce s vlastnym nazvom (odlisnym od addr:city)
        • addr:conscriptionnumber=snk.adresne_cislo
        • addr:housenumber=snk.adresne_cislo
    • ak OSM záznam obsahuje nejakéaddr: tagy, existujúce hodnoty ponecháme a doplníme chýbajúce addr: tagy podľa postupu vyššie.

Pre OSM výsledky z množiny B robíme nasledovné:

  • ak bol pre zodpovedajúci SNK záznam nájdený OSM záznam aj v množine A, OSM záznam z množiny B ignorujeme a záznamu A pridáme note=tato SNK kniznica bola najdena v OSM viackrat a v kroku 3. v JOSM rucne vyriesime.
  • ak je OSM záznam way, vytvoríme nový OSM node, ktorému vyplníme:
    • name=snk.názov, amenity=library, addr: tagy preberieme z way a tie ktoré chýbajú doplníme z SNK záznamu.
  • ak je OSM záznam node, a nemá name a amenity:library, doplníme mu tagy: name=snk.názov, amenity=library , a doplníme tie addr: tagy ktoré chýbajú
  • ak je OSM záznam node a už obsahuje name, name necháme, do note=tento bod uz ma name, kniznica by mala mat nazov <nazov> a vyriešime ručne v OSM.

Každemu menenému alebo novovytváranému OSM záznamu dáme tag fixme=yes, aby sme v ďalšom kroku boli v JOSM nútení ručne prejst cez každý záznam.

Krok 3. - ručné overenie a samotný import údajov

Skript ktorý implementuje pravidlá vyššie spustíme s parametrom okres a výsledkom sú tieto dva súbory:

  • <okres>_create.osc
    • knižnice z adresára SNK ktoré neboli nájdené v OSM.
  • <okres>_modify.osc
    • knižnice z adresára SNK ktoré boli nájdené v OSM a je rozdiel v SNK a OSM údajoch.
  • <okres>_unmatched.osm
    • obsahuje tie nodes a ways, ktoré sú nájdené v danom okrese (bbox) a majú amenity:library, ale neboli úspešne namapované na SNK knižnice. typický príklad - node ktorý má iba tag amenity:library a nemá tag name.

Používateľ sa prihlási do JOSM ako SKlibraries_bot a otvorí si súbory. Postupne prechádza cez jednotlivé nodes alebo ways v .osc súboroch a keď overí tagy a polohu, odstráni tag fixme=yes. a prípadne tag note. Vďaka .osm súboru uvidí, či sa náhodou niekde v blízkosti upravovanej/vytváranej OSM knižnice už nenachádza nenamapovaná knižnica (a ak áno, ručne ich zmerguje).

Priebežná fáza importu - priebežné updaty

V úvodnej fáze importu očakávame namapovanie asi 50% záznamov z SNK, pretože väčšina väzieb SNK-OSM vznikne na základe adresy a v OSM ešte stále prebieha kapor import (ktorý má teraz importovaných cca 50% adresných bodov a prebieha po okresoch).

Import SNK knižníc budeme s odstupom času opakovať, tak ako bude prebiehať kapor import adresných bodov podľa okresov.

Adresár SNK sa periodicky updatuje, po jeho update znovu spustíme import skript. Adresár SNK obsahuje aj informácie o zrušených knižniciach (snk.stav = Zrušená || Stagnujúca). Ak neskôr niektorá knižnica takto zanikne, budeme pre tieto knižnice aplikovať tag disused. Poloha existujúcej knižnice sa mení veľmi zriedkavo a preto tento druh zmeny v procese updatu nezachytávame.

Dedikovaný užívateľ

Údaje budú importované pod OSM účtom s názvom SKlibraries_bot

Zdrojové kódy

https://github.com/Infolovec/mapakniznic.sk

skript sa spúšťa cez rake snk-to-osm <okres>. (ešte nie je plne funkčný).

Kontakt

https://www.openstreetmap.org/user/Peter%20Vojtek/

Diskusia

https://groups.google.com/forum/#!topic/osm_sk/HEOTNJmN40o