正确的地址格式以从 google GeoCoding API 获得最准确的结果

Posted

技术标签:

【中文标题】正确的地址格式以从 google GeoCoding API 获得最准确的结果【英文标题】:Correct address format to get the most accurate results from google GeoCoding API 【发布时间】:2011-12-07 12:47:32 【问题描述】:

是否有任何标准格式可以将地址字符串提供给 Google GeoCoding API 以获得最准确的地图结果。

例如。以下查询未给出正确结果。

http://maps.googleapis.com/maps/api/geocode/xml?address=bloom,Bloomfield,CT,06002,USA&sensor=false

谢谢

曼迪普

【问题讨论】:

【参考方案1】:

我认为建议的格式是:

House Number, Street Direction, Street Name, Street Suffix, City, State, Zip, Country

显然,您可以提供的信息越少,结果就越不具体。

在您的示例中,地理编码器正在搜索名为“bloom”的街道,其中在 OH 而不是 CT 中有类似的匹配项。从查询中删除 'bloom' 然后搜索返回 Bloomfield, CT。

【讨论】:

Google 没有说正确的格式,但是 **** 它,这行得通! :) 我非常怀疑这是否有效!恕我直言,国家和邮政编码应该排在第一位! @ftrotter 是否需要逗号才能获得更好的结果? 我没有测试过,我只是假设当他们可以将它们用作分隔符时它们具有优势。我怀疑详细说明“带逗号”和“不带逗号”之间差异的答案会比我的要好,因此我会赞成..【参考方案2】:

谷歌地址搜索的定义:

address - 您要进行地理编码的街道地址,采用相关国家邮政服务所使用的格式。应避免使用其他地址元素,例如公司名称和单元、套房或楼层号码。

https://developers.google.com/maps/documentation/geocoding/#geocoding

我应该如何格式化我的地理编码器查询以最大限度地提高成功请求的数量?

地理编码器旨在将街道地址映射到地理坐标。因此,我们建议您按照以下准则格式化地理编码器请求,以最大限度地提高查询成功的可能性:

根据相关国家/地区的国家邮政服务使用的格式指定地址。 请勿指定相关国家/地区邮政服务定义的地址中未包含的其他地址元素,例如公司名称、单元号、楼层号或套房号。 尽可能使用场所的街道编号而不是建筑物名称。 尽可能使用街道编号寻址,而不是指定十字路口。 请勿提供“提示”,例如附近的地标。

https://developers.google.com/maps/faq#geocoder_queryformat

【讨论】:

【参考方案3】:

我发现答案不完整并且缺少来源。

看这里:https://developers.google.com/places/documentation/autocomplete#place_autocomplete_responses

来自 google 的地图自动完成 API 返回一个更简单的格式:“街道地址、城市、国家/地区” 现在您可以使用这样的字符串来搜索地址,它应该会得到一个准确的结果。 此外,如果您使用自动补全 API,您还将获得一个唯一标识符,可用于进一步的详细请求。

街道地址的格式很大程度上取决于您实际所在的位置。 在美国,“门牌号、街道方向、街道名称、街道后缀”可能有意义,但在欧洲大部分地区,它不会导致成功查询。

欧盟大部分地区的地址都不同(通常是“街道名称后缀”),例如“Kumpelstraat 25A”、“Psolevcu 331/26b”),我想如果我们看看一些东方国家,我们会感到惊讶。

因此,如果您将代码绑定到单个区域(美国、欧盟大部分地区),您可能会很好地对格式进行硬编码。 如果你想拥有一个更灵活的系统,你要么需要为你的目标受众找到合适的格式,要么查询一个谷歌 API 以自动获取正确的字符串。 我链接的那个非常好,但需要一个每天有免费请求限制的 API 密钥。

【讨论】:

我应该补充一下,我在一个android APP中成功使用了这个方法。似乎运作良好。【参考方案4】:

我偶然发现了这个问题并找到了一个适合我的解决方案:

我认为使用组件过滤可以找到答案,请看: https://developers.google.com/maps/documentation/geocoding/#ComponentFiltering

javascript 示例:

var request = require('request');

var url = "https://maps.googleapis.com/maps/api/geocode/json?" +
    "address=Herengracht 180" +
    "&components=postal_code:1016 BR|country:NL" +
    "&sensor=false";

request(url, function (error, response, body) 
  if (!error && response.statusCode == 200) 
    console.log(body);
  
  else 
    console.log('error', error);
  
);

【讨论】:

使用组件过滤器的一个警告是,包含组件过滤器的查询将只返回与过滤器匹配的地理编码结果。如果未找到匹配项,则地理编码器将返回与过滤器本身匹配的结果。如果您在地理编码失败时想要 ZERO_RESULTS,您可能不想使用组件过滤器。【参考方案5】:

无需避开公寓单元。这有效:

https://maps.googleapis.com/maps/api/geocode/xml?address=14202+N+42nd+St+Unit+301+33613

“Apt”、“Room”和“Suite”也可以使用

它们都返回 301 作为子前提,并在“formatted_address”中显示为“#301”。

保罗发送...

【讨论】:

【参考方案6】:

我发现像“US”、“DE”、“FR”这样的官方国家代码效果不佳。用完整的国家/地区名称替换它们对我来说效果更好。

我没有找到说明的来源。

【讨论】:

以上是关于正确的地址格式以从 google GeoCoding API 获得最准确的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何优化 google-bigquery 以从大数据表中查找最常见的类别?

Google 表格格式时间不正确

Google Geocoding API 返回错误的地址,但 Google 地图显示正确的位置

python 有效地翻页查询以从Google App Engine数据存储中获取所有实体。

以 PDF 格式正确保存以驱动 Google 表格

将查询正确格式化为Google表格/天气公式