Sk:Slovak Libraries Import
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
, aleboHorná Š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 saddr:street
aaddr:street
.
- adresa je string v podobe
- PSČ
- obec
- okres
- kraj
- 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 tagamenity=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
- ak SNK záznam obsahuje v adrese názov ulice, v OSM hľadáme také nodes a ways, ktoré majú tagy
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
aleboway
samenity: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.
- ak je to
- 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úceaddr:
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
aleboway
obohatíme o nasledovné tagy:- prepíšeme tag
name
hodnotou zsnk.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úceaddr:
tagy podľa postupu vyššie.
- prepíšeme tag
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 zway
a tie ktoré chýbajú doplníme z SNK záznamu.
- ak je OSM záznam
node
, a nemáname
aamenity:library
, doplníme mu tagy:name=snk.názov
,amenity=library
, a doplníme tieaddr:
tagy ktoré chýbajú - ak je OSM záznam
node
a už obsahujename
,name
necháme, donote=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 tagamenity:library
a nemá tagname
.
- obsahuje tie nodes a ways, ktoré sú nájdené v danom okrese (bbox) a majú
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/