地理编码超过查询限制的解决方法

问题描述 投票:0回答:1

我试图对超过1000个地址进行地理编码,并将这些值存储在一个XML文件中。问题是我在第十个地址之后得到一个OVER_QUERY_LIMIT错误。我看到其他帖子建议在每个地理编码之间等待X秒,但这似乎对我不起作用。这是我的一段代码,我试图在每一个地理编码之间等待X秒,但似乎对我不起作用。

<div id="locations"></div>
$(xml).find('marker').each(function (i) 
{
    var storeName = $(this).attr('name');
    var address = $(this).attr('address');

    setTimeout(function(){
        g.geocode(address, function(data) 
        {
            if(data != null) 
            {
                olat = data.latitude;
                olng = data.longitude;

                var marker = "<marker name='" + storeName + "' lat='" + olat + "' lng='" + olng + "' />";

                $('#locations').append(marker);
            } 
            else 
            {               
                  //Unable to geocode
                  alert('ERROR! Unable to geocode address');                  
            }
        });
    }, 1000);
});
jquery google-maps geocoding
1个回答
4
投票

首先说明一下 谷歌的服务条款

不去想这种事很容易,但有时确实很重要。除非你想加入 本组 由于某些原因,他们的服务被禁用了,当你对这些地址进行地理编码时,请确保你向用户显示地图。服务条款也禁止批量地理编码和存储结果的任何其他性能缓存。

不是指责! 只是提请大家注意。


程序员回答。

setTimeout"的回调和 geocode 都是异步函数。现在你的代码中,当响应还在从API传回来的时候,你正在启动你的1秒计时器,它也在异步运行,而你的循环继续立即迭代,没有延迟。一秒钟后,no-op被调用一次然后丢弃。每次循环运行时都会发生这种情况。

所以,你一次射出了一千个API请求。然后大约1秒后(给定或采取几毫秒),1000个no-op将运行。

你对 g.geocode 的回调函数中。setTimeout,然后回调函数的结尾需要在里面再设置一个自己的超时,直到你完成。没有更多的no-op。

如果你想更正确地 "绕过 "回调函数,那么你就需要在回调函数中设置一个超时,直到你完成。OVER_QUERY_LIMIT 错误和其他TOS限制(如地理编码)。一窝蜂),你会想考虑一个没有这种限制的商业服务,如 美国街道地址API 披露:我在SmartyStreets工作)。

© www.soinside.com 2019 - 2024. All rights reserved.