我正在使用Google的Geocoding API来处理自由格式的地址数据,并试图理解结果(subpremise
、administrative_area_level_2
等)。目前我只对美国的地址感兴趣,并希望将结果格式化为街道地址、城市和州代码。状态代码看起来很简单(administrative_area_level_1
),但其他代码则更模糊。城市是locality
还是sublocality
,或者两者兼而有之,甚至更多?街道地址本身似乎可以是其他字段的任意数量的组合。
理想情况下,我只想使用formatted_address
,去掉城市、州、邮政编码和国家代码,并保留剩下的"街道地址"。是否有任何指导方针或建议来处理所有这些字段,至少对于大多数情况(常规地址、带单元号的地址等)?
- 街道地址为
street_number
和route
- 城市为
locality
- 状态为
administrative_area_level_1
- ZIP为
postal_code
- 国家是
country
请注意,谷歌忽略任何类型的单元编号(例如"13A单元")。你必须自己把它加回来。
通过地理编码器运行数据样本并手动检查结果应该可以确认您得到了所需的数据。
文档似乎非常清楚地涵盖了各个字段的含义。
你还没有说你在用什么语言工作,但我认为这会有所帮助。
我正在搜索页面的Nearlots.com上进行反向地理编码。基本上,用户在地图上的某个地方放置一个标记,然后我在搜索框中打印一个地址。
我只是打印"formatted_address",如果没有,我就放弃。这会给你这样的东西:"275-291 Bedford Ave,Brooklyn,NY 11211,USA"。这已经足够了——你总是可以在最后去掉美国。
我认为您需要使用"route"作为街道地址。
我使用相同的服务,根据我的经验,"路线"总是相当于街道地址,即使位置实际上不是街道!
我想你已经决定了如何算出这个城市的名字。等等。这是我采取的相同方法;查看几个不同位置的各种API结果,看看哪个字段能为您提供最一致的结果。
经过数小时的工作,我无法始终如一地提取公寓/房间/子房屋。拥有这些细节比能够具体地分离它更重要,所以我用这个绕过了它。
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]);
}
我已经像往常一样从自动完成中提取了信息,尽管跳过了"street_number"one_answers"route"。然后在选择后对自动完成值进行简单拆分,并使用第一部分,返回整个街道地址(包括工厂/公寓/房屋和街道名称)。
这项工作给了我很好的结果,满足了我的需求。祝你好运