SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
Külső adatok félautomatikus importálása1
Szalai Kálmán (KAMI)
kami911@gmail.com
@kami911kami
OpenStreetMap Meetup – 2017. november 6.
Külső adatok (GTFS, UIC, boltok) félautomatikus
importálása az OpenStreetMap-be
Külső adatok félautomatikus importálása2
Miről lesz ma szó?
Az előző rész tartalmából
GTFS, GO-Sync, tervezett átalakítások
Újratervezés
Python alapú apró programok, munkafolyamatok
Elvégzett feladatok, importálások
Felmerült problémák
További tervek
UIC, boltok, bankok és egyéb POI-k
Külső adatok félautomatikus importálása3
GTFS → OSM import
●
Mi a GTFS?
●
General Transit Feed Specifcation
●
Google által készített egységes adatformátum
menetrendi adatok tárolására (Google Maps)
●
Típusai (Google Transit API)
●
Statikus
●
https://developers.google.com/transit/gtfs/
●
Dinamikus
●
https://developers.google.com/transit/gtfs-realtime/
Külső adatok félautomatikus importálása4
GTFS – Statikus
Formátum
●
ZIP-fájl
●
Letölthető
●
Szöveges fájlokat
tartalmaz
Külső adatok félautomatikus importálása5
GTFS – Kötelező adatok
Tárolt adatok (kötelező)
●
Szolgáltató
●
Megállók (stops.txt) → OSM!
●
ID, kód, név, leírás, koordináta, zóna, url, kerekesszék, stb.
●
Útvonalak (routes.txt) → OSM(?)
●
ID, kód, név, leírás, jármű fajtája, url
●
Utazás (trips.txt), valamint érkezés és indulás idők
(stop_times.txt) → OSM(?)
●
Utazási idők, valamint érkezési és indulási idők
●
Naptár (calendar.txt)
●
Melyik nap érvényes
Külső adatok félautomatikus importálása6
GTFS – További adatok
További adatok (nem kötelező)
●
Útvonal (shapes.txt) → OSM!
●
ID, kód,koordináta
●
Viteldíjak (fare_attributes.txt és fare_rules.txt)
●
Időközök (frequencies.txt)
●
Átszállások (transfers.txt)
●
További információk (feed_info.txt)
Külső adatok félautomatikus importálása7
GTFS – Mire használható?
Lehetséges adatimportálás az OSM-be:
●
Megállók felvitele és ellenőrzése
●
GTFS: stops.txt
●
OSM: ref:bkk
●
Útvonalak felvitele és ellenőrzése
●
Útvonal, mint téradat
●
GTFS: shapes.txt
●
Indulási idők (új ötlet, lenne értelme)
●
OSM: stop_times.txt
●
GTFS: service_times
Külső adatok félautomatikus importálása8
GTFS – Elérhető adatok I
●
Budapesti Közlekedési Központ
●
http://www.bkk.hu/gtfs/budapest_gtfs.zip
●
Dokumentum: http://www.bkk.hu/magunkrol/fejlesztoknek/
●
Magyar Állam Vasutak
●
https://www.mavcsoport.hu/gtfs-igenybejelento
●
Jelszóval védett hozzáférés, engedélyt kértem és kaptam az
OSM felhasználáshoz
Külső adatok félautomatikus importálása9
GTFS – Elérhető adatok II
●
VOLÁN
●
Nem válaszoltak a megkeresésre, még próbálkozok
●
Szeged (nem hivatalos, OSM téradatokkal)
●
https://transitfeeds.com/p/dakk/625
●
http://members.upc.hu/cseh.attila/google_transit.zip
●
https://code.google.com/archive/p/googletransitdatafeed/wikis
/PublicFeeds.wiki
●
https://menetrend.appcorner.eu/data
Külső adatok félautomatikus importálása10
GO-Sync tapasztalatok
●
GO-Sync csak „bus” taget ismer más
közlekedési járművet nem. (például: vasút,
hajó, stb.).
●
Java-s alkalmazás
●
Grafkus felületen szerkesztés
●
JOSM mellett nehézkes a használata
●
Inkább egyszerűbb eszközöket használnék → Python
programok
●
OSM kimenet → Közösségi egyeztetés
Külső adatok félautomatikus importálása11
BKK – állomások – JOSM
Külső adatok félautomatikus importálása12
BKK GTFS és OSM megfgyelések I
●
Taginfo:
●
gtfs csak source-ként van;
●
gtfs_id = 0
●
ref:bkk = 118
●
ref:bkv = 5260
●
fref:bkv = 1
●
ref = 182 (rengeteg más is használja, nehéz kiválogatni)
●
code = 876
●
Módosítások
●
https://github.com/KAMI911/osm-import-
request/tree/master/ref_bkv_to_ref_bkk
●
BKK: 6482 az OSM-ben, 7419 a GTFS-ben
Külső adatok félautomatikus importálása13
BKK GTFS és OSM megfgyelések II
●
Eltérések és hibák okai
●
Nevek eltérése
●
A név a fő egyeztetési szempont
●
Aluljáró kijáratok neveiben szerepelnek a kijáratok betűjelei
●
Örs vezér tere [A]
●
A kisföldalatti állomásnevekben az irányok is benne vannak
●
Oktogon (» Mexikói út)
●
Oktogon (» Vörösmarty tér)
●
Túl sok hasonló megálló van a közelben
●
A távolság a másik egyeztetési szempont
●
Több objektumon van ref:bkk címke egy állomáson belül
●
{n}, F{n} mellett, L*, LM*, CSLM*, CSF*, stb csomópontok és
lejáratok
Külső adatok félautomatikus importálása14
BKK – útvonalak – JOSM
Külső adatok félautomatikus importálása15
MÁV – állomások – JOSM
Külső adatok félautomatikus importálása16
MÁV GTFS és OSM megfgyelések I
●
Taginfo
●
ref:mav = 1295
●
Módosítások
●
https://github.com/KAMI911/osm-import-
request/blob/master/ref_mav/osm_same_name.osm
●
MÁV: 1295 az OSM-ben, 1230 a GTFS-ben
Külső adatok félautomatikus importálása17
MÁV GTFS és OSM megfgyelések II
●
Eltérések és hibák okai
●
Rosszul címkézett állomások
●
railway=station-ból nem egy van → public_transport=stop_position
●
Névtelen állomások
●
Nem MÁV állomások
●
Metró- és egyéb állomások
●
Ezeket az importálás során kiszűrtem
Külső adatok félautomatikus importálása18
„A simple station”
Külső adatok félautomatikus importálása19
„A simple halt”
public_transport = platform
railway = platform
ref = 2
area = yes
public_transport = platform
railway = platform
ref = 1
area = yes
building=train_station
railway = stop
name = Newton
public_transport = stop_position
train = yes
local_ref = 2
landuse = railway
Külső adatok félautomatikus importálása20
MÁV – útvonalak – JOSM
Külső adatok félautomatikus importálása21
Tömeges importálás
Külső adatok félautomatikus importálása22
Tömeges importálás I
●
Előkészületek
●
Adatok és OpenStreetMap megismerése
●
Mit ronthat el az importálás
●
Közösségi igénykeltés
●
Tervezett import megbeszélése
●
Komplexebb importálások ellenőriztetése a közösséggel
●
Licenc és engedélykérés
●
https://github.com/KAMI911/E12n/tree/master/osm
Külső adatok félautomatikus importálása23
Tömeges importálás II
●
Adminisztráció
●
Importálás oldal, dokumentálás
●
https://wiki.openstreetmap.org/wiki/WikiProject_Hungary/Import%C3%A
1l%C3%A1s
●
Import ellenőriztetése
●
Helyi
●
Globális: imports@openstreetmap.org
●
Importálás elvégzése
●
Feltöltés
●
Közösség tájékoztatás
●
Dedikált OSM account: nev+projekt@gmail.com trükk)
Külső adatok félautomatikus importálása24
Elvégzett feladatok
Külső adatok félautomatikus importálása25
Elvégzett feladatok
●
Importálások hozzáadása a wiki oldalhoz
●
https://wiki.openstreetmap.org/wiki/WikiProject_Hungary/Imp
ort%C3%A1l%C3%A1s
●
A ref, ref:bkk, ref:bkv, code egységesítése
ref:bkk-ra (első ötlet „gtfs_id” volt)
●
2011-es importálás frissítése és javítása
●
Hibásan írt BKK megállónevek javítása
●
MÁV GTFS adatokból a ref:mav felvitele
●
Itt még nem voltak importált adatok
●
GO-Sync használata és fejlesztése helyett apró
Python programok készítése
Külső adatok félautomatikus importálása26
Python percek
Külső adatok félautomatikus importálása27
Python alapú munkafolyamat
Python progam
OSM over-pass
lekérdezések
Külső adatok
CSV és web
Python külső
modulok
CSV-fájl
OSM XML fájl
Ellenőrzés
OSM importálás
JOSM progam
OSM javítás
JOSM progam
Külső adatok félautomatikus importálása28
Felhasznált eszközök
●
Adatkezeléshez
●
Numpy
●
Pandas
●
Lxml
●
BeautifulSoup
●
Nominatim és OverPass lekérdezések
●
OSMPythonTools
●
Térbeli keresés
●
Scipy
Külső adatok félautomatikus importálása29
Fejlesztés alatt lévő eszközök
https://github.com/KAMI911/GTFS2OSM
●
g2o-stops.py
●
BKK és MÁV GTFS adatok összehasonlítása az OSM adatokkal
●
CSV és OSM kimenet
●
g2o-shape.py
●
GTFS adaton alapján OSM LineString
●
OSM kimenet
●
hu_uic_parser.py
●
http://www.vpe.hu/takt oldalról az adatok CSV-fájllá alakítása
●
CSV kimenet, később OSM kimenet is importáláshoz
Külső adatok félautomatikus importálása30
OSM fájl készítés
def generate_xml(pd):
from lxml import etree
import lxml
osm_xml_data = etree.Element('osm', version='0.6', generator='JOSM')
for index, row in pd.iterrows():
data = etree.SubElement(osm_xml_data, 'node', action='modify',
id='{}'.format(row['osm_id']), lat='{}'.format(row['osm_lat']),
lon='{}'.format(row['osm_lon']), user='{}'.format(row['osm_user']),
timestamp='{}'.format(row['osm_timestamp']), uid='{}'.format(row['osm_uid']),
changeset='{}'.format(row['osm_changeset']), version='{}'.format(row['osm_version']))
comment = etree.Comment(' Stop name: {0}, ID: {1} '.format(row['stop_name'],
row['osm_merged_refs']))
data.append(comment)
if 'railway' in looking_for:
row['osm_tags']['ref:mav'] = row['stop_id']
for k, v in row['osm_tags'].items():
tags = etree.SubElement(data, 'tag', k='{}'.format(k), v='{}'.format(v))
osm_xml_data.append(data)
return lxml.etree.tostring(osm_xml_data, pretty_print=True, xml_declaration=True,
encoding="UTF-8")
Külső adatok félautomatikus importálása31
Overpass API lekérdezés
def query_overpass(area_id, query_statement, element_type='node'):
# Query Overpass based on area
global overpass
query = overpassQueryBuilder(area=area_id, elementType=element_type,
selector=query_statement)
return overpass.query(query)
city = 'Budapest'
local_area_id = get_area_id(city)
overpass = overpass.Overpass()
p = '"highway"="bus_stop"'
osm_stops_query = query_overpass(str(local_area_id), p, t)
Külső adatok félautomatikus importálása32
BeautifulSoup adatgyűjtés
table = soup.find('table', attrs={'style': 'text-align: left;'})
table_body = table.find('tbody')
rows = table_body.find_all('tr')
for row in rows:
cols = row.find_all('td')
link = cols[1].find('a').get('href') if cols[1].find('a') != None else []
sub_soup = download_soup('{}/{}'.format(link_base, link))
if sub_soup != None:
table = sub_soup.find('table', attrs={'style': 'text-align: left;'})
table_body = table.find('tbody')
sub_rows = table_body.find_all('tr')
add_cols = []
for sub_row in sub_rows:
sub_cols = sub_row.find_all('td')
sub_cols = [element.text.strip() for element in sub_cols]
add_cols.append(sub_cols[1])
cols = [element.text.strip() for element in cols]
cols.append(link)
if 'add_cols' in locals():
cols.append(add_cols)
data.append(cols)
df = pd.DataFrame(data=data[1:], columns = data[0])
Külső adatok félautomatikus importálása33
Levelezés
Külső adatok félautomatikus importálása34
Levelezés
Szeretnénk arra kérni az Ön által képviselt intézményt,
hogy a fenti licenceknek megfelelően legyenek
szívesek az OpenStreetMap projekt részére az Önök
tulajdonában álló téradatokat biztosítani, OdbL
licenccel kompatibilis licenc alatt. Az így közzétett
adatok beépülhetnek az OpenStreetMap térképi
adatbázisába és a közösség számára hasznosíthatóvá
válnak.
(https://github.com/KAMI911/E12n/tree/master/osm)
Külső adatok félautomatikus importálása35
Válasz A cégtől:
„Köszönjük a megkeresést.
Amennyiben a jövőben részünkről igény merül fel az
együttműködésre, jelentkezni fogunk.”
Külső adatok félautomatikus importálása36
1. válasz B cégtől:
„Ezzel egyidejűleg 197 járásban jelenik meg
fogyasztóvédelmi elsőfokú hatósági feladatkör, így
tehát a fogyasztók 2017. január 1-től panaszaikkal
elsősorban a területileg illetékes járási hivatalokhoz
fordulhatnak.”
Melléklet: lista a fogyasztóvédelmi hatóságok
elérhetőségeiről
Külső adatok félautomatikus importálása37
2. válasz B cégtől:
„Kérem, hogy használja a szabadon felhasználható
listát, ami a honlapon van.”
Külső adatok félautomatikus importálása38
Válasz C cégtől:
„Tájékoztatjuk, hogy az illetékesektől kapott
információ alapján nem tudjuk fájl formájában
biztosítani az adatbázist, a honlapon elhelyezett
információk a publikusak.”
A honlapon találtam GeoJSON-t :)
Külső adatok félautomatikus importálása39
Problémák
Külső adatok félautomatikus importálása40
Problémák I
●
Kommunkáció
●
Adatforrások felkutatása
●
Mi a megfelelő formula az adatkérésre?
●
https://github.com/KAMI911/E12n/tree/master/osm
●
Elérhető =≠ Szabad
●
Publikus =≠ Szabad
●
Szabadon használható, de az adat copyright-tal védett
●
OpenStreetMap importálás
●
Mi az importálás feltétele?
●
Mekkora egyetértés kell?
●
Elegendő-e egy határidő az importálás előtt?
●
Mennyi legyen az?
Külső adatok félautomatikus importálása41
Problémák II
●
OpenStreetMap adatok változatossága
●
Igény az egységes címkézésre
●
Részben jól szerkesztett OSM adatok
●
Hibakereső / Hibakeresés
●
Léteznek már ilyen eszközök?
Külső adatok félautomatikus importálása42
További tervek II
●
Új adatok gyűjtése (POI)
●
Boltok, áruházláncok
●
Bankok
●
Éttermek, és étteremláncok
●
UIC (International Union of Railways)
●
Meglévő POI-k egységesítése
●
Azonos írásmód
●
Azonos kategória
●
Wiki oldal → közösen összeállítani
●
Azonosítási mechanizmus, szabály
●
Elegendő-e az OSM ID, vagy valami ref:* szükséges
Külső adatok félautomatikus importálása43
További tervek III
●
Adatok adatbázisba töltése
●
GTFS (Postgres, PostGIS, GTFSDB, ORM, python)
●
https://github.com/OpenTransitTools/gtfsdb
●
OSM (Postgres, PostGIS), napi frissítéssel
●
POI
●
Adatbázis építés a POI-kból (cím, koordináta, nyitvatartás, tag-ek)
●
Nominatim alapján koordináták
●
A saját POI adatbázis automatikus frissítése
●
Webes szerkesztő
●
Webes megjelenítő
●
Ütemezett automatikus frissítések OSM irányban
Külső adatok félautomatikus importálása44
Köszönöm a fgyelmet!
Külső adatok félautomatikus importálása45
Kérdések
Külső adatok félautomatikus importálása46
További eszközök, információk I
GTFS2OSM:
https://github.com/KAMI911/GTFS2OSM/
OSM import request-jeim:
https://github.com/KAMI911/osm-import-request
OSM engedélykérés adatok felhasználásához:
https://github.com/KAMI911/E12n/tree/master/o
sm
Osm-python-tools:
https://github.com/mocnik-science/osm-python-t
ools
Külső adatok félautomatikus importálása47
További eszközök, információk II
GTFSDB:
https://github.com/OpenTransitTools/gtfsdb
GTFS: https://developers.google.com/transit/
GTFS validator:
https://github.com/google/transitfeed
Állomások (1143): http://overpass-turbo.eu/s/lBc
Állomások (2252): http://overpass-turbo.eu/s/lBd
https://transit.land/feed-registry/?country=Hung
ary
https://github.com/mapourtransit/gtfs-maker

Contenu connexe

Plus de Kálmán "KAMI" Szalai

Jó mint a Linux Mint - Linux Rendszergazda Meetup
Jó mint a Linux Mint - Linux Rendszergazda MeetupJó mint a Linux Mint - Linux Rendszergazda Meetup
Jó mint a Linux Mint - Linux Rendszergazda MeetupKálmán "KAMI" Szalai
 
Ubuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy siker
Ubuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy sikerUbuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy siker
Ubuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy sikerKálmán "KAMI" Szalai
 
OpenStreetMap Budapest Meetup - Mozilla Location Service
OpenStreetMap Budapest Meetup - Mozilla Location ServiceOpenStreetMap Budapest Meetup - Mozilla Location Service
OpenStreetMap Budapest Meetup - Mozilla Location ServiceKálmán "KAMI" Szalai
 
Linux Mint - kis disztribúció nagy siker
Linux Mint - kis disztribúció nagy sikerLinux Mint - kis disztribúció nagy siker
Linux Mint - kis disztribúció nagy sikerKálmán "KAMI" Szalai
 
Android vs Firefox OS - Vissza a jövőbe: Firefox OS
Android vs Firefox OS - Vissza a jövőbe: Firefox OSAndroid vs Firefox OS - Vissza a jövőbe: Firefox OS
Android vs Firefox OS - Vissza a jövőbe: Firefox OSKálmán "KAMI" Szalai
 
Android vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OS
Android vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OSAndroid vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OS
Android vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OSKálmán "KAMI" Szalai
 
Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?
Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?
Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?Kálmán "KAMI" Szalai
 
Mozilla - közösség, célok, eszközök
Mozilla - közösség, célok, eszközökMozilla - közösség, célok, eszközök
Mozilla - közösség, célok, eszközökKálmán "KAMI" Szalai
 
„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen
„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen
„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényenKálmán "KAMI" Szalai
 

Plus de Kálmán "KAMI" Szalai (20)

Önkéntesek, közösségek
Önkéntesek, közösségekÖnkéntesek, közösségek
Önkéntesek, közösségek
 
Jó mint a Linux Mint - Linux Rendszergazda Meetup
Jó mint a Linux Mint - Linux Rendszergazda MeetupJó mint a Linux Mint - Linux Rendszergazda Meetup
Jó mint a Linux Mint - Linux Rendszergazda Meetup
 
Ubuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy siker
Ubuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy sikerUbuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy siker
Ubuntu Hour, Budapest - Linux Mint - Kis disztribúció, nagy siker
 
OpenStreetMap Budapest Meetup - Mozilla Location Service
OpenStreetMap Budapest Meetup - Mozilla Location ServiceOpenStreetMap Budapest Meetup - Mozilla Location Service
OpenStreetMap Budapest Meetup - Mozilla Location Service
 
Linux Mint - kis disztribúció nagy siker
Linux Mint - kis disztribúció nagy sikerLinux Mint - kis disztribúció nagy siker
Linux Mint - kis disztribúció nagy siker
 
Firefox OS beszámoló
Firefox OS beszámolóFirefox OS beszámoló
Firefox OS beszámoló
 
6 facts about Open Web and Firefox Os
6 facts about Open Web and Firefox Os6 facts about Open Web and Firefox Os
6 facts about Open Web and Firefox Os
 
Android vs Firefox OS - Vissza a jövőbe: Firefox OS
Android vs Firefox OS - Vissza a jövőbe: Firefox OSAndroid vs Firefox OS - Vissza a jövőbe: Firefox OS
Android vs Firefox OS - Vissza a jövőbe: Firefox OS
 
Android vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OS
Android vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OSAndroid vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OS
Android vs. Firefox OS - Egyszer volt, hol nem volt a Firefox OS
 
Firefox OS - Szakmai nap
Firefox OS - Szakmai napFirefox OS - Szakmai nap
Firefox OS - Szakmai nap
 
Firefox - A kezdetek
Firefox - A kezdetekFirefox - A kezdetek
Firefox - A kezdetek
 
Firefox tippek és trükkök - 2014H1
Firefox tippek és trükkök - 2014H1Firefox tippek és trükkök - 2014H1
Firefox tippek és trükkök - 2014H1
 
A Mozilla nem csak Firefox
A Mozilla nem csak FirefoxA Mozilla nem csak Firefox
A Mozilla nem csak Firefox
 
Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?
Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?
Firefox üveggömb - Milyen fejlesztések érkeznek a Firefox-ba?
 
Program - Új Firefox kiadási buli
Program - Új Firefox kiadási buliProgram - Új Firefox kiadási buli
Program - Új Firefox kiadási buli
 
Firefox OS - Az első év (Veletech)
Firefox OS - Az első év (Veletech)Firefox OS - Az első év (Veletech)
Firefox OS - Az első év (Veletech)
 
Firefox OS - Fedora 20 kiadási party
Firefox OS - Fedora 20 kiadási partyFirefox OS - Fedora 20 kiadási party
Firefox OS - Fedora 20 kiadási party
 
Mozilla - közösség, célok, eszközök
Mozilla - közösség, célok, eszközökMozilla - közösség, célok, eszközök
Mozilla - közösség, célok, eszközök
 
A Firefox-on túl is Mozilla
A Firefox-on túl is MozillaA Firefox-on túl is Mozilla
A Firefox-on túl is Mozilla
 
„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen
„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen
„Mozilla: a mi hősünk Te vagy!” előadás a Corvinus Nyári Egyetem rendezvényen
 

Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be

  • 1. Külső adatok félautomatikus importálása1 Szalai Kálmán (KAMI) kami911@gmail.com @kami911kami OpenStreetMap Meetup – 2017. november 6. Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-be
  • 2. Külső adatok félautomatikus importálása2 Miről lesz ma szó? Az előző rész tartalmából GTFS, GO-Sync, tervezett átalakítások Újratervezés Python alapú apró programok, munkafolyamatok Elvégzett feladatok, importálások Felmerült problémák További tervek UIC, boltok, bankok és egyéb POI-k
  • 3. Külső adatok félautomatikus importálása3 GTFS → OSM import ● Mi a GTFS? ● General Transit Feed Specifcation ● Google által készített egységes adatformátum menetrendi adatok tárolására (Google Maps) ● Típusai (Google Transit API) ● Statikus ● https://developers.google.com/transit/gtfs/ ● Dinamikus ● https://developers.google.com/transit/gtfs-realtime/
  • 4. Külső adatok félautomatikus importálása4 GTFS – Statikus Formátum ● ZIP-fájl ● Letölthető ● Szöveges fájlokat tartalmaz
  • 5. Külső adatok félautomatikus importálása5 GTFS – Kötelező adatok Tárolt adatok (kötelező) ● Szolgáltató ● Megállók (stops.txt) → OSM! ● ID, kód, név, leírás, koordináta, zóna, url, kerekesszék, stb. ● Útvonalak (routes.txt) → OSM(?) ● ID, kód, név, leírás, jármű fajtája, url ● Utazás (trips.txt), valamint érkezés és indulás idők (stop_times.txt) → OSM(?) ● Utazási idők, valamint érkezési és indulási idők ● Naptár (calendar.txt) ● Melyik nap érvényes
  • 6. Külső adatok félautomatikus importálása6 GTFS – További adatok További adatok (nem kötelező) ● Útvonal (shapes.txt) → OSM! ● ID, kód,koordináta ● Viteldíjak (fare_attributes.txt és fare_rules.txt) ● Időközök (frequencies.txt) ● Átszállások (transfers.txt) ● További információk (feed_info.txt)
  • 7. Külső adatok félautomatikus importálása7 GTFS – Mire használható? Lehetséges adatimportálás az OSM-be: ● Megállók felvitele és ellenőrzése ● GTFS: stops.txt ● OSM: ref:bkk ● Útvonalak felvitele és ellenőrzése ● Útvonal, mint téradat ● GTFS: shapes.txt ● Indulási idők (új ötlet, lenne értelme) ● OSM: stop_times.txt ● GTFS: service_times
  • 8. Külső adatok félautomatikus importálása8 GTFS – Elérhető adatok I ● Budapesti Közlekedési Központ ● http://www.bkk.hu/gtfs/budapest_gtfs.zip ● Dokumentum: http://www.bkk.hu/magunkrol/fejlesztoknek/ ● Magyar Állam Vasutak ● https://www.mavcsoport.hu/gtfs-igenybejelento ● Jelszóval védett hozzáférés, engedélyt kértem és kaptam az OSM felhasználáshoz
  • 9. Külső adatok félautomatikus importálása9 GTFS – Elérhető adatok II ● VOLÁN ● Nem válaszoltak a megkeresésre, még próbálkozok ● Szeged (nem hivatalos, OSM téradatokkal) ● https://transitfeeds.com/p/dakk/625 ● http://members.upc.hu/cseh.attila/google_transit.zip ● https://code.google.com/archive/p/googletransitdatafeed/wikis /PublicFeeds.wiki ● https://menetrend.appcorner.eu/data
  • 10. Külső adatok félautomatikus importálása10 GO-Sync tapasztalatok ● GO-Sync csak „bus” taget ismer más közlekedési járművet nem. (például: vasút, hajó, stb.). ● Java-s alkalmazás ● Grafkus felületen szerkesztés ● JOSM mellett nehézkes a használata ● Inkább egyszerűbb eszközöket használnék → Python programok ● OSM kimenet → Közösségi egyeztetés
  • 11. Külső adatok félautomatikus importálása11 BKK – állomások – JOSM
  • 12. Külső adatok félautomatikus importálása12 BKK GTFS és OSM megfgyelések I ● Taginfo: ● gtfs csak source-ként van; ● gtfs_id = 0 ● ref:bkk = 118 ● ref:bkv = 5260 ● fref:bkv = 1 ● ref = 182 (rengeteg más is használja, nehéz kiválogatni) ● code = 876 ● Módosítások ● https://github.com/KAMI911/osm-import- request/tree/master/ref_bkv_to_ref_bkk ● BKK: 6482 az OSM-ben, 7419 a GTFS-ben
  • 13. Külső adatok félautomatikus importálása13 BKK GTFS és OSM megfgyelések II ● Eltérések és hibák okai ● Nevek eltérése ● A név a fő egyeztetési szempont ● Aluljáró kijáratok neveiben szerepelnek a kijáratok betűjelei ● Örs vezér tere [A] ● A kisföldalatti állomásnevekben az irányok is benne vannak ● Oktogon (» Mexikói út) ● Oktogon (» Vörösmarty tér) ● Túl sok hasonló megálló van a közelben ● A távolság a másik egyeztetési szempont ● Több objektumon van ref:bkk címke egy állomáson belül ● {n}, F{n} mellett, L*, LM*, CSLM*, CSF*, stb csomópontok és lejáratok
  • 14. Külső adatok félautomatikus importálása14 BKK – útvonalak – JOSM
  • 15. Külső adatok félautomatikus importálása15 MÁV – állomások – JOSM
  • 16. Külső adatok félautomatikus importálása16 MÁV GTFS és OSM megfgyelések I ● Taginfo ● ref:mav = 1295 ● Módosítások ● https://github.com/KAMI911/osm-import- request/blob/master/ref_mav/osm_same_name.osm ● MÁV: 1295 az OSM-ben, 1230 a GTFS-ben
  • 17. Külső adatok félautomatikus importálása17 MÁV GTFS és OSM megfgyelések II ● Eltérések és hibák okai ● Rosszul címkézett állomások ● railway=station-ból nem egy van → public_transport=stop_position ● Névtelen állomások ● Nem MÁV állomások ● Metró- és egyéb állomások ● Ezeket az importálás során kiszűrtem
  • 18. Külső adatok félautomatikus importálása18 „A simple station”
  • 19. Külső adatok félautomatikus importálása19 „A simple halt” public_transport = platform railway = platform ref = 2 area = yes public_transport = platform railway = platform ref = 1 area = yes building=train_station railway = stop name = Newton public_transport = stop_position train = yes local_ref = 2 landuse = railway
  • 20. Külső adatok félautomatikus importálása20 MÁV – útvonalak – JOSM
  • 21. Külső adatok félautomatikus importálása21 Tömeges importálás
  • 22. Külső adatok félautomatikus importálása22 Tömeges importálás I ● Előkészületek ● Adatok és OpenStreetMap megismerése ● Mit ronthat el az importálás ● Közösségi igénykeltés ● Tervezett import megbeszélése ● Komplexebb importálások ellenőriztetése a közösséggel ● Licenc és engedélykérés ● https://github.com/KAMI911/E12n/tree/master/osm
  • 23. Külső adatok félautomatikus importálása23 Tömeges importálás II ● Adminisztráció ● Importálás oldal, dokumentálás ● https://wiki.openstreetmap.org/wiki/WikiProject_Hungary/Import%C3%A 1l%C3%A1s ● Import ellenőriztetése ● Helyi ● Globális: imports@openstreetmap.org ● Importálás elvégzése ● Feltöltés ● Közösség tájékoztatás ● Dedikált OSM account: nev+projekt@gmail.com trükk)
  • 24. Külső adatok félautomatikus importálása24 Elvégzett feladatok
  • 25. Külső adatok félautomatikus importálása25 Elvégzett feladatok ● Importálások hozzáadása a wiki oldalhoz ● https://wiki.openstreetmap.org/wiki/WikiProject_Hungary/Imp ort%C3%A1l%C3%A1s ● A ref, ref:bkk, ref:bkv, code egységesítése ref:bkk-ra (első ötlet „gtfs_id” volt) ● 2011-es importálás frissítése és javítása ● Hibásan írt BKK megállónevek javítása ● MÁV GTFS adatokból a ref:mav felvitele ● Itt még nem voltak importált adatok ● GO-Sync használata és fejlesztése helyett apró Python programok készítése
  • 26. Külső adatok félautomatikus importálása26 Python percek
  • 27. Külső adatok félautomatikus importálása27 Python alapú munkafolyamat Python progam OSM over-pass lekérdezések Külső adatok CSV és web Python külső modulok CSV-fájl OSM XML fájl Ellenőrzés OSM importálás JOSM progam OSM javítás JOSM progam
  • 28. Külső adatok félautomatikus importálása28 Felhasznált eszközök ● Adatkezeléshez ● Numpy ● Pandas ● Lxml ● BeautifulSoup ● Nominatim és OverPass lekérdezések ● OSMPythonTools ● Térbeli keresés ● Scipy
  • 29. Külső adatok félautomatikus importálása29 Fejlesztés alatt lévő eszközök https://github.com/KAMI911/GTFS2OSM ● g2o-stops.py ● BKK és MÁV GTFS adatok összehasonlítása az OSM adatokkal ● CSV és OSM kimenet ● g2o-shape.py ● GTFS adaton alapján OSM LineString ● OSM kimenet ● hu_uic_parser.py ● http://www.vpe.hu/takt oldalról az adatok CSV-fájllá alakítása ● CSV kimenet, később OSM kimenet is importáláshoz
  • 30. Külső adatok félautomatikus importálása30 OSM fájl készítés def generate_xml(pd): from lxml import etree import lxml osm_xml_data = etree.Element('osm', version='0.6', generator='JOSM') for index, row in pd.iterrows(): data = etree.SubElement(osm_xml_data, 'node', action='modify', id='{}'.format(row['osm_id']), lat='{}'.format(row['osm_lat']), lon='{}'.format(row['osm_lon']), user='{}'.format(row['osm_user']), timestamp='{}'.format(row['osm_timestamp']), uid='{}'.format(row['osm_uid']), changeset='{}'.format(row['osm_changeset']), version='{}'.format(row['osm_version'])) comment = etree.Comment(' Stop name: {0}, ID: {1} '.format(row['stop_name'], row['osm_merged_refs'])) data.append(comment) if 'railway' in looking_for: row['osm_tags']['ref:mav'] = row['stop_id'] for k, v in row['osm_tags'].items(): tags = etree.SubElement(data, 'tag', k='{}'.format(k), v='{}'.format(v)) osm_xml_data.append(data) return lxml.etree.tostring(osm_xml_data, pretty_print=True, xml_declaration=True, encoding="UTF-8")
  • 31. Külső adatok félautomatikus importálása31 Overpass API lekérdezés def query_overpass(area_id, query_statement, element_type='node'): # Query Overpass based on area global overpass query = overpassQueryBuilder(area=area_id, elementType=element_type, selector=query_statement) return overpass.query(query) city = 'Budapest' local_area_id = get_area_id(city) overpass = overpass.Overpass() p = '"highway"="bus_stop"' osm_stops_query = query_overpass(str(local_area_id), p, t)
  • 32. Külső adatok félautomatikus importálása32 BeautifulSoup adatgyűjtés table = soup.find('table', attrs={'style': 'text-align: left;'}) table_body = table.find('tbody') rows = table_body.find_all('tr') for row in rows: cols = row.find_all('td') link = cols[1].find('a').get('href') if cols[1].find('a') != None else [] sub_soup = download_soup('{}/{}'.format(link_base, link)) if sub_soup != None: table = sub_soup.find('table', attrs={'style': 'text-align: left;'}) table_body = table.find('tbody') sub_rows = table_body.find_all('tr') add_cols = [] for sub_row in sub_rows: sub_cols = sub_row.find_all('td') sub_cols = [element.text.strip() for element in sub_cols] add_cols.append(sub_cols[1]) cols = [element.text.strip() for element in cols] cols.append(link) if 'add_cols' in locals(): cols.append(add_cols) data.append(cols) df = pd.DataFrame(data=data[1:], columns = data[0])
  • 33. Külső adatok félautomatikus importálása33 Levelezés
  • 34. Külső adatok félautomatikus importálása34 Levelezés Szeretnénk arra kérni az Ön által képviselt intézményt, hogy a fenti licenceknek megfelelően legyenek szívesek az OpenStreetMap projekt részére az Önök tulajdonában álló téradatokat biztosítani, OdbL licenccel kompatibilis licenc alatt. Az így közzétett adatok beépülhetnek az OpenStreetMap térképi adatbázisába és a közösség számára hasznosíthatóvá válnak. (https://github.com/KAMI911/E12n/tree/master/osm)
  • 35. Külső adatok félautomatikus importálása35 Válasz A cégtől: „Köszönjük a megkeresést. Amennyiben a jövőben részünkről igény merül fel az együttműködésre, jelentkezni fogunk.”
  • 36. Külső adatok félautomatikus importálása36 1. válasz B cégtől: „Ezzel egyidejűleg 197 járásban jelenik meg fogyasztóvédelmi elsőfokú hatósági feladatkör, így tehát a fogyasztók 2017. január 1-től panaszaikkal elsősorban a területileg illetékes járási hivatalokhoz fordulhatnak.” Melléklet: lista a fogyasztóvédelmi hatóságok elérhetőségeiről
  • 37. Külső adatok félautomatikus importálása37 2. válasz B cégtől: „Kérem, hogy használja a szabadon felhasználható listát, ami a honlapon van.”
  • 38. Külső adatok félautomatikus importálása38 Válasz C cégtől: „Tájékoztatjuk, hogy az illetékesektől kapott információ alapján nem tudjuk fájl formájában biztosítani az adatbázist, a honlapon elhelyezett információk a publikusak.” A honlapon találtam GeoJSON-t :)
  • 39. Külső adatok félautomatikus importálása39 Problémák
  • 40. Külső adatok félautomatikus importálása40 Problémák I ● Kommunkáció ● Adatforrások felkutatása ● Mi a megfelelő formula az adatkérésre? ● https://github.com/KAMI911/E12n/tree/master/osm ● Elérhető =≠ Szabad ● Publikus =≠ Szabad ● Szabadon használható, de az adat copyright-tal védett ● OpenStreetMap importálás ● Mi az importálás feltétele? ● Mekkora egyetértés kell? ● Elegendő-e egy határidő az importálás előtt? ● Mennyi legyen az?
  • 41. Külső adatok félautomatikus importálása41 Problémák II ● OpenStreetMap adatok változatossága ● Igény az egységes címkézésre ● Részben jól szerkesztett OSM adatok ● Hibakereső / Hibakeresés ● Léteznek már ilyen eszközök?
  • 42. Külső adatok félautomatikus importálása42 További tervek II ● Új adatok gyűjtése (POI) ● Boltok, áruházláncok ● Bankok ● Éttermek, és étteremláncok ● UIC (International Union of Railways) ● Meglévő POI-k egységesítése ● Azonos írásmód ● Azonos kategória ● Wiki oldal → közösen összeállítani ● Azonosítási mechanizmus, szabály ● Elegendő-e az OSM ID, vagy valami ref:* szükséges
  • 43. Külső adatok félautomatikus importálása43 További tervek III ● Adatok adatbázisba töltése ● GTFS (Postgres, PostGIS, GTFSDB, ORM, python) ● https://github.com/OpenTransitTools/gtfsdb ● OSM (Postgres, PostGIS), napi frissítéssel ● POI ● Adatbázis építés a POI-kból (cím, koordináta, nyitvatartás, tag-ek) ● Nominatim alapján koordináták ● A saját POI adatbázis automatikus frissítése ● Webes szerkesztő ● Webes megjelenítő ● Ütemezett automatikus frissítések OSM irányban
  • 44. Külső adatok félautomatikus importálása44 Köszönöm a fgyelmet!
  • 45. Külső adatok félautomatikus importálása45 Kérdések
  • 46. Külső adatok félautomatikus importálása46 További eszközök, információk I GTFS2OSM: https://github.com/KAMI911/GTFS2OSM/ OSM import request-jeim: https://github.com/KAMI911/osm-import-request OSM engedélykérés adatok felhasználásához: https://github.com/KAMI911/E12n/tree/master/o sm Osm-python-tools: https://github.com/mocnik-science/osm-python-t ools
  • 47. Külső adatok félautomatikus importálása47 További eszközök, információk II GTFSDB: https://github.com/OpenTransitTools/gtfsdb GTFS: https://developers.google.com/transit/ GTFS validator: https://github.com/google/transitfeed Állomások (1143): http://overpass-turbo.eu/s/lBc Állomások (2252): http://overpass-turbo.eu/s/lBd https://transit.land/feed-registry/?country=Hung ary https://github.com/mapourtransit/gtfs-maker