如何在Google Map Geocoder V3中获得相同的精确度

时间:2010-06-10 14:32:06

标签: google-maps geocoding google-api

我想从谷歌获得地理编码,而我过去常常使用API​​的V2。 Google在json中发送了一个非常好的信息,准确性,请参考:http://code.google.com/intl/fr-FR/apis/maps/documentation/javascript/v2/reference.html#GGeoAddressAccuracy

在V3中,Google似乎并没有向我发送完全相同的信息。有一个数组“adresse_component”,如果准确性更好,它看起来更大,但不完全。 例如,我对街道号码的请求准确性,数组大小为8。 另一个问题是路径的准确性,因此精度较低,但是数组的大小仍为8,因为有一行“sublocality”,在第一种情况下不会出现。

好的,结果,Google发送的数据“类型”具有“最佳”准确度。此类型位于:http://code.google.com/intl/fr-FR/apis/maps/documentation/geocoding/#Types 但是,没有真正的顺序,如果我的结果不比postal_code好,我就不知道如何做到这一点。

那么,我怎样才能获得相当于V2精度的等价物,而不是一些愚蠢而可怕的代码呢?

3 个答案:

答案 0 :(得分:9)

嗯,有location type,这不是很糟糕:

  

location_type存储有关指定位置的其他数据。该   目前支持以下值:

     

“ROOFTOP”表示返回的结果是一个精确的地理编码,我们的位置信息精确到街道地址精度。

     

“RANGE_INTERPOLATED”表示返回的结果反映了   近似(通常在道路上)插入两个精确的   点(如十字路口)。通常是插值结果   当屋顶地理编码不可用于街道地址时返回。

     

“GEOMETRIC_CENTER”表示返回的结果是几何   结果的中心,例如折线(例如,街道)或   polygon(region)。“

     

“APPROXIMATE”表示返回的结果是   近似。

我测试location_type是否与近似值不同,并且它给出了一些好的结果。

答案 1 :(得分:6)

随着谷歌今年晚些时候弃用他们的地理编码v2 API,将会有很多人将他们的地理编码逻辑迁移到v3,这个问题将会出现:如何将'location_type'字符串映射到等效'精度'?

这是一个不错的映射:

"ROOFTOP" -> 9
[Everything else] -> 4 to 8 (aka the text string might as well read "GARBAGE")

如果指定了ROOFTOP以外的其他内容,请使用“northeast”和“southwest”的区域来确定它是否足够准确。

现在如果你没有得到“准确”的东西会发生什么?为同一地址运行Google商家信息搜索查询。 Google地方信息也会进行地理编码,并且启用了结算功能后,您每天可以获得10,000个地方信息搜索查询(无费率限制),Google声称他们不会向信用卡收费(他们认为只是用它来验证帐户)。使用“结算”,您可以获得100,000个查询,但“地方”文字搜索查询的“费用”是常规“地方信息”查询金额的10倍,因此上述10,000个限制。地方可能很挑剔,你应该只考虑一个结果的答案。

有时,Places查询不会返回邮政编码 - 特别是如果没有发送邮政编码。如果您需要邮政编码,请使用Places查询的lat / lng结果并将其反馈到地理编码器中,这通常会使用邮政编码(并且经常是ROOFTOP匹配)吐出地址。

应该注意的是,官方地理编码API礼貌限制是每天2,500个请求,每个IP地址的速率限制为每秒一个。因此,遵循上述公式可能会大幅减少甚至可能使您可以使用的地理编码数减半。

如果您需要的不仅仅是Google地理编码限制(谁没有?),请使用OpenStreetMap数据库创建自己的迷你地理编码服务。克隆您需要的OpenStreetMap部分并编写自己的地理编码器(或使用库)。然后,您可以在没有数量限制或速率限制的情况下对您的内容进行地理编码。如果您仍然使用Google地图,则可以使用Google的地理编码器作为后备,如果OSM地理编码器对于所有情况都不够准确。

或者,如果您信任您的用户不提交虚假数据(真的吗?)并且必须使用Google地理编码服务,您也可以通过为您提供浏览器地理编码信息来滥用用户的网络浏览器,然后将结果提供给你的服务器。你可能会烧掉用户的每日限额而冒险冒险推送虚假数据,但如果你遇到这些麻烦,你真的在​​乎吗?

无论如何,上面的提示应该足以让大多数用户临时使用以设置有效的v3 API。我自己也谈到了这个问题,所以我想与社区分享一个不错的解决方案。我仍然认为v2是更好的API - 整数精度等级而不是丑陋的文本字符串总是胜出。

答案 2 :(得分:1)

Paula的回答很好,但是您还需要考虑John的评论,即ROOFTOP可以返回垃圾。

我使用地理编码查询后的完整性检查程序来消除location_type为“ ROOFTOP”但地址与您发送给Google的地址无关的情况-该完整性检查程序会将新地址与旧地址进行比较解决并考虑发生了什么变化以及变化了多少。 Google地理编码器有时会擅长修正拼写错误,但是它也会做出一些不明智的决定-例如,选择其他城市,其他州或其他国家/地区。您需要确定结果是否是拼写错误或地理编码逻辑是否误入歧途。

因此,不要仅仅假设ROOFTOP ==9。如果新地址与您发送的原始地址相去甚远,这也可能是垃圾。

对于诸如公寓或具有多个单元的建筑物之类的东西,当结果类型为“次前提”时,location_type ='RANGE_INTERPOLATED' 也可能是准确的。

请记住,地理编码与地址验证不是一回事。它们有些重叠,但是即使您输入的内容很垃圾,Google地理编码逻辑也会尽力为您提供答案。