Tor*_*kto 23 google-maps-api-3 google-places-api
我正在使用Google Places API来使用javascript自动完成地址
当我在输入框中键入单元号和地址的街道号时,它会在建议下拉列表中显示结果,但是当我选择地址时,操作'place_changed'事件的侦听器没有任何地址,其地址为address_component,类型为'subpremise '甚至formatted_address属性中也没有单位编号.虽然它确实包含来自'街道号码','城市','国家'等的其他详细信息
例如:如果我输入"1403/648 Bourke Street",并且对澳大利亚有国家限制.它显示我在下拉列表中的5个结果,第一个作为"1403/648 Bourke street,Melbourne,Australia",但是当我选择此选项时,我在place_change事件监听器中获得的是"648 Bourke street,Melbourne,Australia"
这个问题是断断续续的,它适用于某些单位地址,但对其他地址失败.任何建议都将受到高度赞赏!!
在我看来,谷歌正在验证地址是真实的(当他们最后更新他们的地方数据库时至少是真实的 - 我想政府记录).问题是,在创建新的"subpremise"地址的过程中,细分一直在发生,并且对这些地址的查找似乎更频繁.奇怪的是,他们允许"无效"地址作为自动完成建议,但随后限制结果.
查看下面的悉尼地址将返回"subpremise"和"street_number"
"9/321 Pitt Street,Sydney,New South Wales,Australia"
以下墨尔本地址仅与"路线"一样准确
"2/321 Pitt Street,Brunswick,Victoria,Australia"
最大的问题是结果不会在回复中的任何地方返回单位或街道号码.
我已经将以下JS一起入侵,将用户输入的地址与返回的结果进行比较.如果缺少"数字",则添加它们.您可以根据需要自定义代码.
if (addressType == 'route') {
var regex = RegExp('^(.*)'+GPLACESSTREET.split(' ',1)[0]), // get all the user entered values before a match with the first word from the Google result
result = regex.exec(INPUTFEILD.value);
if ( Array.isArray(result) ) {
FULLSTREETADDRESS = result[1]+''+GPLACESSTREET; // add the street name to the user-entered unit & street number
}
}
Run Code Online (Sandbox Code Playgroud)
Places Autocomplete API不支持"subpremise"结果.这段时间已在公共问题跟踪器中报告并得到解答,网址为https://issuetracker.google.com/35830389
对于subpremise结果的澳大利亚地址看起来与street_address/premise结果"足够接近"(它们主要以数字开头).这当前导致Place Autocomplete返回看起来像subpremise结果的内容,但是请注意该类型仍然是"route":
http://maps.googleapis.com/maps/api/place/autocomplete/json?input=9/321%20Pitt%20Street,%20Sydney
description: "9/321 Pitt Street, Sydney NSW, Australia",
place_id: "Eig5LzMyMSBQaXR0IFN0cmVldCwgU3lkbmV5IE5TVywgQXVzdHJhbGlh",
types: ["route","geocode",],
Run Code Online (Sandbox Code Playgroud)
使用此place_id放置详细信息(和地理编码)请求实际上会找到正确的子预测结果:
"result" : {
"address_components" : [
{
"long_name" : "9",
"short_name" : "9",
"types" : [ "subpremise" ]
},
{
"long_name" : "321",
"short_name" : "321",
"types" : [ "street_number" ]
},
...
"formatted_address" : "9/321 Pitt St, Sydney NSW 2000, Australia",
"types" : [ "subpremise" ],
Run Code Online (Sandbox Code Playgroud)
但是,这并不能保证适用于所有subpremise查询,甚至长期查询.
更可靠的方法是使用Geocoding API搜索预测的"描述":
"results" : [
{
"address_components" : [
{
"long_name" : "9",
"short_name" : "9",
"types" : [ "subpremise" ]
},
{
"long_name" : "321",
"short_name" : "321",
"types" : [ "street_number" ]
},
...
],
"formatted_address" : "9/321 Pitt St, Sydney NSW 2000, Australia",
"place_id" : "Eik5LzMyMSBQaXR0IFN0LCBTeWRuZXkgTlNXIDIwMDAsIEF1c3RyYWxpYSIdGhsKFgoUChIJkyPU0z2uEmsR-pmiK6UvZUASATk",
"types" : [ "subpremise" ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9409 次 |
| 最近记录: |