Also ich wĂĽrde den ersten (Umkreis) Punkt mit einem alias belegen und anschlieĂźend diesen Alias bei around verwenden und dann halt fĂĽr way nochmal dasselbe:
And, finally, we search for all kind of objects with a certain tag within a bounding box. You need to repeat the tag for every type and to use the union operator. To allow us displaying everything on a map, we also ask for the nodes and ways that are referred by the relations and ways in the result:
Overpass XML
by the way: Harald - du nimmst dieses “itterative” Moment ja auch in deiner Erklärung auf - und formulierst die Abfrage für ways und node! - siehe oben!
Vorweg vielen Dank fĂĽr deine Antwort. Freue mich sehr!!
Das ist ja auch eine Supermethode. Und ich glaube dass ich deine Methode auch verwenden kann mit einer DB-Anbindung - ergo also die DATEN schlussendlich in einer DB speichern kann. Das muesste da auch gut gehen. Aehnlich wie mit dem hier angesprochenenen PHP-Beispiel.
Und ganz ganz wichitig: ich kann bei Deiner von dir beschriebenen Methode auch angeben, dass mir alle DATEN (TAGS) ausgegeben werden. Also alles was zu Schulen gehoert… gell!? Das wäre wichtig. Aber so wie ich osmfilter /.-convert verstanden hab, geht das dort alles prächtig.
Aber bei der FRAGE mit dem xpath-query häng ich immer noch etwas. vgl http://forum.openstreetmap.org/viewtopic.php?id=25905 Harald Hartmann hat dort schon sehr gute Ideen genannt - die ich halt umsetzen müsste. Muss mal sehen ob mir das gelingt… Bin noch nicht soo fit in PHP.
Frage: wie muss ich die xpath-requests erweitern dass ich nicht nur die daten erhalte
id
lat
lon
name (und ggf. noch ein default fĂĽr unnamed)
sehr sehr gerne hätte ich halt noch die ADRESSE - dazu. Und wenn moeglich auch noch Kontaktdaten - wie die Webseite. -. nur für die Fälle in denen es eben eine gibt!? Da gibt es die verschieden Moeglichkeiten - z.b.
//node():
D.h. nach allen XML Nodes “tag” suchen, die als Attribut k=“amenity” und v=“school” haben und dann
/..
eben den Parent zurĂĽckbekommen. Wenn man dann die dann mit foreach durchgehst, dann eben nochmal die Subabfragen machen. (so Harald Hartmann im anderen Thread)
**Zum Ausgangsproblem: **Der untenstehende code gibt ca. 2100 records (oder Zeilen ) aus aber immer nur im Format
ich will halt mehr daten - auch wenn die tags nicht immer gefĂĽllt sind und dann mal was leer bleibt. Deine Methode ist auch sehr interessant. werde die heut Abend mal ausprobieren.
Finales Ziel ist: die POI-DATEN dann schlussendlich auf DB zu speichern - also lediglich Schulen mit den Daten wie
-Adresse
-Kontakt(Webseite)
-Kontakt(email ) - sofern vorhanden…
nochmals - Der untenstehende code gibt ca. 2100 records (oder Zeilen ) aus aber immer nur im Format
#2173: ID:2882477853 [51.6261198,-0.7349665] Bowerdean Primary School
Bin halt noch am Ausprobieren wie es mit dem xpath-request geht - diesen zu erweitern…
<?php
$query = 'node
["addr:postcode"~"RM12"]
(51.5557914,0.2118915,51.5673083,0.2369398);
node
(around:1000)
["amenity"~"fast_food"];
out;';
$context = stream_context_create(['http' => [
'method' => 'POST',
'header' => ['Content-Type: application/x-www-form-urlencoded'],
'content' => 'data=' . urlencode($query),
]]);
$endpoint = 'http://overpass-api.de/api/interpreter';
libxml_set_streams_context($context);
$result = simplexml_load_file($endpoint);
printf("Query returned %2\$d node(s) and took %1\$.5f seconds.\n\n", microtime(true) - $start, count($result->node));
}
//
// 2.) Work with the XML Result
//
# get all school nodes with xpath
$xpath = '//node[tag[@k = "amenity" and @v = "school"]]';
$schools = $result->xpath($xpath);
printf("%d School(s) found:\n", count($schools));
foreach ($schools as $index => $school)
{
# Get the name of the school (if any), again with xpath
list($name) = $school->xpath('tag[@k = "name"]/@v') + ['(unnamed)'];
printf("#%02d: ID:%' -10s [%s,%s] %s\n", $index, $school['id'], $school['lat'], $school['lon'], $name);
}
?>
habe mal nach der methode von dir versucht vozugehen - u. deinen code leicht abgeaendert
das ist für alle die untenstehenen BEREICHE im Grunde dasselbe: - Auffällig; die Resultate in der csv-ausgegebenen DATEI sind wie folgt:
Echte Ergebnisse sind so dass man im Promillebereich WERTE hat mit einer vollen Zeile. Irgendwas stimmt hier wohl nicht…
**
update: ** habe den code für die Abfrage der dänischen Schulen verbessert; jetzt sehen die Ergebnisse etwas besser aus;:
Wie oben gesagt - sehen die Ergebnisse etwas (!!!) besser aus.
So wie es aussieht - hab ich da einen systemat. Fehler eingebaut. So wie ich das unten gemacht hab - so geht das offenkundig nicht.
**Ende des updates:
**
denmark
luxembourg
hamburg:
mache ich hier etwas falsch??? Es kommen fast nur non-sense-Ergebnisse raus… Nichts richtig verwertbares…
natürlich wird es oft so sein, dass du nicht alle der gewünschten Werte bekommst. Zum Beispiel gibt es sehr viele Schulen, bei denen keine Anschrift oder keine Webseite eingetragen ist. Du hast in diesen Fällen also nur die Geokoordinaten und muss ggf. die Anschrift selbst herausfinden - sofern du sie brauchst.
Beim Umwandeln nach CSV mit @lon und @lat holst du zudem alle nodes in die Liste, unabhängig davon, ob sie amenity=school haben.
Aber auch die Geokoordinaten werden dir fehlen fĂĽr alle Schulen, die nicht als node, sondern als way oder gar als Relation eingetragen sind. Um diese Koordinaten zu bekommen, kannst du relation- und way-Objekte in Nodes umwandeln (nach o.g. Schritt 3):
Um sicherzustellen, dass du nun nicht aus Versehen Eingänge oder Kioske in den Daten hast, die zu einem Schul-way oder einer Schul-Relation gehören, solltest du am besten noch einmal filtern. Das läuft blitzschnell durch, keine Angst.
das ist gut durchgelaufen - auch sehr schnell - und ich hatte hier schon Schwierigkeiten auf dem klienen notebook Da musste ich Dinge begrenzen limits einsetzen
Das ist mir passiert als ich auf einem File von Baden Württemberg mit 284 mb gearbeitet habe (siehe den o.g. Thread). Gibt es hier eine Erklärung dafür. Grundsätlich denke ich dass ich die OSM-Dinge auf einem sehr viel leistungsfaehigeren Rechner machen muss. Das Aktelle: Samsunng q 210, 12,1" OpenSuse 13.1: Intel® Core™ 2 Duo Proz. P8400 2,26 GHz 1066 MHz FSB 3 MB
Zu dem aktuellen Versuch beim netherlands-latest - mit 900 mb.
Jetzt fehlen die geodaten lon u. lat. Was nicht so schlimm ist. Auffällig allerdings ist schon, dass im Grunde alle Strassennamen fehlen.
** Fragen: **
Hab ich denn den Ausdruck irgendwie falsch geschrieben hier:
kann man sehen, ob denn da grundsätzlich mehr (vorhanden) ist? - mit einem offeneren Abfrage - nach allen Tags - (also dann mülsste ich den o.g. Ausdruck - vor allen Dingen in den Punkt (en) vier aendern, oder!? - oder mit einer Abfrage via overpass api ?
Grundsätlich gefragt: allerdings ist der von dir vorgeschlagene Weg ein sehr sehr gutes Verfahren. Würde das gern in eine DB überführen. Und diese dann regelmässig
up-to-date zu halten. Was meinst du denn hierzu. Bin hier auf der Suche nach einem probaten Verfahren. Und dies sollte sich dann eignen die Daten versch. Länder abzufragen.
Deshalb arbeite u. versuche ich derzeit die verschiedenen Abfragemethoden durch - etwa osmconvert, php mit xpath oder auch mal andere…:Ziel: das efffizienteste Verfahren zu finden das am besten passt für meine Aufgabge.
was auffällt - nach dem ich spanien u die niederlande mal nach der og. methode durchgearbeitet habe: Es gibt bei dem Code nie (!!!) eine Strasse eine Hausnummer und nur im Promille-Bereich eine Stadt.
Warum ist das denn so!? ist da was falsch
**
spain:** 10 tausend records
cp *.csv data
**netherlands 3 tausend records
**
da stimmt noch irgend was nicht… in der letzten Zeile - denk ich mal…
Die Kernfrage scheint jene zu sein : wie baue ich einen korrekten request der die Adress-tags richtig u. korrekt fomuliert;: vgl auch hier.:
Hast du denn dir mal zwischendurch die produzierten Dateien dutch-schools_nodes.o5m und dutch-schools-results.o5m genauer angeschaut, ob da noch addr: Elemente drin sind?
Schau doch mal mit einem Texteditor (nach Umwandlung in *.osm) oder benutze von osmfilter den Parameter --out-key … Details siehe OSM-Wiki dazu.
Hm, ich verwende oft ein Notebook mit 32-bit-Atom-Prozessor und 2 GiB RAM. Also, sehr viel Rechenleistung brauchst du nicht. Im schlimmsten Fall dauert alles halt etwas länger. Wichtig ist aber, dass du genügen Hauptspeicher in der Kiste hast, unter 2 GiB würde ich da nicht anfangen.
Guck bitte nochmal genauer hin. Wenn du die Listenspalte “addr:street” nicht mit anforderst, wird im Ergebnis natürlich auch keine drin sein. Gleiches gilt für die Hausnummer…
Auch die Idee von Stephan finde ich gut!
Bei meinen Versuchen hat es sich bewährt, Testdaten mit ein paar wenigen Datensätzen im XML-Format (.osm) selbst zu fabrizieren und dann die ganze Toolchain drüberlaufen zu lassen. Geht viel schneller, und vor allem weiß man dann genau, was man als Ergebnis erwartet. Wenns geklappt hat, kann man mit “echten” Daten arbeiten.
doe werte _ u. das Wachstum ergeben sich innerhalb einer Woche. Mich interessiert hier bes. ; sind das absolutze WERTE - also neue Einträge - sozusagen ganz neue Records oder
koennnen das auch aenderungen sein!?
binnen der letzen 9 Jahre hat sich doch jede Menge getan. Ich staune wie viel vor Jahren schon in Sachen Schule schon in OpenStreetmap verzeichnet ist -
naja - keine Ahnung wofür Dein Herz schlägt oder was dich so interessiert. Hier gibts ja im Grunde alles - einen ganzen Kosmos von Daten, Entities, items und Gegenstände für die man sich interessieren kann.
Also - mich interessiert die S schon länger - hatte im Übrigen auch eine tolle Schulzeit u. wünsch allen, dass sie das auch so erleben können.
Und wenn OpenStreetmap hier auch (nur etwas - also m.a.W. eine klitzekleine Kleinigkeit) dazu beitragen kann - dann wärs klasse.