OSM-POI -> MySQL-DB oder PostGis: Methodenfrage

hallo und guten Abend,

Update; vorweg: dieses Posting ist etwas lang - ich werde auf Anraten von mehreren Usern hier mal eine persönl. Seite hier anlegen: "solche länglichen technischen Darstellungen eine private OSM-Wiki-Seite: http://wiki.openstreetmap.org/wiki/User:tagtheworld "
Das kommt in den nächsten Tagen. ] Dort kommt dann genau rein was ich schon gemacht hab und was ich will.

ich habe bisher immer meine Daten in CSV-Dateien hinterlegt: dabei habe ich mit folgenden Tools gearbeitet.

osmconvert und
osmfilter

immer wieder wird mir gesagt ich sollte doch auf Postgis setzen - weg von dem “Low-Level-Processing.”

Eigentlich - denke ich, ist mir das Thema etwas zu groß für das was ich mache. Deshalb hatte ich eine andere Überlegung und nun wollte ich Euch fragen, ob es gewisse Grundlagen dafür gibt. Was mache ich in der Regel: In der Regel frage ich in den OSM-Daten nur bestimmte POI ab erstelle daraus eine Liste - und wenn es hoch kommt (in einem von 50 Fällen) mache ich daraus eine thematische Karte. In der einfachsten Anwendung wären das also lediglich POIs und einen Überblick darauf. Sehr gern will ich diese Daten dann immer aktuell halten. Also updates haben.
Denke dass es nicht die beste aller Optionen ist dafür mit CSV basierten calc-listen zu arbeiten - sondern ggf doch etwas angemessener ist mit mysql zu arbeiten. Meine Überlegungen gehen also nun dahin diese Daten lediglich in einer CSV vorzuhalten sondern in einer mySQL-Datenbank.

Was ich bisher gemacht habe; ich habe z.B. nach Restaurants geschaut mit den folgenden tags:

@id @lon @lat amenity name adress [as town, street, housnumber] website und mailadress. 

Aufs Ganze gesehen interessiert mich nur die REGION Deutschland - bzw. die Bundesländer vgl. http://download.geofabrik.de/europe/germany.html

Dort sind es die Files von ca. 10 MB (Bremen) bis zu etwa 390 MB (Nordrhein Westfalen) - wie man sieht sind diese osm.pbf-files noch nicht sehr groß - oder was meint ihr denn;

**Haupt-Frage: ** welche Methode ist denn hier die beste? - Die Ergebnisse in einer mysql-db zu speichern oder sie in Calc-sheets speichern (mit csv Daten)1

Gearbeitet hab ich mit dem folgenden Toolset:

  • osmfilter
  • osmconvert

** ein Bspl: **

./osmconvert ein file aus deutschland ....osm --all-to-nodes --csv="@id @lon @lat amenity name" --out-csv -o=outfile.csv

und dann

grep cafe outfile.csv > cafes.csv
grep restaurant outfile.csv > restaurants.csv
cat cafes.csv restaurants.csv > cafes_and_restaurants.csv

b. auf der anderern Hand koennte ich das ggf. auch so machen: use overpass-api:


<query type="node">
  <has-kv k="place" v="city"/>
  <has-kv k="name" v="any town "/>
</query>
<query type="node">
  <around radius="1000"/>
    <has-kv k="shop"/>
</query>
<print/>

Frage -: welcher Weg ist denn der (efffizienteste) aller Wege!? - Besonders im Hinblick auf die Frage einer Nachhaltigkeit.

b. - die overpass-api-methode die ein XML-file (mehr oder weniger gross erzeugt )

Ein XML file welches ich von dem Overpass-Api ergeugt haben wollte braucht dann das load in eine mysql datenbank.
also - ich koennte ein LOAD XML LOCAL INFILE ‘/home/jay/Downloads/interpreter1’ into table jayDB.xml1 (id);

… und die DATEN dann anbieteen - mit XML SIMPLE ,


<osm version="0.6" generator="Overpass API">
<note>
The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.
</note>
<meta osm_base="2013-03-07T14:54:02Z" areas="2013-03-07T10:37:02Z"/>
<node id="240486180" lat="50.9744274" lon="3.0152858">
<tag k="addr:housenumber" v="9"/>
<tag k="addr:street" v="Marktplaats"/>
<tag k="amenity" v="cafe"/>
<tag k="email" v="vandaelekoen67@skynet.be"/>
<tag k="name" v="Paviljoentje"/>
<tag k="opening_hours" v="Mo-Su 09:00+; Tu off; Th 09:00-14:00"/>
<tag k="phone" v="+3251636211"/>
<tag k="website" v="http://www.paviljoentjestaden.be"/>
</node>
<node id="244312208" lat="51.2461401" lon="5.4390455">
<tag k="amenity" v="cafe"/>
<tag k="created_by" v="JOSM"/>
<tag k="name" v="De Club"/>
</node>

Es geht also um eine Methodenfrage: gibt es eine Methode die Abfrage so zu machen dass ich die diffs in einer Mysql db erhalte - und so eine nachhaltige Methode habe? Soll ich hier für Mysql einsetzen oder doch gleich PostGis - denke mal dass ich für POI alleine die PostGis nicht brauche!?!

Freu mich auf Tipps u. eine lebendige Diskussion
tagtheworld

Update 2. Anm zu Loesungen: **Ideen ** habe ich bekommen - etwa hier: A self-updating OpenStreetMap database of US bridges – a step-by-step guide. http://oegeo.wordpress.com/2012/03/06/a-self-updating-openstreetmap-database-of-us-bridges-a-step-by-step-guide/ I want all bridges in the US that are mapped in OpenStreetMap in a PostGIS database. There are about 125,000 …

Das trifft es - ziemlich genau sogar - was ich machen will. Ebenso das untere Beispiel hier aus dem Forum.

OSM-Poi → mySQL-Datenbank … ?
http://forum.openstreetmap.org/viewtopic.php?pid=251053#p251053

Das alles kommt demnächst in die private OSM-Wiki-Seite: http://wiki.openstreetmap.org/wiki/User:tagtheworld

Vorab: Das ist hier ein Diskussionsforum und kein persönlicher Spickzettel. Bitte bring mal die Anforderung kurz und knackig auf den Punkt und lass das ganze irrelevante Zeug einfach mal weg. Danke.

Overpass API kennt ab Version 0.7.50 die Möglichkeit, Änderungen seit einem bestimmten Zeitstempel auszugeben. Hier mal ein Beispiel:


[adiff:"2013-12-24T16:30:00Z"];node({{bbox}})[amenity=drinking_water];out;

Damit könnte man auch eine DB aktuell halten, wenn man sich jeweils den letzten Updatezeitstempel merkt.
Von der Stange wird’s m.W. aktuell nichts geben, da ist noch Eigeninitiative gefragt.

Mehr Infos: http://www.fossgis.de/konferenz/2014/programm/attachments/472_overpass.pdf

hallo couchmapper

danke für deine Antwort _ und natürlich auch für deine Tipps vorweg. WERDE das bis morgen mal noch überarbeiten und dann die Anforderungen auf den Punkt bringen.

die Tipps auf der Fossgis seite seh ich mir auch noch an. UND nochmals die Overpass-Api

VG TTWorld

Hi,

der Knackpunkt bei der Frage “Mysql oder PostgreSQL/PostGIS?” ist der geplante Umgang mit den dort abgespeicherten Koordinaten.

Wenn du die Koordinaten als reinen Text abspeichern willst - also genau in dem gleichen Format wie in den CSV-Daten, mach das ruhig mit Mysql.

Möchtest du aber Abfragen der Art “Gib mir alle Objekte aus meiner DB, die im Umkreis von 500 Metern um diesen einen Punkt liegen”, bist du mit PostgreSQL/PostGiS besser bedient. Kannst natürlich erstmal klein mit PostgreSQL (ohne PostGIS) anfangen, dann fällt dir der später Umstieg leichter.

Ansonsten empfehle ich für solche länglichen technischen Darstellungen eine private OSM-Wiki-Seite: http://wiki.openstreetmap.org/wiki/User:tagtheworld

Gruss
walter

guten Abend Wambacher

vielen Dank für deine schnelle Antwort. Die ist sehr sehr hiflreich.

Dass ein Anfang mit mySQL moeglich ist find ich klasse. Kenn MySQL schon etwas. PostgreSQL ist mir noch fremd. Aber ich denke, dass sich der Einstieg lohnt. Also mit PostgreSQL anzufangen ist wohl mal ein erster Schritt.

Dem ist so - ich will im Grunde textbasiert arbeiten - Es geht im Grund nicht um die Erstrellung von Maps.

Denke dass der Vorzug von PostGis sich vor allem im Bezug auf alle dezidierten Map-Funktionen anbietet. Wenn man aber eher textbasiert ist dann wird das ggf. nicht noetig mit einer so leistungsfähigen DB zu beginnen.

Denke dass meine Arbeit - viel viel eher mit **LOW-LEVEL-DB-Features ** klarkommt.

Du hast Recht - ich werde eine privtate Wikiseite anlegen in den nächsten Tagen…

Viele Gruesse TagTheWorld

Deine Entscheidung.

Wie du sagst, kennst du MySql “schon etwas”. Ich würde das Projekt dennoch mit PostgreSQL machen, da du hier im Forum dafür bestimmt Support bekommst. MySql kennen wir wohl auch, aber benutzen es idR. nicht für OSM.

Gruss
walter

Hi Walter

vielen Dank für deine neue Nachricht in diesem Thread.

werde mir die PostgreSQL mal ansehen - wie du oben schon sagst - muss ich ja nicht in PostGis einsteigen. Meld mich auf alle Faelle wieder.

vg TagTheWorld

moin moin,

Das größte Problem für mich war “damals” die Frage “wie komme ich an die Daten in meiner DB ran?”. Das hat mich mehrere Tage BS&T (*) gekostet.
Du wirst dich da mit Webservern (Apache?), Skripten (PHP?, Java?) und Javascript rumschlagen müssen. Die DB an sich ist da relativ unkritisch, nur halte ich PostgreSQL halt langfristig für die sinnvollere Lösung.

Gruss
walter

ps: Ich hab das alles mit Jetty als Webserver, Java (“richtiges Java”!), Javascript mit Jquery (Ajax) für OpenLayers auf Ubuntu realisiert aber das ist einfach Oversized für ein kleines/mittleres Projekt.

*) Blood, Sweat & Tears

Hallo Walter, :slight_smile:

danke für deine Antwort - und auch die ermutigenden Worte.:). Das hilft schomal.

Denke mal, dass es in PHP wohl geht. Auch wenns BST benoetigt :slight_smile:

  • Bin mit SuseLinux vertraut. Mit PHP u. Apache auch etwas. Da ist es okay wenn PostgreSQL als Novum hinzukommt.

BTW; bin in dem Forum - in diesem thread http://forum.openstreetmap.org/viewtopic.php?pid=251053#p251053 )
aufmerksam geworden auf ein interessantes Skript - perlbasiert; Nicht schlecht. Weiß aber nicht ob er das weiterentwickelt hat.

Egal-ich werd mal sehen wie ich einsteige…

bis demnächst:)

Gruß
TagTheWorld