对查询限制进行地理编码api

时间:2012-03-21 13:24:19

标签: google-maps geocoding

我正在服务器端使用地理编码API来翻译latlng中的地址。 我遇到了OVER_QUERY_LIMIT状态,即使: - 服务器没有超过2500限制(这一天只有几个请求) - 它没有同时做很多请求(一次只有一个请求)

怎么可能?第二天地理编码运行良好,但我担心我的应用程序长期正常运行。

提前致谢。

6 个答案:

答案 0 :(得分:34)

这就是我过去处理这个问题的方法。我检查结果状态,如果我超过限制错误,我会在稍微延迟后再次尝试。

function Geocode(address) {
    geocoder.geocode({
        'address': address
    }, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            var result = results[0].geometry.location;
            var marker = new google.maps.Marker({
                position: result,
                map: map
            });
        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {    
            setTimeout(function() {
                Geocode(address);
            }, 200);
        } else {
            alert("Geocode was not successful for the following reason:" 
                  + status);
        }
    });
}

更新:哎呀,不小心掩盖了服务器端部分。这是一个C#版本:

public XElement GetGeocodingSearchResults(string address)
{
    var url = String.Format(
         "https://maps.google.com/maps/api/geocode/xml?address={0}&sensor=false",
          Uri.EscapeDataString(address)); 

    var results = XElement.Load(url); 

    // Check the status
    var status = results.Element("status").Value;

    if(status == "OVER_QUERY_LIMIT")
    {
        Thread.Sleep(200);
        GetGeocodingSearchResults(address);
    }else if(status != "OK" && status != "ZERO_RESULTS")
    {
        // Whoops, something else was wrong with the request...     
    }

    return results;
}

答案 1 :(得分:4)

我们也遇到了这个问题,解决方案是放弃google的API。如果您只需要地理编码,那么有许多替代方案同样有效,没有限制。我们选择了mapquest API。它更快,更可靠,没有地理编码调用上限,而且我真的很喜欢他们的API,用于将地理编码请求批量编组到一个调用中。

如果您需要其他功能,显然您必须考虑这些功能,但在单个功能的情况下,使用块上最大的API不一定是最佳选择。

developer.mapquest.com

答案 2 :(得分:2)

您还可以在客户端进行地理编码。这里是an article比较客户端和服务器站点的做法。

答案 3 :(得分:1)

如果找到没有地址匹配,Google也会返回相同的回复。这并不一定意味着你已经超过了配额。在任何情况下,你都会更好地捕捉异常并围绕它实施救援。

答案 4 :(得分:1)

与user276648相同的问题。通过添加API密钥并将http更改为https来解决此问题。

答案 5 :(得分:0)

Google,Bing,MapQuest和Yahoo!地图(这个API还在吗?)是非常强大的工具。它们具有很强的功能,它们可以解释您提供的地址并尽一切可能使其成为格式正确的格式化地址。在某种程度上他们是自由的。它们具有数量限制和非常严格的服务条款(TOS),如果您开始在商业上使用其服务,特别是如果您将其集成到另一个产品中,则可能是一个因素。

请记住,所有这些都会“解决近似值”NOT地址验证。如果地址存在,他们将能够告诉您地址在某条街道上的大概位置。他们无法告诉您,您正在寻找的地址存在。验证这一点的一种方法是在Google地图中查看您自己的地址。一直放大到街景,你会看到他们说“地址是近似的”,即使他们可能有精确定位的位置。他们只是没有要比较的主地址列表,知道哪些地址是真实的。为此,您需要进行某种地址验证。

地址验证以与免费地图服务大致相同的方式标准化和清理给定地址,但它还将地址与可交付地址的USPS数据库进行比较,以确认地址是否确实存在。然后可以对确认的地址进行地理编码,提高准确度。

那里有很多好的地址验证服务。为了充分披露,我是一个人的创始人 - SmartyStreets