2017-09-14 3 views
0

Googleマップのオートコンプリートはほとんどすべてのケースで機能していますが、1つの住所では奇妙な動作をします。Googleマップのオートコンプリートプロンプトと返された場所が一致しない

JSFiddle @geocodezipのおかげで、問題が示されました。

これはthis issueに似ていますが、問題が返されなかった点を除きます。同じ名前の場所が返されますが、別の場所にあります。

正しいアドレスが提案ボックスに表示されますが、place_changedイベントでは異なります。 2つのアドレスは、互いに大きな距離に配置されています。図から分かるように

Differing results for autocomplete

、これはオートコンプリートのデモに再現性があるので、私はそれは実装の問題だとは思いません。誰もこの種の行動を見て、それを修正することができましたか?

さらに、元のオートコンプリート提案によって返されたアドレスのAutocompleteServiceによってクエリ予測を要求すると、ZERO_RESULTSが返されます。

new google.maps.places.AutocompleteService(); 
    service.getQueryPredictions({ input: '77 Main Road, Crowthorne AH, Sandton, South Africa' }, function(predictions, status) { 
     if (status != google.maps.places.PlacesServiceStatus.OK) { 
     alert(status); 
     return; 
     } 

     predictions.forEach(function(prediction) { 
     console.log(prediction); 

     }); 
    }); 
+0

RE:なぜこのコードは動作していないのですか。私が使用しているコードは、この特定のアドレスセットに対しては動作していないGoogle独自の例と同じです。 –

+1

[結果を得るために必要な住所の部分に問題を示すフィドル]](https://jsfiddle.net/geocodezip/yr8z1zdr/)(および結果のplace_idの詳細要求)。 Places APIに関する明確な問題のように見えます。 – geocodezip

+0

回避策はありますか? 'place_changed'イベントが発生すると、入力ボックスからオートコンプリートごとに正しいアドレスを取得して間違ったアドレスに更新することができますが、明らかに、場所のコンポーネントに分解されないフォーマットされたStringです。 –

答えて

1

問題はGoogleの問題追跡ツールで報告されました。あなたは見ているし、ここにあなたのコメントを追加することができます。

https://issuetracker.google.com/issues/35830687

を私は問題が何であるかを説明しましょう。プレイスIDのドキュメントを確認すると、プレイスIDの2つのオプションがあることがわかります。

https://developers.google.com/places/place-id#id-overview

ChIJrTLr-GyuEmsRBfy61i59si0のような短い場所IDとEisxMyBNYXJrZXQgU3RyZWV0LCBXaWxtaW5ndG9uLCBOQyAyODQwMSwgVVNBなどの長い場所のID。短いプレースIDが表示されると、Googleはデータベース内のこのアドレスの正確な機能を持っていることを意味します。長いプレースIDはGoogleに正確な機能がなく、アドレスを補間しようとしていることを意味します。補間は、オートコンプリートと場所の詳細で異なる場合があります。この場合、質問に記載されている問題を確認し、bug 35830687と報告します。

ここでは、例の場所IDを確認しましょう。

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=77%20Main%20Road%2C%20Crowthorne%20AH&key=API_KEY

は私が応答

"predictions":[ 
    { 
    "description":"77 Main Road, Crowthorne AH, Sandton, South Africa", 
    "id":"a0ab043870d062bad00d5ce2ed91faaf7250efbe", 
    "matched_substrings":[ 
     { 
     "length":12, 
     "offset":0 
     }, 
     { 
     "length":13, 
     "offset":14 
     } 
    ],"place_id":"EjI3NyBNYWluIFJvYWQsIENyb3d0aG9ybmUgQUgsIFNhbmR0b24sIFNvdXRoIEFmcmljYQ", 
.... 

場所のIDが長い1 EjI3NyBNYWluIFJvYWQsIENyb3d0aG9ybmUgQUgsIFNhbmR0b24sIFNvdXRoIEFmcmljYQであり、それは、アドレスが補間された意味で次のテキストを見ることができます:私は、次の場所のオートコンプリートリクエストを実行します。

最も直接的な修正は、'77 Main Road、Crowthorne AH、Sandton、South Africa 'の正確なアドレスを作成している可能性があります。そこGoogleに欠落データを報告する唯一の方法であり、それは、次のサポートヘルプで説明しています:

https://support.google.com/maps/answer/3094045

あなたがフィードバックを送信し、Googleはそのアドレス'77主要道路、クロウソーンAH、サントン、南を知らせなければなりませんアフリカ 'が欠落している。そうでなければ、バグ35830687が解決されるまで待つべきです。

これが疑問を説明してくれることを願っています。

+0

ありがとう、それはそれを説明します。私たちが探しているアドレスの性質のために、これらの数がいくつかあります。長い 'place_id'がある場合、私はオートコンプリートサービスによって返された条件を使用して手動でアドレスを確認させるかもしれません。 –

+0

リスナーで返された 'place_id'の長さをチェックするだけでこれを検出できますか? –

+0

私が知っている限り、正確な機能には、Ch ...で始まる短いプレースIDがあります。補間されたフィーチャは、 'E ... 'で始まる長いプレースIDを持っています。このロジックを適用することはできますが、Googleは事前の通知なしにフォーマットを変更できることに注意してください。 – xomena

関連する問題