【问题标题】:Google geocoder limits谷歌地理编码器限制
【发布时间】:2012-11-19 13:13:02
【问题描述】:

有没有办法通过一个地理编码请求发送多个地址:

geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        addMarker(results[0].geometry.location); 
        var the_string = generate_string(elements, a, address);

        infowindow[a] = new google.maps.InfoWindow({
            content: the_string
        });     

        google.maps.event.addListener(markersArray[a], "click", function() {
            infowindow[a].open(map, markersArray[a]);
        });
    } else {
        alert("Geocode was not successful for the following reason: " + status);
    }
});       

其中地址包含地址数组。原因是我在OVER_QUERY_LIMIT while using google mapsGoogle Map Javascript API v3 - OVER_QUERY_LIMIT Error 遇到了“OVER_QUERY_LIMIT”

我想知道我是应该开始使用客户端的服务器端版本还是继续使用 javascript api 并获得通过地理编码器调用发送地址数组的帮助?

根据您的意见或经验,如果我有一个应用程序,您可以在字段中输入无数地址,然后按“绘图到地图”按钮,您将如何在 api 调用、地理编码等方面执行此操作?

EDIT://///////////////////

我现在正在使用此代码:

class geocoder{
    static private $url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=";

    static public function getLocation($address){
        $url = self::$url.urlencode($address);

        $resp_json = self::curl_file_get_contents($url);
        $resp = json_decode($resp_json, true);

        if($resp['status']='OK'){
            return $resp['results'][0]['geometry']['location'];
        }else{
            return false;
        }
    }

    static private function curl_file_get_contents($URL){
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }
}      

这样称呼它:

$address = urlencode($field_set["value"]);
$loc = geocoder::getLocation($address);

在每个地址被放入的循环中(在本例中为 20 次)。

它只在地图上放置 10 个标记,无论循环是否正确具有 2 个不同的 lngs 和 lats。

它返回最后 10 个 lat lngs 的 null :s

编辑://////////////////////

我在调用这个的循环中放置了一个睡眠:

$loc = geocoder::getLocation($address);

每 8 次地理编码,它会暂停一秒钟然后继续.. 这似乎允许正确呈现所有地理编码器位置...但它看起来像一个绒毛。

有什么想法吗?

【问题讨论】:

  • 不,不是。也看到了;)。不过,我会更好地回答我的问题:)。我想知道是否可以使用 javascript api 而不是服务器端来完成。
  • 好的...我只是想它可能会给你一个快速的解决方案..

标签: php javascript google-maps limit


【解决方案1】:

使用地理编码的最佳方法是将经度和纬度值存储在您的服务器上,这样您就不必在每次脚本运行时发送一堆地理编码请求

【讨论】:

  • 这个。您必须经常刷新数据,但这会使您的地图更快、更准确(因为您可以调整数据以准确在正确的位置获取点)。
【解决方案2】:

不,地址必须是documentation 中指定的地址。

地理编码器将返回一个结果数组,但您不能输入一个地址数组来进行地理编码/反向地理编码,这不太合乎逻辑,人们会使用它来利用限制。

您不必太担心 query_limit,因为只要它是 javascript api 且没有后端,它就按 IP/天计算。因此,如果您有多个用户使用此功能,则会为他们单独设置限制,并且不会累加。

如果您因为有本地环境而超出了很多限制,那么我认为您可能需要租用谷歌地图来获得每天最多 10 万个请求的商业服务。

【讨论】:

  • 限制似乎是每分钟 10 次调用(见上面我现在使用的类代码)
  • 实际上限制是每秒 10 个请求,您可以将函数包含在一个循环中,进行 5 次调用并等待一秒钟或类似的东西,以避免 10 秒的限制。我完全确定不是每分钟 10 次,而是每秒几次。
  • 那..我的朋友,非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多