从纬度和经度获取国家/地区名称

时间:2013-01-14 06:30:02

标签: php google-maps google-geocoder

我有经纬度,我需要取国。

我正在使用它:

$geocode_stats = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?latlng=".$deal_lat.",".$deal_long . "&sensor=false");
$output_deals = json_decode($geocode_stats);
$country = $output_deals->results[2]->address_components[4]->long_name;

有时它会提供正确的国家/地区名称,但有时它会显示空白值,有时会返回城市名称。

有人可以帮忙吗?

6 个答案:

答案 0 :(得分:6)

我写了一个功能,让它变得简单。只需传入您的地理位置地址即可以是完整地址,邮政编码,也可以是您的纬度和经度。然后,它将搜索该国家/地区的地址组件数组。如果它无法找到县,它将只返回null,如果需要,可以将其更改为空字符串(“”)。

function getGeoCounty($geoAddress) {
    $url = 'http://maps.google.com/maps/api/geocode/json?address=' . $geoAddress .'&sensor=false'; 
    $get     = file_get_contents($url);
    $geoData = json_decode($get);
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new \InvalidArgumentException('Invalid geocoding results');
    }

    if(isset($geoData->results[0])) {
        foreach($geoData->results[0]->address_components as $addressComponent) {
            if(in_array('administrative_area_level_2', $addressComponent->types)) {
                return $addressComponent->long_name; 
            }
        }
    }
    return null; 
}

答案 1 :(得分:3)

从纬度和经度获取完整的地址。

$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($lat).','.trim($lng).'&sensor=false';
$json = @file_get_contents($url);$data=json_decode($json);
echo $data->results[0]->formatted_address;

答案 2 :(得分:2)

$deal_lat=30.469301;

$deal_long=70.969324;

$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.$deal_lat.','.$deal_long.'&sensor=false');

$output= json_decode($geocode);

for($j=0;$j<count($output->results[0]->address_components);$j++){

    $cn=array($output->results[0]->address_components[$j]->types[0]);

    if(in_array("country", $cn)){
        $country= $output->results[0]->address_components[$j]->long_name;
    }
}

echo $country;

答案 3 :(得分:0)

我确实把matwonk的代码作为基础。

function getGeoCounty($geoAddress) {
    $url = 'http://maps.google.com/maps/api/geocode/json?address=' . urlencode($geoAddress) .'&sensor=false'; 
    $get     = file_get_contents($url);
    $geoData = json_decode($get);
    if(isset($geoData->results[0])) {
        $return = array();
        foreach($geoData->results[0]->address_components as $addressComponet) {
            if(in_array('political', $addressComponet->types)) {
                if($addressComponet->short_name != $addressComponet->long_name)
                    $return[] = $addressComponet->short_name. " - " . $addressComponet->long_name; 
                else
                    $return[] = $addressComponet->long_name; 
            }
        }
        return implode(", ",$return);
    }
    return null;
}

代码以格式返回:邻里,城市,州,国家

如果检测到短名称(作为国家/地区代码或州代码),则以CODE - NAME格式显示。

答案 4 :(得分:0)

$deal_lat=30.469301;
$deal_long=70.969324;
$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.$deal_lat.','.$deal_long.'&sensor=false');

$output= json_decode($geocode);

for($j=0;$j<count($output->results[0]->address_components);$j++){

    $cn=array($output->results[0]->address_components[$j]->types[0]);

    if(in_array("country", $cn)){
        $country= $output->results[0]->address_components[$j]->long_name;
    }
}

echo $country;

答案 5 :(得分:0)


        $latlng = '22.7314,75.88243';
        $request_url = "http://maps.googleapis.com/maps/api/geocode  /xml?latlng=".$latlng."&sensor=true";
        $xml = simplexml_load_file($request_url);

        if($xml->status == "OK") {
        $address = $xml->result->formatted_address;
          foreach ($xml->result->address_component as $address) {
            if("country" ==  trim($address->type)) {
              $country = $address->short_name;
            }
          }
        }