2011-06-06 61 views
6

我使用Google's Geocoding API来处理自由格式的地址数据,并试图理解结果(subpremiseadministrative_area_level_2等)。在这一点上,我只对美国的地址感兴趣,并希望将结果格式化为街道地址,城市和州代码。州代码似乎很直接(administrative_area_level_1),但其他人更模糊。是城市locality还是sublocality或两者甚至更多?街道地址本身似乎可以是其他领域的任意数量的组合。使谷歌地理编码API结果有意义

理想情况下,我只想拿formatted_address,去掉城市,州,邮政编码和国家代码,并保留我的“街道地址”。对于处理所有这些字段是否有任何指导或建议,至少对于大多数情况(常规地址,单元号码地址等)?

回答

1

documentation似乎涵盖了各个领域的意思很清楚。

你还没有说你在用什么语言工作,但我认为这将是help

+0

我正在Objective-C为iOS应用程序工作,但我的问题是关于API本身。文档给出了每个字段的描述,但是我的问题是将其映射回标准美国地址格式。换句话说,听起来美国的城市总是会进入“本地”领域,但这仍然不明确。 'street_address'不会响应我的测试请求,并且没有解释如何从其余字段构建有效的街道地址。 – jrdioko 2011-06-13 17:10:25

1

我在搜索页面上对Nearlots.com进行反向地理编码。基本上,用户在地图上的某处放置标记,然后在搜索框中打印地址。

我只是在打印'formatted_address'并放弃它是否存在。这会给你这样的东西:“275-291 Bedford Ave,Brooklyn,NY 11211,USA”。这绰绰有余 - 最后你总是可以剥离美国。

+0

'formatted_address'已关闭,但我需要将其分成三个不同的字段:街道地址,城市和州代码。打破逗号尽可能接近,但我认为'formatted_address'的格式不能保证。 – jrdioko 2011-06-13 21:13:00

0

我认为你需要使用'路由'作为街道地址。

我使用相同的服务,从我的经验来看,'路线'总是相当于街道地址,即使位置实际上不是街道!

我想你已经决定如何弄清楚城市名称。这是我采取的相同的方法;查看几个不同位置的各种API结果,并查看哪个字段为您提供最一致的结果。

+0

'route'不包含街道地址开头的数字,即'street_number'。而在我的测试单元号码和街道地址的其他部分在其他领域,所以'路线'不是一个完整的地址。 – jrdioko 2011-06-15 19:28:47

+0

对不起,我的意思是'路线'包含街道名称,不包括门牌号码。我发现街道名称主要在我的国家的“路线”上。 – Mullins 2011-06-15 22:20:22

7
  • 街道地址是street_numberroute
  • locality
  • 状态administrative_area_level_1
  • ZIP是postal_code
  • 国家是country

注意,谷歌忽略任何单位号码(例如'Apt 13A')。你必须将自己添加回来。

通过地理编码器运行您的数据样本并手动检查结果应确认您获得了所需的内容。

+1

好吧,它不会减少单位数量,它包括它(通常在我见过的'subpremise'中)。我可以运行一个样例并打大多数情况,但我希望能有更好的方法来获得所有或几乎所有的地址(即使它们有“楼层”或“房间”或“前提”) 。 – jrdioko 2011-06-15 19:30:24

+0

更正从API返回的位置对象确实包含“subpremise”值,其中包含单元号(使用澳大利亚地址进行测试)。 – 2015-05-27 06:12:25

0

经过几个小时的工作后,我无法一直提取平面/房间/分前提。具有这些细节比能够明确区分它更重要,所以我使用它来解决它。

var componentForm = { 
    locality: 'long_name', 
    administrative_area_level_1: 'short_name', 
    country: 'long_name', 
    postal_code: 'short_name' 
}; 

function fillInAddress(place) { 
    for (var component in componentForm) { 
     document.getElementById(component).value = ''; 
     document.getElementById(component).disabled = false; 
    } 
    for (var i = 0; i < place.address_components.length; i++) { 
     var addressType = place.address_components[i].types[0]; 
     if (componentForm[addressType]) { 
      var val = place.address_components[i][componentForm[addressType]]; 
      document.getElementById(addressType).value = val; 
     } 
    } 
    var parts = $("#searchField").val().split(","); 
    $("#street_number").val(parts[0]); 
} 

我已经提取自动完成的信息正常,虽然跳过“街道号”和“路线”。然后在选择后对自动完成的值进行简单分割,并使用第一部分,将街道地址作为一个整体返回(包括工厂/平面/前提和街道名称)。

此解决方案为我提供了适合我所需的结果。祝你好运!