Straße bekannt - Postleitzahl gesucht API

Hallo zusammen,

ich bin recht neu und unerfahren hier und habe leider nichts dazu gefunden.
Ich habe vor in einem PHP Script die Eingabe einer Straße zu ermöglichen, es soll dann ähnlich wie bei https://www.openstreetmap.de/karte.html eine Auswahl erscheinen oder automatisch die korrekte Postleitzahl ermittelt werden, das sollte doch funktionieren ? Aber wie stelle ich das am vernünftigsten an?

viele Grüße

Das erledigt ein “Geocoder”, der von OSM betriebene und auf der Hauptseite verwendete heißt “Nominatim”.
http://nominatim.org/

Hallo dieterdreist,

vielen Dank für den Tip. Geht das komplett über eine API oder muss ich das tatsächlich komplett installieren ? Ich stehe da ganz schön auf dem Schlauch und habe unter http://nominatim.org/release-docs/latest/api/Lookup/ keinen passenden API Aufruf gefunden und den Aufrufauf der Hauptseite kann ich ja leider so nicht einsehen was da im Formular passiert.

Gruß
Micha

Hallo Micha,

bitte beachte bei der Nutzung von nominatim.openstreetmap.org dessen Nutzungsbedingungen.

Viele Grüße

Michael

genau. Solange Du es nicht übertreibst, kannst Du die API von nominatim.osm.org benutzen. Früher wurde die PLZ bei einer Suche auch in OSM direkt angezeigt, falls ich das recht erinnere, jetzt aber nicht mehr.

Wenn Du nur ein paar PLZ in OSM suchen willst, ist das Suchfeld in nominatim.openstreetmap.org die richtige Wahl. Für sehr intensive Nutzung müsstest Du Dir dagegen Deine eigene Instanz aufsetzen.

Die API die Du suchst ist auch die Search-API, nicht Lookup.

https://nominatim.org/release-docs/develop/api/Search/

Prima, vielen Dank euch. Da komme ich ja jetzt etwas weiter :wink:
Es handelt sich um zwei bis drei Anfragen die Woche. Okay vielleicht auch mal am gleichen Tag, dafür benötige ich hoffentlich keine eigene Instanz.
Ich komme ja jetzt an die Daten ran zum Beispiel mit diesem https://nominatim.openstreetmap.org/search?street=bahnhofstra%C3%9Fe&format=json&addressdetails=1 aber wie kann ich das jetzt so geschickt machen wie auf der Startseite ?
Habt Ihr da auch Anwendungsbeispiele ? Also User beginnt Strassennamen einzugeben und vielleicht sogar per autocomplet wird er vervollständigt und eine Auswahl der Möglichkeiten angezeigt, ich habe das bisher mit awesomplete form-control und einer DB Abfrage gelöst.

Gruß
Micha

Autocomplete ist in den Nutzungsbedingungen der API verboten!

https://operations.osmfoundation.org/policies/nominatim/ unter “unacceptable use”

Wenn du autocomplete willst nimm Photon, https://photon.komoot.de/

sofern man es über die Nominatim-API implementiert. Autocomplete mittels eines externen Services geht natürlich (d.h. wenn man am Ende nur einen Request an Nominatim schickt), aber klar, wenn der Service das schon direkt anbietet ist es natürlich besser.

Hallo zusammen,
vielen Dank für den Tip und den Hinweis auf die Nutzungsbedingungen. Aber vermutlich muss ich dann auch https://github.com/komoot/photon installieren als Instanz :frowning: Ich hatte auf eine einfache Lösung gehofft, aber Photon finde ich noch nicht mal in der API den Aufruf für die Straße der mir den Rest zurückwirft :frowning:
Gibt es für die Art eigentlich zugängliche Beispiele (Codeschnipsel) ? Bisher habe ich halt folgendes gemacht:

   
    #Abfrage für Straßenliste
    $streetlistquery  = "SELECT DISTINCT `street_name` FROM `streetname_berlin` ORDER BY `street_name` ASC";
    #Ausgabe aller Zeilen
    $streetlist = mysqli_query($link, $streetlistquery);
     <div class="form-group">
            <label for="street">Straße<sup>*</sup></label>
            <div class="input-group">
                <div class="input-group-prepend">
                    <div class="input-group-text">
                        <i class="fa fa-street-view"></i>
                    </div>
                </div>
                <input id="street" name="street" type="text" aria-describedby="streetHelpBlock" class="awesomplete form-control" list="streetlist" required="required">
                <datalist id="streetlist">
                    <? while ($row_street = mysqli_fetch_array($streetlist)) {echo "<option>" . ($row_street["street_name"]) . "</option>\n";}?>
                <span id="streetHelpBlock" class="form-text text-muted">Straße</span>
            </div>
        </div>

Steht doch alles da? https://photon.komoot.de/ Man muss halt ein bisschen runterscrollen. Weitere Parameter findet man im hier.

Beispiel: https://photon.komoot.de/api/?q=Kurfürstenstraße&osm_tag=highway

Man muß auch keine eigene Photon-Instanz betreiben, wenn man es nicht übertreibt mit den Abfragen, steht aber auch in den sehr einfach gehaltenen Terms of use:

zusammenfassend sei auch immer wieder auf https://wiki.openstreetmap.org/wiki/Search_engines verwiesen …

Das hat jetzt zwar nichts mit Geocoding zu tun, aber du machst das -Element nicht wieder zu (mit “”).