我想从谷歌反向地理编码api获取城市名称,我的代码显示的位置的完整地址,但我只需要城市。吼叫是我的代码
<?php
session_start();
if(!empty($_POST['latitude']) && !empty($_POST['longitude'])){
//Send request and receive json data by latitude and longitude
$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($_POST['latitude']).','.trim($_POST['longitude']).'&sensor=false';
$json = @file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
if($status=="OK"){
//Get address from json data
//$location = $data->results[0]->formatted_address;
$location = $data->results[0]->address_components;
}else{
$location = '';
}
//Print city
$_SESSION['getgeoloc']=$location[6]->long_name;
echo $location;
}
?>
我尝试使用以下代码来显示城市,但有时会显示邮政编码,有时会显示城市名称
$_SESSION['getgeoloc']=$location[6]->long_name;
有什么最好的方法吗?
答案 0 :(得分:4)
这是解决方案,
<?php
$lat = $_POST['lat'];
$lng = $_POST['lng'];
$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$lat.','.$lng.'&sensor=false';
$json = @file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
if($status=="OK") {
//Get address from json data
for ($j=0;$j<count($data->results[0]->address_components);$j++) {
$cn=array($data->results[0]->address_components[$j]->types[0]);
if(in_array("locality", $cn)) {
$city= $data->results[0]->address_components[$j]->long_name;
}
}
} else{
echo 'Location Not Found';
}
//Print city
echo $city;
这解决了我的问题而且效果很好。主要部分是for循环,
for ($j=0;$j<count($data->results[0]->address_components);$j++) {
$cn=array($data->results[0]->address_components[$j]->types[0]);
if (in_array("locality", $cn)) {
$city= $data->results[0]->address_components[$j]->long_name;
}
}
希望这有帮助。
答案 1 :(得分:0)
您可以在查询参数中指定result_type = locality
,如下所示。
有关过滤器的更多信息,您可以搜索Optional parameters in a reverse Geocoding request
文档。
https://developers.google.com/maps/documentation/geocoding/intro#ReverseGeocoding