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

Cyr*_*don 3 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',这不会出现在第一种情况下.

好的,结果,谷歌发送的数据"类型"具有"最佳"准确性.这个类型在这里:http://code.google.com/intl/fr-FR/apis/maps/documentation/geocoding/#Types 但是,没有真正的顺序,如果我不比postal_code更好的结果,我不知道该怎么做.

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

Cyr*_*don 9

嗯,有位置类型,这不是很糟糕:

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

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

"RANGE_INTERPOLATED"表示返回的结果反映了在两个精确点(例如交叉点)之间插值的近似值(通常在道路上).当屋顶地理编码不可用于街道地址时,通常会返回插值结果.

"GEOMETRIC_CENTER"表示返回的结果是结果的几何中心,例如折线(例如,街道)或多边形(区域)."

"APPROXIMATE"表示返回的结果是近似值.

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


Pau*_*ean 7

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

这是一个不错的映射:

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

如果指定了ROOFTOP其他东西,使用面积 "东北"和"西南"的决定,如果它是你不够准确.

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

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

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

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

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

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