此问题涉及Try It Yourself section on the Google Maps Place Autocomplete Address Sample的一种变体,您可以从中获得带有演示API密钥的小提琴。
问题在于,我花了两个小时尝试使其按我希望的方式工作后,才使它现在可以正常工作。当我键入以前居住的地址时,自动建议输入我的地址,北卡罗来纳州北霍普金斯市82 Hopkins rd,然后单击结果将其填入我的城镇,即康涅狄格州的利奇菲尔德,这实际上是一个较大的城镇Google显然也知道Northfield是个小城镇,因为它显示了我想要的确切地址,但是当我单击它时,为什么会显示Litchfield?如果我尝试其他城镇,等等。我看不到这种情况。我想象没有解决方案,因为当我尝试更改时: {types:['geocode']});到{types:['(city)']}));并尝试在Northfield中键入内容,然后显示Northfield镇的其他州,但没有显示康涅狄格州。因此,我想我的老城区太小了,Google不在乎,但是为什么要在自动建议中显示呢?奇怪...
import matplotlib.pyplot as plt
import numpy as np
n = 10
a = np.random.rand(1,n,n,1)
plt.imshow(a[0,:,:,0],cmap='hot')
plt.show()
k = 10
idx = np.argsort(a.ravel())[:-k-1:-1]
aidx = np.column_stack(np.unravel_index(idx, a.shape))
a[:]=0
a[aidx[:,0],aidx[:,1],aidx[:,2],aidx[:,3]] = 1
plt.imshow(a[0,:,:,0])
plt.show()
答案 0 :(得分:1)
您之所以会看到这些结果,是因为诺斯菲尔德不是城市。根据Wikipedia的说法,Northfield, CT是“ Litchfield, Litchfield County, Connecticut镇中的一个未成立的村庄”。但是,您很幸运:您正在查看的示例使用的是API输出address_component
,其中formatted_address
正确地列为82 Hopkins Rd, Northfield, CT 06778, USA
。
从"Geocoding Address Types section" in the Google Maps Javascript API documentation开始,有多种类型的地理编码结果。有些,例如locality
,需要公司注册; sublocality_level_1
至sublocality_level_5
指的是比这窄的区域。
即使没有Java语言,也可以进行搜索:
https://maps.googleapis.com/maps/api/place/findplacefromtext/json?key=YOUR_KEY&inputtype=textquery&input=82+hopkins+rd,+northfield,+ct
...获得ChIJZYpAVT2W54kRPnm9uVA3cpc
的位置ID,然后可以进行后续的位置搜索:
https://maps.googleapis.com/maps/api/place/details/json?key=YOUR_KEY&place_id=ChIJZYpAVT2W54kRPnm9uVA3cpc
...以揭示地址类型的不同类型:
"address_components" : [
{
"long_name" : "82",
"short_name" : "82",
"types" : [ "street_number" ]
},
{
"long_name" : "Hopkins Road",
"short_name" : "Hopkins Rd",
"types" : [ "route" ]
},
{
"long_name" : "Northfield",
"short_name" : "Northfield",
"types" : [ "neighborhood", "political" ]
},
{
"long_name" : "Litchfield",
"short_name" : "Litchfield",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Litchfield",
"short_name" : "Litchfield",
"types" : [ "administrative_area_level_3", "political" ]
},
{
"long_name" : "Litchfield County",
"short_name" : "Litchfield County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Connecticut",
"short_name" : "CT",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "06778",
"short_name" : "06778",
"types" : [ "postal_code" ]
}
在您看来,这也是formatted_address
的{{1}},这正是您想要的。
在您引用的示例"try it yourself" section on the Place Autocomplete Address Form sample中,发生了两个单独的过程:自动完成功能搜索您的地址并建议格式化的地址,然后地点详细信息调用将地址的结构化部分拆包如所须。但是,如代码注释中所示:
82 Hopkins Rd, Northfield, CT 06778, USA
因此,通过调整格式as I have in this Fiddle,即使城市适当地位于利奇菲尔德,您也可以看到格式设置的地址包括列为邻居的诺斯菲尔德。请注意,这也是特定于位置的行为,因为“华盛顿特区宾夕法尼亚大道1600号”返回格式化格式的地址中“省略”的“西北华盛顿”邻域。 >
因此,要获得所需的行为,只需使用<!-- Note: Selection of address components in this example is typical.
You may need to adjust it for the locations relevant to your app. See
https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
-->
,或考虑扩展formatted_address
以提供所需的粒度。