Мне нужно получить широту и долготу из адреса - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок здесь. Это мой первый пост, но я читал его годами.

Я работал с HTML, CSS, JS и PHP уже много лет, но это достаточно озадачил меня, когда я прошу помощи онлайн. Моя проблема в том, что мне нужно получить координаты широты и долготы для адресов улиц, которые я передаю своему коду (например, 77 Massachusetts Ave, Cambridge, MA 02139).

Я искал несколько недель (или месяцев) и перепробовал предложения нескольких людей, которые часто пишутся в JS или PHP. У меня есть действующий API Google, который должен работать очень хорошо (другие в моей команде успешно использовали его в Android, и он помечен как работающий на нашем сайте). Я нашел много примеров на разных сайтах, но ни один не работает.

Все, что я пробовал, ничего не дает. Я понимаю, что требование Google использовать API является новым, и некоторые примеры не использовали его, но даже когда я применяю мой, ничего не работает. Я ищу чистый, современный пример того, как заставить эту функцию работать.

Вот несколько примеров, которые я пробовал. Они ничего не производят, и я не уверен, что смогу сделать сообщение об ошибке, чтобы выяснить, почему:

<?php
function getLatLong($address){
if (!is_string($address))die("All Addresses must be passed as a string");
$_url = sprintf('http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=true&key=[MY_API_KEY]',rawurlencode($address));
if($_result = file_get_contents($_url)) {
$_result = json_decode($_result);
if($_result !== false || !empty($_result->results)) {
return $_result->results[0]->geometry->location;
}
}
return false;
}
$address = "77 Massachusetts Ave, Cambridge, MA 02139";
print_r(getLatLong($address));

$coordinates = getLatLong($address);

$lat = $coordinates['lat'];
$long = $coordinates['long'];
echo $lat.", ".$long;
echo "--";
?>

<?php
$address = '77 Massachusetts Ave, Cambridge, MA 02139'; // Address
$apiKey = '[MY_API_KEY]'; // Google maps now requires an API key.
// Get JSON results from this request
$geo = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false&key='.$apiKey);
$geo = json_decode($geo, true); // Convert the JSON to an array

if (isset($geo['status']) && ($geo['status'] == 'OK')) {
  $latitude = $geo['results'][0]['geometry']['location']['lat']; // Latitude
  $longitude = $geo['results'][0]['geometry']['location']['lng']; // Longitude
}
?>
    <?php
$dlocation = "77 Massachusetts Ave, Cambridge, MA 02139";
     // Get lat and long by address         
        $address = $dlocation; // Google HQ
        $prepAddr = str_replace(' ','+',$address);
        $geocode=file_get_contents('https://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false&key=[MY_API_KEY]');
        $output= json_decode($geocode);
        $latitude = $output->results[0]->geometry->location->lat;
        $longitude = $output->results[0]->geometry->location->lng;
echo $latitude;
?>

Любая помощь будет принята с благодарностью! Если у вас есть пример кода, который может это сделать, я, конечно, хотел бы увидеть его.

Большое спасибо, BDP

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Я недавно использовал google api в своих проектах, чтобы получать адреса от выпадения и получения. Вот фрагмент кода. Надеюсь, это может кому-нибудь помочь

// url encode the address
$address = urlencode($address);

// google map geocode api url
$url = "https://maps.googleapis.com/maps/api/geocode/json?address={$address}&key=YOUR_API_KEY";

// get the json response
$resp_json = file_get_contents($url);

// decode the json
$resp = json_decode($resp_json, true);

// response status will be 'OK', if able to geocode given address 
if($resp['status']=='OK'){

    // get the important data
    $lati = isset($resp['results'][0]['geometry']['location']['lat']) ? $resp['results'][0]['geometry']['location']['lat'] : "";
    $longi = isset($resp['results'][0]['geometry']['location']['lng']) ? $resp['results'][0]['geometry']['location']['lng'] : "";
    $formatted_address = isset($resp['results'][0]['formatted_address']) ? $resp['results'][0]['formatted_address'] : "";

    // verify if data is complete
    if($lati && $longi && $formatted_address){

        // put the data in the array
        $data_arr = array();            

        array_push(
            $data_arr, 
                $lati, 
                $longi, 
                $formatted_address
            );

        return $data_arr;

    }else{
        return false;
    }

}

else{
    echo "<strong>ERROR: {$resp['status']}</strong>";
    return false;
}

}

1 голос
/ 06 февраля 2020

Я использовал этот API для получения широт и долгот города, введенного пользователем. Пожалуйста, обратитесь к документации для получения ожидаемых результатов.

Зарегистрируйтесь, используя учетную запись, и вы получите свой уникальный ключ. ссылка: https://account.mapbox.com/auth/signup/

https://api.mapbox.com/geocoding/v5/mapbox.places/ {город}. json? access_token = {ключ} & limit = 1`

...