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

Ist eine Website und keine Anwendung. (Außer für dich ist eine Website eine Anwendung dann… ;))

Also das ist natürlich nicht die optimalste und schnellste Lösung. Aber da ich ich nicht zu viel Kleingeld in die Sache stecken möchte indem ich die Daten irgendwo kaufe nehme ich die Arbeit halt in Kauf.
Wobei ich bei den “Datenhändlern” die ich im Netz gefunden habe eh OSM als Quelle gesehen habe.

Von der PostGis Datenbank hab ich keine Ahnung. Muss ich mich mal ein Stück mit befassen und schauen ob mir das weiter hilft oder eher nicht.

Nahmd,

Man kann leider (defektes Taggingmodell) nicht einfach alle Futterstellen auswählen, sondern muss einzeln auflisten, welche man haben will. Ich hatte mich auf “restaurant” und “cafe” beschränkt, hab jetzt aber Fastfood, Kneipen und Biergärten ergänzt. Die Art der Küche wird getrennt im Feld “cuisine” erfasst; auch das habe ich jetzt ergänzt: download.

Telefonnummern, Emailadressen und Webseiten-URL können in unterschiedlichen Feldern eingetragen sein (email=* oder contact:email=*); dieser Wirrwarr hat bei OSM Methode und ein automatisches (verlustfreies) Umtaggen auf eine einheitliche Darstellung in der Datenbank ist leider unerwünscht; dadurch muss jeder einzene Nutzer der Daten diese Arbeit erledigen. Ich habs mir einfach gemacht und jeweils nur eines der möglichen Felder ausgelesen; da schaue ich aber noch nach, wie ich die Alternativfelder integriert bekomme.

Gruß Wolf

Für mich ist das auch eine Anwendung.

Nee, bei OSM bist du schon an der richtigen Quelle. Genau dafür gibt es uns ja.

Es ist halt die Frage, wie deine Webseite (als Anwendung) an die extrahierten OSM-Daten kommt.
Bei relativ statischen POI (alle Briefkästen meiner Stadt) ist das mit lokalen CSV-Daten schnell erledigt und es gibt ja auch einige Beispiele dazu im OSM-Wiki. Doch sobald a) die Fläche größer und b) die Aktualität wichtig wird, solltest du andere Mechanismen benutzen um die “Daten zur Anwendung zu bringen”.

Text-Files und auch CSV stehen da am unteren Ende und eine PostGIS-DB wohl am oberen Ende der Möglichkeiten. Es hängt halt von deinem Projekt ab.

Gruss
walter

Warum gibt es überhaupt einen “leeren” Schlüssel contact? Dieser kann eingespart werden und wie üblich phone, email, … eingetragen werden.
So sieht es mit der Nutzung von contact:phone=* : phone=* (45800 von 3500 user : 246000 von 17000 user)

Weil die Leute alle Kontaktinformationen zusammen unter einem Oberbegriff haben wollen?

Nachtrag:
Es gibt contact:phone, contact:website, contact:email, contact:fax und noch einige mehr. Wenn dies zusammen betrachtet, macht es meiner Meinung nach durchaus Sinn, dies unter einem Oberbegriff / Hauptschlüssel zusammen zu fassen.

Edbert (EvanE)

@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