这是我的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);
答案 0 :(得分:4)
尝试使用$cityname
上的urlencode()
转换空格。
$city = urlencode($cityname);
$Url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$city.'&sensor=false';
答案 1 :(得分:1)
更改您的网址卷曲不会读取网址中的空格,因此您必须使用相应的ascii转换特殊字符
这里的UR网址如下所示。
http://maps.googleapis.com/maps/api/geocode/json?address=Mexico%20City&sensor=false
请注意它应该是“墨西哥%20城市”而不是“墨西哥城”
休息你的代码对我来说很好。
答案 2 :(得分:1)
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 )