Как я могу получить доступ к данным API OpenStreetMap, используя PHP? - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь получить доступ к данным OpenStreetMap с помощью PHP, но не могу найти четких ответов о том, как это сделать. URL, который я пытаюсь получить из работ, когда я ищу его в браузере. Вот URL, который я пробую: https://nominatim.openstreetmap.org/search?q=jacksonville,florida&format=json

И вот как я пытаюсь получить к нему доступ в моем файле PHP, но он всегда ничего не возвращает.

    $search_url = "https://nominatim.openstreetmap.org/search?q=jacksonville,florida&format=json";
    $json = file_get_contents($search_url);

    print_r($json);
    echo "json=" . $json;
    $decoded = json_decode($json, true);
    $lat = $decoded[0]["lat"];
    $lng = $decoded[0]["lon"];
    echo " latitude=".$lat . " -----" . "longitude=".$lng;

Как я могу это исправить? Моя конечная цель - просто получить широту и долготу города, штата.

1 Ответ

1 голос
/ 27 марта 2020

Я подозреваю, что API отказывается обслуживать запрос без действительного заголовка User-Agent, попробуйте установить это, и оно должно работать, например:

<?php

$search_url = "https://nominatim.openstreetmap.org/search?q=jacksonville,florida&format=json";

$httpOptions = [
    "http" => [
        "method" => "GET",
        "header" => "User-Agent: Nominatim-Test"
    ]
];

$streamContext = stream_context_create($httpOptions);
$json = file_get_contents($search_url, false, $streamContext);

print_r($json);
echo "json=" . $json;
$decoded = json_decode($json, true);
$lat = $decoded[0]["lat"];
$lng = $decoded[0]["lon"];
echo " latitude=".$lat . " -----" . "longitude=".$lng;
...