从JSON Google地理编码器结果中获取单个地址组件似乎有些困难。例如,我想根据地址获取县名。有人可以解释为什么,例如,这段代码不起作用?
function county(){
var geo = Maps.newGeocoder().geocode('address');
for (var i=0; i<geo.results.address_components.length; i++)
for (var j=0; j<geo.results.address_components[i].types.length; j++)
if (geo.results.address_components[i].types[j]=="administrative_area_level_2")
var county = geo.results.address_components[i].long_name;
}
我知道这过于简单,但它甚至无法识别results.address_components
有什么建议吗?
答案 0 :(得分:0)
您可以使用Logger对象查看中间数据,如下所示:
Logger.log(geo)
您会在视图菜单中的日志下看到类似内容:
{results=[{address_components=[{long_name=Address, short_name=Address, types=[point_of_interest, establishment]}, {long_name=Madrid, short_name=Madrid, types=[locality, political]}, {long_name=Madrid, short_name=M, types=[administrative_area_level_2, political]}, {long_name=Community of Madrid, short_name=Community of Madrid, types=[administrative_area_level_1, political]}, {long_name=Spain, short_name=ES, types=[country, political]}, {long_name=28039, short_name=28039, types=[postal_code]}], formatted_address=Address, 28039 Madrid, Spain, types=[hospital, point_of_interest, establishment], geometry={viewport={southwest={lng=-3.708366880291502, lat=40.44598801970851}, northeast={lng=-3.705668919708498, lat=40.44868598029151}}, location_type=APPROXIMATE, location={lng=-3.7070179, lat=40.447337}}}, {address_components=[{long_name=Address:, short_name=Address:, types=[point_of_interest, establishment]}, {long_name=Pineville, short_name=Pineville, types=[locality, political]}, {long_name=1, Charlotte, short_name=1, Charlotte, types=[administrative_area_level_3, political]}, {long_name=Mecklenburg County, .........
如果你跑
function myFunction() {
var geo = Maps.newGeocoder().geocode('1600 pennsylvania ave, washington, dc');
Logger.log(geo.results[0].address_components);
}
myFunction();
您可以在日志中看到组件,它们将如下所示:
{long_name=1600, short_name=1600, types=[street_number]}, {long_name=President's Park, short_name=President's Park, types=[establishment]}, {long_name=Pennsylvania Avenue Northwest, short_name=Pennsylvania Ave NW, types=[route]}, {long_name=Washington, short_name=Washington, types=[locality, political]}, {long_name=District of Columbia, short_name=DC, types=[administrative_area_level_1, political]}, {long_name=United States, short_name=US, types=[country, political]}, {long_name=20500, short_name=20500, types=[postal_code]}
在这种情况下,没有任何组件是&#34; administrative_area_level_2&#34;,但在您的情况下可能是。
您还应该考虑使用Array.forEach
。
希望这可以帮助您确定更具体的问题。
答案 1 :(得分:0)
要添加Aaron和Micah的答案,你真的很接近,只需要选择第一个结果。 geocode
生成一系列结果,但如果您对单个地址进行地理编码,那么抓住第一个地址就行了。他们的答案使用的是白宫地址,该地址似乎没有县,但使用谷歌总部(正如谷歌在例子中所做的那样)会产生有效的结果。
这里是用于选择geocoding responses的任何组件的通用函数,同时利用indexOf
检查所需组件是否在types
数组中(保存{{1}循环):
for
使用function getAddressComponent(address, component) {
var geo = Maps.newGeocoder().geocode(address);
var resultComponents = geo.results[0].address_components;
for (var i = 0; i < resultComponents.length; i++) {
if (resultComponents[i].types.indexOf(component) > -1) {
return resultComponents[i].long_name;
}
}
}
进行测试,我们得到了圣克拉拉县的正确价值&#39;:
Logger