反向地理编码不会提供正确的位置

时间:2014-04-16 19:00:35

标签: php xml google-maps coordinates geocoding

我有一个编码的XML文件,其中包含多个游乐设施。我想使用反向地理编码来检索实际位置。但是当我上传XML文件时,刷新页面时会得到不同的位置。它似乎是缓存,因为有很多位置,与上面的位置相同。

//Get Location Start
    //Get location
$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=".$locBegLat.",".$locBegLon."&sensor=false";
$data = @file_get_contents($url);
$jsondata = json_decode($data,true);
if(is_array($jsondata) && $jsondata['status'] == "OK"){
//street
        foreach ($jsondata["results"] as $result) {
foreach ($result["address_components"] as $address) {
    if (in_array("route", $address["types"])) {
        $streetBeg = $address["long_name"];
    }
}
}
//street_number
               foreach ($jsondata["results"] as $result) {
    foreach ($result["address_components"] as $address) {
        if (in_array("street_number", $address["types"])) {
            $street_numberBeg = $address["long_name"];
        }
    }
   }
// city
foreach ($jsondata["results"] as $result) {
    foreach ($result["address_components"] as $address) {
        if (in_array("locality", $address["types"])) {
            $cityBeg = $address["long_name"];
    }
    }
    }
// postal_code
foreach ($jsondata["results"] as $result) {
    foreach ($result["address_components"] as $address) {
        if (in_array("postal_code", $address["types"])) {
            $postal_codeBeg = $address["long_name"];
    }
}
}
// country
foreach ($jsondata["results"] as $result) {
foreach ($result["address_components"] as $address) {
    if (in_array("country", $address["types"])) {
        $countryBeg = $address["long_name"];

    }
}
}
}
    $LocBeg = $streetBeg . " " . $street_numberBeg; 
echo $streetBeg;    
echo $street_numberBeg;
echo $cityBeg;  
echo $countryBeg;
echo $postal_codeBeg;

网站是:www.interwebmedia.nl/dataxi

xml文件:https://drive.google.com/file/d/0B31rNYjTJf81dkQ4R2xOcUc2WEk/edit?usp=sharing

我希望有人知道,为什么这些位置使用相同的坐标是不同的,只需在上传文件后刷新页面。

1 个答案:

答案 0 :(得分:0)

有两个不同的问题,最基本的2个:

  1. 地理编码的限制为10个请求/秒。在每次请求后打印$jsondata['status'],您会看到很多请求因限制而失败。解决方案(不是100%保证):在每次请求之前致电usleep(100000);以确保第二次请求不超过10个

  2. 您在循环中创建的变量,例如必须在每个循环开始时重置$streetEnd$cityEnd。否则,当此组件在当前响应中不可用时,您的脚本将使用先前请求中设置的值。