检索国家和街道地址与谷歌地图api v3反向地理编码


Retrieving nation and street address with google maps api v3 reverse geocoding

我需要从坐标数组开始检索:街道地址,国家,也许还有地区。

我使用这个函数:

$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=false";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlData = curl_exec($curl);
curl_close($curl);
$data = json_decode($curlData);
$address = $data->results[0]->address_components[1]->long_name.', '.$data->results[0]->address_components[0]->long_name;
$country = $data->results[0]->address_components[5]->long_name;
$nation = $data->results[0]->address_components[6]->long_name;

这个脚本本身是工作的,我得到返回结果,但我注意到,值不是在同一个地方每次,(我认为取决于可用的结果),所以我得到了错误的值。我怎么才能解决这个问题呢?

下面是我的输出的两个例子,对于一个位置:

http://urbanfiles.linkmesrl.com/files/uploads/test_address_1.php

http://urbanfiles.linkmesrl.com/files/uploads/test_address_2.php

任何建议得到正确的值为我的结果?

你可以遍历地址组件,并从数组"types"字段中决定类型。

<?php
foreach($data->results[0]->address_components as $address_component){
    if(in_array('country', $address_component->types)){
        $country = $address_component->long_name;
        continue;
    } elseif(in_array('route', $address_component->types)) {
        $address = $address_component->long_name;
        continue;
    }
    // etc...
}