Alessandro
Alessandro

Reputation: 519

PHP and JSON from Openstreetmap search

I am trying to use Openstreetmap and PHP to point to a place on a map. As you can see below, I retrieve a JSON array, but PHP returns a NULL value.

Note that my $url is a valid JSON (you can check it here).

<?
$url = 'http://nominatim.openstreetmap.org/search/Piazza%20Duomo%20Trento?format=json&addressdetails=1&limit=1&polygon_svg=1';
$html = file_get_contents($url);
$jsonout = json_decode($html);
echo $jsonout[0];
?>

What am I doing wrong?

Upvotes: 0

Views: 2509

Answers (4)

user5730329
user5730329

Reputation:

or you can print $jsonout[0]["license"]

Upvotes: 0

YoannFleuryDev
YoannFleuryDev

Reputation: 941

What am I doing wrong?

First of all, your openning tag is not correct :

<? ----> <?php

Then, you cannot echo an array like that. Use var_dump on your array to see the structure.

When I try your code with the corrections, I got this :

array (size=1)


0 => 
    object(stdClass)[1]
      public 'place_id' => string '8577656' (length=7)
      public 'licence' => string 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright' (length=84)
      public 'osm_type' => string 'node' (length=4)
      public 'osm_id' => string '924463183' (length=9)
      public 'boundingbox' => 
        array (size=4)
          0 => string '46.0675164' (length=10)
          1 => string '46.0676164' (length=10)
          2 => string '11.1217498' (length=10)
          3 => string '11.1218498' (length=10)
      public 'lat' => string '46.0675664' (length=10)
      public 'lon' => string '11.1217998' (length=10)
      public 'display_name' => string 'Piazza Duomo, Piazza del Duomo, centro storico Trento, Trento, TN, TAA, 38122, Italia' (length=85)
      public 'class' => string 'highway' (length=7)
      public 'type' => string 'bus_stop' (length=8)
      public 'importance' => float 0.311
      public 'icon' => string 'http://nominatim.openstreetmap.org/images/mapicons/transport_bus_stop2.p.20.png' (length=79)
      public 'address' => 
        object(stdClass)[2]
          public 'bus_stop' => string 'Piazza Duomo' (length=12)
          public 'pedestrian' => string 'Piazza del Duomo' (length=16)
          public 'suburb' => string 'centro storico Trento' (length=21)
          public 'city' => string 'Trento' (length=6)
          public 'county' => string 'TN' (length=2)
          public 'state' => string 'TAA' (length=3)
          public 'postcode' => string '38122' (length=5)
          public 'country' => string 'Italia' (length=6)
          public 'country_code' => string 'it' (length=2)
      public 'svg' => string 'cx="11.1217998" cy="-46.067566399999997"' (length=40)

Upvotes: 1

Alex Andrei
Alex Andrei

Reputation: 7283

In answer to your question, except for trying to output an array with the following statement

echo $jsonout[0];

Which will throw a Catchable fatal error: Object of class stdClass could not be converted to string

Everything is ok.

If this is about accessing the members of the json_decode return, see below

$jsonout is an array with one element,
that one element is an object, you can access its members like this

print $jsonout[0]->licence;

Which will output

Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright

If you'd like an associative array, you can pass the second argument for json_decode, like this

$jsonout = json_decode($html,true);
print $jsonout[0]['display_name'];

Which will decode the json into an associative array and will display in a similar way

Piazza Duomo, Piazza del Duomo, centro storico Trento, Trento, TN, TAA, 38122, Italia

Upvotes: 1

jilesh
jilesh

Reputation: 436

please use print_r() in place of echo

$url = "http://nominatim.openstreetmap.org/search/Piazza%20Duomo%20Trento?format=json&addressdetails=1&limit=1&polygon_svg=1";
$html = file_get_contents($url);
$jsonout = json_decode($html);
print_r($jsonout[0]);

and you will get your result.

Upvotes: 0

Related Questions