620:使用 Google Maps API 的查询过多

yay*_*wei 5 javascript google-maps-api-3

我正在使用 Google Maps Javascript API V3 对页面上的许多位置 (~100) 进行反向地理编码。大约 10 个左右后,我开始收到 620 错​​误:查询太多。

鉴于它们是异步的,延迟请求并确保它们全部完成的好方法是什么?

编辑:这是我到目前为止所拥有的。大多数情况下它会完成所有请求,但不会重试失败的请求。

function replaceAddresses() {
    var delay = 0;
    $(".lat-lon-address").each(function(index) {
        window.setTimeout(queryGeocoder, delay, this);          
        delay += 1000;
    });
}

function queryGeocoder(elem) {
    geocoder.getLocations(new GLatLng(
        elem.getAttribute("lat"),
       elem.getAttribute("lon")), 
        function(response) {
            handleAddress(response, elem);
        }); 
}

function handleAddress(response, elem) {
    if (!response || response.Status.code != 200) {
        console.log("status code: " + response.Status.code)
    } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],
                        place.Point.coordinates[0]);

        elem.innerHTML = place.address;
    }
}
Run Code Online (Sandbox Code Playgroud)

Key*_*eyo 2

上次我检查过您每天只允许 2500 个地理编码请求(基于您的 IP)。这对您来说应该足够了,但如果您使用更大的数据集,您可能需要购买更大的限制。

尖端

将地理编码信息存储在本地(也许存储在数据库中)。从数据库中获取值,而不是使用 Google 的网络服务。这样也会快得多。如果某个位置缺少地理信息,那么您才应该对其进行地理编码。

当您编写一些使用地理编码的新代码时,不要使用所有 600 个地址进行测试,而是首先尝试一两个地址,以确保您不会因为一些功能失调的代码而不必要地浪费一半的每日津贴。

如果可以的话,在客户端进行地理编码,这不会会计入您的限制。