从谷歌反向地理编码api php获取城市名称的最佳方式

时间:2017-03-16 09:40:11

标签: php google-maps reverse-geocoding

我想从谷歌反向地理编码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;

有什么最好的方法吗?

2 个答案:

答案 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,如下所示。

enter image description here

有关过滤器的更多信息,您可以搜索Optional parameters in a reverse Geocoding request文档。

https://developers.google.com/maps/documentation/geocoding/intro#ReverseGeocoding