Ankündigung

Einklappen
Keine Ankündigung bisher.

Kann bestimmte Felder einer Nominatim Suche in Openstreetmap nicht auswerten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kann bestimmte Felder einer Nominatim Suche in Openstreetmap nicht auswerten

    Hallo zusammen,

    ich bin jetzt nach Jahren wieder dazugekommen wieder ein bisschen was in PHP zu
    programieren und hab nun promt ein Problem mit einem Json-Element.

    Ich möchte später einmal zu Koordinaten aus einer MySQL-Datenbank holen die
    dazugehörenden Länder und Städte Infos aus Openstreetmap holen und mit in die
    Datenbankschreiben. Das holen der Infos funktioniert schon un ich kann auch ein
    paar felder seperat auslesen, leider aber nicht die Felder die ich brauche.

    Mein Testcode:
    PHP-Code:
    <?php

    $lat 
    "48.13513";
    $lon "11.58633";

    $url "http://nominatim.openstreetmap.org/reverse?format=json&lat=".$lat."&lon=".$lon."&zoom=18&addressdetails=1";
    $response file_get_contents($url);

    echo 
    $response;

    echo(
    "<br />");
    echo(
    "<br />");
    echo(
    "<br />");

    $response_objekt json_decode($response);


    echo 
    "place_id: <br />";
    echo 
    $response_objekt->place_id;
    echo(
    "<br />");
    echo 
    "display_name: <br />";
    echo 
    $response_objekt->display_name;
    echo(
    "<br />");
    echo(
    "<br />");
    echo 
    "city: <br />";
    echo 
    $response_objekt->city;
    echo(
    "<br />");
    echo 
    "state: <br />";
    echo 
    $response_objekt->state;

    ?>
    und das Ergebnis das ich im Browser bekomme:
    Code:
    {"place_id":"1382587","licence":"Data \u00a9 OpenStreetMap contributors, ODbL 1.0. http:\/\/www.openstreetmap.org\/copyright","osm_type":"node","osm_id":"306048241","lat":"48.1351455","lon":"11.5861965","display_name":"Asalman ??, 1, Adelgundenstra\u00dfe, Bezirksteil Lehel, Stadtbezirk 01 Altstadt-Lehel, Museumsinsel, M\u00fcnchen, OB, Bayern, 80538, Deutschland","address":{"address29":"Asalman ??","house_number":"1","road":"Adelgundenstra\u00dfe","suburb":"Bezirksteil Lehel","city_district":"Stadtbezirk 01 Altstadt-Lehel","hamlet":"Museumsinsel","city":"M\u00fcnchen","state_district":"OB","state":"Bayern","postcode":"80538","country":"Deutschland","country_code":"de"}}
    
    
    place_id:
    1382587
    display_name:
    Asalman ??, 1, Adelgundenstraße, Bezirksteil Lehel, Stadtbezirk 01 Altstadt-Lehel, Museumsinsel, München, OB, Bayern, 80538, Deutschland
    
    city:
    
    state:
    Die ersten Felder der Antwort vom Server kann ich einzeln auswerten und in die DB
    schreiben wie "place_id", "licence" oder "display_name" aber leider funktioniert das
    nicht mit den Feldern die ich brauche wie "country", "state_district" oder "city".

    Hat jemand von euch eine Idee woran das liegen könnte?
    Ich steh nämlich gerade voll auf dem Schlauch.

    MFG BanditThief


  • #2
    Mach einmal var_dump($response_objekt)
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      Siehst du bei "address" die geschwungene Klammer und wie am Ende zwei Klammern geschlossen werden? Du hast da eine Hierarchie, und die Indizes bei denen du keine Ergebnisse bekommst sind nicht auf höchster Ebene, so wie die anderen, sondern unterhalb des adress-Elements.

      (Aber ja, var_dump() machen, dann siehst du das selber auch sofort.)

      Kommentar


      • #4
        Danke für die Hinweise.

        auszug var_dump:
        Code:
        object(stdClass)#1 (8) { ["place_id"]=> string(7) "1382587" ["licence"]=> string(84) "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright" ["osm_type"]=> string(4) "node" ["osm_id"]=> string(9) "306048241" ["lat"]=> string(10) "48.1351455" ["lon"]=> string(10) "11.5861965" ["display_name"]=> string(138) "Asalman ??, 1, Adelgundenstraße, Bezirksteil Lehel, Stadtbezirk 01 Altstadt-Lehel, Museumsinsel, München, OB, Bayern, 80538, Deutschland" ["address"]=> object(stdClass)#2 (12) { ["address29"]=> string(10) "Asalman ??" ["house_number"]=> string(1) "1" ["road"]=> string(17) "Adelgundenstraße" ["suburb"]=> string(17) "Bezirksteil Lehel" ["city_district"]=> string(29) "Stadtbezirk 01 Altstadt-Lehel" ["hamlet"]=> string(12) "Museumsinsel" ["city"]=> string(8) "München" ["state_district"]=> string(2) "OB" ["state"]=> string(6) "Bayern" ["postcode"]=> string(5) "80538" ["country"]=> string(11) "Deutschland" ["country_code"]=> string(2) "de" } }
        OK da stehts ja object(stdClass)#1 und object(stdClass)#2 da hätte ich lange gesucht.
        Hättet ihr für mich einen Tip wie ich bei einem json-Element mit der Hierachie umgehe
        ich hab bis jetzt noch nicht mit den json-Elementen gearbeitet.

        MFG BanditThief

        Kommentar


        • #5
          Na das hast du doch jetzt rausgefunden!? $response_objekt->address ist ein Objekt. Und wie man auf ein Objekt zugreift scheinst du zu wissen, denn du machst es oben schon.

          Kommentar


          • #6
            Man bin ich jetzt lang auf dem Schlauch gestanden. Habs mittlerweile hinbekommen
            bin mir nur nicht sicher ob das jetzt die eleganteste Lösung ist.

            PHP-Code:
            <?php

            $lat 
            "48.13513";
            $lon "11.58633";

            $url "http://nominatim.openstreetmap.org/reverse?format=json&lat=".$lat."&lon=".$lon."&zoom=18&addressdetails=1";
            $response file_get_contents($url);

            $response_objekt json_decode($response,true);

            echo 
            '<pre>';
            print_r($response_objekt);
            echo 
            '</pre>';


            $a $response_objekt['address']['city'];
            $b $response_objekt['address']['state'];
            $c $response_objekt['address']['state_district'];


            echo 
            "place_id: <br />";
            echo 
            $response_objekt['place_id'];
            echo(
            "<br />");
            echo 
            "city: <br />";
            echo 
            $a;
            echo(
            "<br />");
            echo 
            "state: <br />";
            echo 
            $b;
            echo(
            "<br />");
            echo 
            "state_district: <br />";
            echo 
            $c;
            echo(
            "<br />");
            ?>
            Code:
            Array
            (
                [place_id] => 1382587
                [licence] => Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright
                [osm_type] => node
                [osm_id] => 306048241
                [lat] => 48.1351455
                [lon] => 11.5861965
                [display_name] => Asalman ??, 1, Adelgundenstraße, Bezirksteil Lehel, Stadtbezirk 01 Altstadt-Lehel, Museumsinsel, München, OB, Bayern, 80538, Deutschland
                [address] => Array
                    (
                        [address29] => Asalman ??
                        [house_number] => 1
                        [road] => Adelgundenstraße
                        [suburb] => Bezirksteil Lehel
                        [city_district] => Stadtbezirk 01 Altstadt-Lehel
                        [hamlet] => Museumsinsel
                        [city] => München
                        [state_district] => OB
                        [state] => Bayern
                        [postcode] => 80538
                        [country] => Deutschland
                        [country_code] => de
                    )
            
            )
            
            place_id:
            1382587
            city:
            München
            state:
            Bayern
            state_district:
            OB
            MFG BanditThief

            Kommentar


            • #7
              Ist auch eine Möglichkeit. Oder:

              PHP-Code:
              $response->adress->country
              GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

              Kommentar

              Lädt...
              X