Ist es möglich POI Daten (z.B. Restaurant) herunterzuladen ?

@Netzwolf: in Deiner Datei fehlt ein Copyright-/Lizenzvermerk. Mit einem solchen Vorbild kann bammab (so er denn will) es ja nie lernen :wink:

Klaro ! :smiley:

Es steht wohl jeden zu so seine Daten zu verarbeiten wie er es für Sinnvoll hält!

Ob da gleich diverse DB’s zum Zuge kommen lass ich da unkommentiert!

Ein Auszug aus der Germany.osm.pbf aller Restaurant und Aufbereitung als CSV dauert da ca. 90sec und ist mit 4GB freiem Hauptspeicher zu realisieren.

Dazu wird nur osmconvert und osmfilter benötigt.

Als Beispiel:


osmconvert  --drop-version --drop-author --hash-memory=4096 --max-objects=1000000000 --all-to-nodes --emulate-osmosis  --out-o5m germany.osm.pbf > germany-Z.o5m


osmfilter --keep= --keep-nodes="amenity=restaurant" germany-Z.o5m> germany-R.o5m


osmconvert  germany-R.o5m --csv-separator="," --csv="@id @lon @lat name cuisine addr:city addr:postcode addr:street addr:housenumber phone email website contact:phone contact:email contact:website" --csv-headline --out-csv> restauant.csv

Ergebnis:


@id,@lon,@lat,name,cuisine,addr:city,addr:postcode,addr:street,addr:housenumber,phone,email,website,contact:phone,contact:email,contact:website
359832,6.9637550,50.9051565,Campus,,,,,,,,,,,
3325823,13.6571918,51.1130814,Grundmühle,,,,,,,,,,,
16257541,8.6696746,49.5537829,Woinemer Hausbrauerei,,,,,,,,http://www.woinemer-brauerei.de,,,
16351361,8.6756383,49.5517432,Galileo,pizza,,,Grundelbachstraße,108,+49 6201 68883,,http://galileo.sx64.de/,,,
16351362,8.6749475,49.5506603,Gasthaus Eulenspiegel,,Weinheim,69469,Lindenstraße,21,,,,,,
16463584,8.6731761,49.5492597,Pizzeria Italia,italian,Weinheim,69469,Grundelbachstraße,39,,,,,,
17164622,11.6103857,48.3357971,Fürholzen,,,,,,,,,,,
18087087,11.7567485,48.1622175,Song Huong  Asia-Bistro,asian,,,,,,,,,,
20090856,11.7011077,47.8772492,Oberbräu,bavarian,,,,,,,http://www.gasthof-oberbräu.de/,,,
21294583,11.4572363,50.1079221,Alte Feuerwache,,Kulmbach,95326,Grabenstraße,4,+49 9221 877877,,http://www.die-feuerwache.de/,,,
...

Die addr: und die contact: Felder zu kombinieren ist ja ein klacks in Excel …

Man muß nur darauf achten das alles in UTF8 gespeichert ist - da wird gerne mit ANSI verunstaltet!

Um ein paar POI auf einer Website darzustellen, sicher nicht.

Allerdings hat bammab in Verlauf des Threads davon geschrieben, daß es eine kommerzielle Anwendung werden soll und daß die Anwender Daten ändern dürfen.

Dazu halte ich den Einsatz einer - noch so kleinen - Datenbank für sinnvoll unabdinglich.

Gruss
walter

Es sollte so rauskommen, oder?
Name | Adresse | GPS Lat | GPS Long | Telefon | email | website | Kategorie (Restaurant, Bar, Café etc.)

die restlichen Felder zu ergänzen ist nur ne Fleißaufgabe


require 'open-uri'
require "net/http"
require 'rexml/document'

def query_overpass(object_type, left,bottom,right,top, key, value)
   base_url = "http://www.overpass-api.de/api/xapi?"
   query_string = "#{object_type}[bbox=#{left},#{bottom},#{right},#{top}][#{key}=#{value}]"
   url = "#{base_url}#{URI.encode(query_string)}"
   resp = Net::HTTP.get_response(URI.parse(url))
   data = resp.body
   return data
end


overpass_result = REXML::Document.new(overpass_result = query_overpass("node", 7.1,51.2,7.2,51.3,"amenity","restaurant"))

overpass_result.elements.each('osm/node') {|x|
  if !x.elements["tag[@k='name']"].nil?
    print x.elements["tag[@k='name']"].attributes["v"]
  end
  print " | "

  if !x.elements["tag[@k='addr:postcode']"].nil?
    print x.elements["tag[@k='addr:postcode']"].attributes["v"]
  end
  print ","
  if !x.elements["tag[@k='addr:city']"].nil?
    print x.elements["tag[@k='addr:city']"].attributes["v"]
  end
  print ","
  if !x.elements["tag[@k='addr:street']"].nil?
    print x.elements["tag[@k='addr:street']"].attributes["v"]
  end
  print ","
  if !x.elements["tag[@k='addr:housenumber']"].nil?
    print x.elements["tag[@k='addr:housenumber']"].attributes["v"]
  end
  print " | "
  print x.attributes["lat"]
  print " | "
  print x.attributes["lon"]

  # line break
  puts
}

Ergebnis


Effmann's Restaurant | 42113,Wuppertal,Am Jagdhaus,100 | 51.2787378 | 7.1063065
Dios Taverne | ,,, | 51.2557935 | 7.1376288
Ralfs Boxenstop Imbiss | 42109,Wuppertal,Uellendahler Straße,406 | 51.2786471 | 7.1655499
Kebab Stube | 42105,Wuppertal,Briller Straße,15 | 51.2550353 | 7.1313882
Queerbeet | ,,, | 51.2558117 | 7.1391461
Bierhaus Sion | 42103,Wuppertal,Friedrich-Ebert-Straße,40 | 51.2555329 | 7.1377949
El Jamon | ,,, | 51.2543378 | 7.1349188
Mezcla2 | 42103,Wuppertal,Luisenstraße,61 | 51.2566067 | 7.1377865
Mezcla2 | 42103,Wuppertal,Luisenstraße,61 | 51.2566067 | 7.1377865
Dehli-Roma | 42103,Wuppertal,Friedrich-Ebert-Straße,37 | 51.2553710 | 7.1378582
Thai an | 42103,Wuppertal,Friedrich-Ebert-Straße,49 | 51.2551462 | 7.1372307
Zur Voßdelle | 42113,Wuppertal,Nevigeser Straße,316 | 51.2805247 | 7.1249164
Best Döner | 42369,Wuppertal,Staasstraße,46 | 51.2266228 | 7.1988778
Restaurant Delminium | 42103,Wuppertal,Hofkamp,91 | 51.2580291 | 7.1549056

Nahmd,

Ich weiß. Aus Faulheit wollte ich bei osmconvert den Code stehlen, der den Vermerk ins CSV schreibt, habe den aber leider bis jetzt nicht gefunden. :frowning:

Gruß Wolf

Es gibt keinen Schlüssel “contact” in diesem Schema, schon gar nicht ohne Wert (also “leeren”). Der Doppelpunkt wird dabei als Namespace genutzt, nicht als Subkey. Z.B. bei "disused:"= ist das genauso. Eigentlich hat der Doppelpunkt aber dieselbe Bedeutung wie z.B. ein ‘a’ oder ‘R’.

Wenn man weiß wie es geht wäre das machbar :stuck_out_tongue:

Aber so wie du es gemacht hast wäre es Super. Jetzt muss ich nur noch rausbekommen und rumrätseln wie ich das hin bekomme.

http://wiki.openstreetmap.org/wiki/DE:Key:amenity (ty netzwolf)
stehen ja schon ein paar amenity die ich benötige.
Also Restaurant,pub, ice_cream, food_court, fast_food, cafe, biergarten, bar, bakery, steak, pasta, pizza, sushi, asia, nightclub

Die wirklich wichtigen sind erst einmal denke
Name | Adresse | GPS Lat | GPS Long | website | Kategorie (Restaurant,pub, ice_cream, etc.)

Leider kann ich das nicht über eine API im Moment realisieren, da ich an ein Theme gebunden bin, welches nicht die normalen Kategorien benutzt wie eine API.

Schön, dass das deine -derzeitigen- Wünsche erfüllt. Aber wie sieht es denn nun wirklich mit den langfristigen Plänen aus?

Ist das noch irgendwie aktuell? Sag nein und ich halte die Klappe laß dich zufrieden :wink:

Gruss
walter

Meine langfristigen Pläne mhh… ein paar Jahre älter werden, ein Haus kaufen und quängelnde Kinder haben :wink: oder was meinst du jetzt ? :stuck_out_tongue:
Auf OSM bezogen oder auf das Projekt ? :wink:

Ich steh gerade aufn Schlauch :smiley:

also wenn du deinen eigenen Postings zu deinem Projekt nicht verstehst, lassen mer’s halt.

Gruss
walter

Ergebnis wie in OSM halt, mal ohne Namen, mal ohne Website, mal ohne Adresse, mal mit Adresse aber ohne Hausnummer


Belgische Fritten |  | 51.2587416 | 7.1455466 |  | fast_food |
Mazzino |  | 51.2563311 | 7.1465149 |  | cafe |
Fizz and Sour | 42103, Wuppertal, Aue, 56 | 51.2541959 | 7.1373801 | http://www.mad-dog.info/ | fast_food |
Pizza Shop | 42109, Wuppertal, Uellendahler Straße, 132 | 51.2716427 | 7.1488933 | http://www.pizzashop-wuppertal.de | fast_food |
Tacheles e.V. |  | 51.2692243 | 7.1747673 |  | cafe |
Bar Celona | 42103, Wuppertal, Kasinostraße, 19-21 | 51.2569000 | 7.1430018 |  | bar |
Vivendo | 42105, Wuppertal, Alte Freiheit, 22 | 51.2563488 | 7.1485042 |  | fast_food |
Calvin7 |  | 51.2563469 | 7.1478736 |  | bar |
Mentes Grillorant | 42105, Wuppertal, Wiesenstraße, 42 | 51.2648381 | 7.1438877 |  | fast_food |
Maxim | 42103, Kirchstraße,  | 51.2567933 | 7.1473524 |  | bar |
 |  | 51.2596181 | 7.1474583 |  | fast_food |


Hier der Code…hast Glück, dass ich gerade an etwas rumprobiere, was sehr ähnlich ist. Fehler abfangen oder sowas musst Du selber einbauen, BBOX ändern wirst Du ja hinkriegen. Oh, und alle Lösungen bezogen sich bisher auf Punkt-POIs (Nodes). Flächenhafte POIs sind da nicht dabei.
http://pastebin.com/apT3wYmF

Wo kann ich mir jetzt den Kasten Bier abholen?

Also ich muss mir die Datei
germany-latest.osm.pbf,
runterladen und die datei dann convertieren. Anschließend muss ich dann
in den Filter deinen Code eingeben und anschließend spuckt der mir die
liste als excel datei aus?

Was ist grob der Unterschied zwischen Punkt- und Flächenhaften Pois ?

Wenn du mir das noch beantwortest sag ichs dir :stuck_out_tongue:

Punkte sind Punkte und Flächen sind Flächen. Klar? Nein mal im Ernst. Bei Punkt POIs gibt es genau einen Punkt der festlegt hier ist das. Bei Flächen gibt es, wie bei Wegen auch, diesen Punkt nicht. Flächen und Wege sind eine Annsammlung von Punkten, welche diese Objekt bilden. Dann muss man nach einem geeigneten Punkt für die Darstellung/Auswertung suchen. (Schwerpunkt und wie sie alle heißen)

Nahmd,

Punktobjekte beschreiben nur die Existenz und Lage z.B. einer Gaststädte, nicht aber das Gebäude. Flächenobjekte werden (oft) benutzt, wenn auch das Gebäude und seine Form erfasst wird. Wenn das Gebäude einen Innenhof hat und sehr detailliert erfasst wird, so wird ein komplexes Objekt (“Relation”) genutzt.

Beispiele aus der OSM-Datenbank:

Die beiden letzteren muss/kann man vor Nutzung als POI auf einen Punkt zusammenziehen. Dies erledigt z.B. das Programm “osmconvert”, wenn man es mit dem Parameter “–all-to-nodes” aufruft.

Gruß Wolf

Edit: Doppelposting getilgt.

Du musst gar nichts runterladen. Du musst nur das Gebiet, welches Dich interessiert, ändern; also die sogenannte Bounding Box ändern. Im Code steht 7.1,51.2,7.2,51.3
Ändere das nach dem Schema left,bottom,right,top für Dein Gebiet
Ne Excel Liste ist das nicht direkt. Wenn Du das in Excel importierst, kannst Du ja | als Trennzeichen definieren und dann gehts.

Mich beschleicht aber irgendwie das Gefühl, dass Dich das ganze etwas überfordert.

@Netzwolf Danke für deine Erklärung. Du hast dir auch nen Kasten verdient :wink:

@SunCobalt Du hast mit deiner Vermutung recht, dass mich das überfordert. Aber ich will euch nicht damit “rumnerven” deswegen probiere ich es erst mal selber
und wenn ich es nicht schaffe muss ich halt schauen ob ihr mir noch mal helft. Aber auch wenn es doof klingt. Ich glaub ich krieg das nicht gebacken :smiley:

Dafür reicht wahrscheinlich sogar 1 GB Hauptspeicher, ohne dass es deswegen langsamer läuft.
Trotzdem ist der Weg mit der Overpass-API wirklich bequem. Weiß aber nicht, wie lange dort die Abfrage der ganzen Liste dauert.

Die osmconvert-Zeile lässt sich noch verkürzen:
–drop-author ist in --drop-version schon drin.
–hash-memory ist vermutlich nicht notwendig, so hohe Objekt-IDs gibt es bei der Input-Datei noch nicht.
–emulate-osmosis hat nur bei XML-Ausgabe-Format Auswirkungen.
–out-o5m ist überflüssig, wenn man -o= verwendet.

Beispiel:

osmconvert --drop-version --max-objects=1000000000 --all-to-nodes germany.osm.pbf -o=germany-Z.o5m

Die osmfilter-Zeile könnte man ein bisschen verkürzen, weil es ja sowieso nur Node-Objekte gibt. Einen Vorteil hat das aber nicht.
Was aber eher ungünstig ist: die defaultmäßig auf XML eingestellte Ausgabe wird umgeleitet in eine Datei, die mit o5m endet. In dieser Datei landen dann aber vermutlich .osm-formatierte Daten, also als XML. osmfilter hat keine Chance, den Dateinamen des Ziels zu erfahren und sich entsprechend anzupassen. Besser wäre es, auch hier -o= zu verwenden:

osmfilter --keep="amenity=restaurant" germany-Z.o5m -o=germany-R.o5m
osmconvert germany-R.o5m --csv-separator="," --csv="@id @lon @lat name cuisine addr:city addr:postcode addr:street addr:housenumber phone email website contact:phone contact:email contact:website" --csv-headline -o=restauant.csv

Bitte nicht als Genörgel verstehen! Ich wunder mich eh immer, wie gut du dich mit diesen Programmen auskennst und wie leicht du solche Toolchains zusammenbaust. :slight_smile:

Schönen Abend
Markus

Ich hatte dir eine Nachricht/Email geschrieben :slight_smile:

Ich bekomme es nämlich nicht hin! :-!