Как я могу найти широту и долготу - PullRequest
0 голосов
/ 17 ноября 2011

Это мой PHP-код для определения широты и долготы данного местоположения. Но когда у местоположения есть 2 или более слов, возвращается ошибка

пример: если $ cityname имеет "Мехико", то возвращается ошибка, если это только одно слово, то возвращается правильно

<?php
    function get_latlng($cityname)
    {
    $Url='http://maps.googleapis.com/maps/api/geocode/json?address='.$cityname.'&sensor=false';
    if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.example.org/yay.htm");
    curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch);
    $search_data = json_decode($output);
    $new = array("lat"=>$search_data->results[0]->geometry->location->lat,"lng"=>$search_data->results[0]->geometry->location->lng);
    return $new;
    }
    ?>

Это ошибка, выданная

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">



<h4>A PHP Error was encountered</h4>



<p>Severity: Notice</p>

<p>Message:  Trying to get property of non-object</p>

<p>Filename: admin/markers.php</p>

<p>Line Number: 19</p>



</div>

здесь admin / markers.php - моя страница просмотра

это 19-я строка на моей странице просмотра

$new = array("lat"=>$search_data->results[0]->geometry->location->lat,"lng"=>$search_data->results[0]->geometry->location->lng);

Ответы [ 3 ]

4 голосов
/ 17 ноября 2011

Попробуйте использовать urlencode() на $cityname для преобразования пробелов.

$city = urlencode($cityname);
$Url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$city.'&sensor=false';
1 голос
/ 27 декабря 2015
Try:
function get_latlng($address) {
        $address = urlencode(trim($address));
        $details_url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $address . "&sensor=false";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $details_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $response = json_decode(curl_exec($ch), true);
        if ($response['status'] != 'OK') {
            return null;
        }
        $latLng = $response['results'][0]['geometry']['location'];
        return $latLng;
    }
    $response = get_latlng("Mexico City");
    print_r($response);

Array ( [lat] => 19.4326077 [lng] => -99.133208 )
1 голос
/ 17 ноября 2011

Измените ваш URL curl не будет читать пробел в URL, поэтому вам нужно конвертировать специальные символы с соответствующими ascii

Здесь URL UR будет примерно таким, как показано ниже.

http://maps.googleapis.com/maps/api/geocode/json?address=Mexico%20City&sensor=false

Обратите внимание, что это должно быть "Mexico% 20City", а не "Mexico City"

остальные твой код работает нормально для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...