当我按地址搜索结果时,有些查询结果在Geocoding API的JSON响应代码中没有locality
。这就是示例#1中搜索Houten
时发生的情况。但当我在示例#2中搜索像Vianen
这样的城市时,就会有一个位置。这是API内部的一个bug吗?这个问题可以解决吗?
示例#1
{
"results" : [
{
"address_components" : [
{
"long_name" : "Houten",
"short_name" : "Houten",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Utrecht",
"short_name" : "UT",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Nederland",
"short_name" : "NL",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Houten, Nederland",
[......],
"types" : [ "administrative_area_level_2", "political" ]
}
],
"status" : "OK"
}
示例#2
{
"results" : [
{
"address_components" : [
{
"long_name" : "Vianen",
"short_name" : "Vianen",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Vianen",
"short_name" : "Vianen",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Utrecht",
"short_name" : "UT",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Nederland",
"short_name" : "NL",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Vianen, Nederland",
[......],
"place_id" : "ChIJJ8URC75jxkcRlnwIUl-xUDY",
"types" : [ "locality", "political" ]
}
],
"status" : "OK"
}
这听起来像是API方面的评分问题。正如我们所看到的,Geocoding API更喜欢administrative_area_level_2类型的结果。出于某种原因,API认为名称为Houten的行政区域比名称相同的地方更突出,并在响应中返回行政区域。
您可以尝试使用过滤器类型设置为城市的地点自动完成请求来获取地点的地点ID。
https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Houten&types=(cities)&key=YOUR_API_KEY
此请求作为第一个建议返回"Houten,Netherlands",位置ID为ChIJu_QGwOdmxkcRPRqtvufr2Ic
,类型为locality。现在你可以使用地理编码来获得这个城市:
https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJu_QGwOdmxkcRPRqtvufr2Ic&key=YOUR_API_KEY
Geocoder工具中的相同结果:
https://google-developers.appspot.com/maps/documentation/utils/geocoder/#place_id%3DChIJu_QGwOdmxkcRPRqtvufr2Ic
我希望这个变通办法可能会有所帮助。