具有单元号/子预付款的Google地方自动填充建议不会出现在响应数组中

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"

这个问题是断断续续的,它适用于某些单位地址,但对其他地址失败.任何建议都将受到高度赞赏!!

Mou*_*Ash 7

在我看来,谷歌正在验证地址是真实的(当他们最后更新他们的地方数据库时至少是真实的 - 我想政府记录).问题是,在创建新的"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)


mig*_*uev 7

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放置详细信息(和地理编码)请求实际上会找到正确的子预测结果:

https://maps.googleapis.com/maps/api/place/details/json?placeid=Eig5LzMyMSBQaXR0IFN0cmVldCwgU3lkbmV5IE5TVywgQXVzdHJhbGlh

   "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搜索预测的"描述":

https://maps.googleapis.com/maps/api/geocode/json?&address=9%2F321%20Pitt%20St%2C%20Sydney%20NSW%202000%2C%20Australia

   "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)