Karte mit POIs

Hallo,

ich habe ein Projekt in der Planung bei dem es eine Karte mit POIs geben soll.
Die Adresse für die POIs stammen aus einer Datenbank. Um nun aber nicht bei jedem Aufruf der Karte hunderte von Anfragen zu schicken um die Geodaten zu bekommen habe ich mir überlegt, dass immer nur bei Adressen welche noch keine Geodaten haben eine Anfrage geschickt wird, d.h. es soll eine automatisierte Anfrage der Geodaten geben. Mit der Anfrage sollen dann die Geodaten wieder zurückübermittelt werden und ich wollte die Geodaten zu jeder Adresse in der Datenbank abspeichern. Somit würde ich je Adresse nur eine Anfrage haben und die Geodaten dann in meiner Datenbank abspeichern wo sie dann wiederum zur Anzeige der POIs in meiner Karte abgerufen werden.
Ist die vorgenannte Idee überhaupt umsetzbar? Wenn ja wie?

Trotz intensiver Suche hier im Forum habe ich zu o.g. Fragestellung nichts gefunden. Über Hinweise falls ich etwas übersehen habe bin ich dankbar.

Gruss und eine geruhsame Vorweihnachtszeit

fox_bw

Hallo und willkommen bei OSM!

Damit ich das richtig verstehe:

Du machst eine Webanwendung, die POI darstellt. Die POI stehen in einer Datenbank, allerdings nur mit Adresse “Hauptstraße 7, 12345 Musterort”, oder “Hauptstraße 8, 55666 Musterhausen”.
Du willst die Koordinaten zu diesen Adressen (das nennt sich Geokodierung) holen. Dann willst du die Koordinaten bei dir in der DB abspeichern, so dass du immer nur die Adressen Geokodieren musst, die du noch nie vorher geokodiert hast.
Dann zeigst du die POI als Marker an, an der Geoposition die in deiner Datenbank steht.

Wir haben bei OSM einen Dienst, der das tut was du braucht, allerdings mit Abstrichen: nominatim.

Der Dienst ist hier beschrieben: http://wiki.openstreetmap.org/wiki/Nominatim .

Das du gleich an eine Verringerung der Last auf nominatim gedacht hast ist klasse!

Abstriche schrieb ich, weil wir in OSM nicht alle Adressen haben. Es kann sein, das wir nur die Straße haben, oder nur den Ort. Dann ist deine Geokodierung nicht genau.

Viele Grüße und viel Spaß!

Hallo gormo,

vielen Dank für deine Ausführungen. Deine Zusammenfassung trifft meine geplante Vorgehensweise zu 100%.
Ich habe mir durchaus nominatim schon angeschaut. Allerdings habe ich die Möglichkeit der Rückgabe der Daten für die Geopisition nicht gefunden bzw. erkennen können. Kannst du mir hierzu weitere Informationen geben wie dies realisierbar ist?

LG fox_bw

Guten Abend,

ich habe mich mit Nominatim und XML intensiver beschäftigt. Ich weiß, dass meine Frage wahrscheinlich wenig mit osm/nominatim zu tun hat stelle sie hier aber trotzdem.

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://nominatim.openstreetmap.org/search?q=Albert-Schweitzer-Strasse+25+73061+Ebersbach&format=xml&addressdetails=1");
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  
$answer = curl_exec($curl);
curl_close($curl);
$xmlobject = simplexml_load_string( $answer );
var_dump( $xmlobject );
echo $xmlobject->place->lat."<br>";
?>

Ich habe im oberen Code meine Url aufgerufen und verarbeite die XML anschließend mit simplexml. Mit dem letzten Echo bekomme ich folgende Ergenis zurück:

[“lat”]=> string(11) “48.72066205” [“lon”]=> string(16) “9.53235635842422”

Warum bekomme ich hier nicht nur den Wert für “lat”?

LG fox_bw

Weil du auf die Attribute falsch zugreifst.

echo $xmlobject->place->attributes()->lat;

Edit: PHP 7.x

Hallo dooley,

vielen Dank für deine Antwort.
Genau der Hiweis hat mir gefehlt; attributes habe ich übersehen.

LG fox_bw

Sollte dein Projekt kommerzieller Natur sein, kommen, neben Nominatim, noch weitere Geocoder in Frage.

Gruß Klaus