从Google反向地理编码API PHP获取城市名称的最佳方法

Ase*_*rge 1 php google-maps reverse-geocoding

我正在尝试从Google反向地理编码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;
}
?>
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码显示城市,但有时会显示邮政编码,有时还会显示城市名称

$_SESSION['getgeoloc']=$location[6]->long_name;
Run Code Online (Sandbox Code Playgroud)

有什么最好的办法吗?

Ase*_*rge 6

这是解决方案,

<?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;
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,效果很好。主要部分是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。