2016-11-30 3 views
2

GoogleプレイスオートコンプリートAPIで使用されているLatLngBoundsオブジェクトは何ですか?GeoDataApi.getAutocompletePredictions()でLatLngBoundsの目的は何ですか?

..及び/又はそれが何を意味:

が緯度および経度境界

によって指定された特定領域に結果にバイアスをかけますか?

Googleプレイスオートコンプリートのドキュメントでは、LatLngBoundsAutocompleteFilterが渡されます。場所オートコンプリートを使用するには

PendingResult<AutocompletePredictionBuffer> result = 
    Places.GeoDataApi.getAutocompletePredictions(
     mGoogleApiClient, query, bounds, autocompleteFilter); 

、私は国によって言う、AutocompleteFilterは結果を制限どのように見ることができます。明確でないことは、LatLngBoundsがどのように使用されているかです。サンプルコードでは、これは境界オブジェクトのためにそこにある:

private static final LatLngBounds BOUNDS_MOUNTAIN_VIEW = 
        new LatLngBounds(
        new LatLng(37.398160, -122.180831), 
        new LatLng(37.430610, -121.972090)); 

それはバウンドがマウンテンビュー(SFベイエリアカリフォルニアの都市)にあると言い、まだフィルタがnullのとき、私はまだ他の国の結果を得ることができます。このリソースから

https://developers.google.com/places/android-api/autocomplete

アプリは(GeoDataApi.getAutocompletePredictionsを呼び出すことによって、オートコンプリートサービスから予測地名および/またはアドレスのリストを取得することができます)、以下のパラメータを渡す:

必須:A LatLngBoundsオブジェクト。緯度と経度の境界で指定された特定の領域に結果をバイアスします。

オプション:オートコンプリートフィルタには、1つ以上の種類の場所に結果を制限するために使用できる場所の種類のセットが含まれています。

答えて

3

Cafe The Coffee Dayを検索したい場合は、LatLngBoundsを設定するとその場所に応じた表示が行われます。

例えばあなたがニューヨークLatLngBoundsを設定し、カフェのコーヒーの日を検索する場合、あなたはニューヨークの結果が表示されます。 LatLngBoundsシドニーに設定すると、シドニーという結果が表示されます。

今現在地にLatLngBoundsを設定する場合は、現在地を取得し、それに応じてLatLngBoundsを設定する必要があります。

半径を指定して特定の結果を得ることもできます。

私は現在の都市の結果を得るために以下のコードを使用しています。

protected GoogleApiClient mGoogleApiClient; 
private PlaceAutocompleteAdapter mAdapter; 
AutoCompleteTextView autoTextViewPlace; 

mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
       .addApi(Places.GEO_DATA_API) 
       .build(); 

// I am getting Latitude and Longitude From Web API 

if((strLatitude != null && !strLatitude.trim().isEmpty()) && (strLongitude != null && !strLongitude.trim().isEmpty())){ 
     LatLng currentLatLng = new LatLng(Double.parseDouble(strLatitude), Double.parseDouble(strLongitude)); 
     if(currentLatLng != null){ 
       setLatlngBounds(currentLatLng); 
     } 
} 

public void setLatlngBounds(LatLng center){ 

     double radiusDegrees = 0.10; 
     LatLng northEast = new LatLng(center.latitude + radiusDegrees, center.longitude + radiusDegrees); 
     LatLng southWest = new LatLng(center.latitude - radiusDegrees, center.longitude - radiusDegrees); 
     LatLngBounds bounds = LatLngBounds.builder().include(northEast).include(southWest).build(); 

     mAdapter = new PlaceAutocompleteAdapter(getActivity(), mGoogleApiClient, bounds, 
       null); 
     autoTextViewPlace.setAdapter(mAdapter); 

    } 
+1

私が正確に理解しているかどうかはわかりません。なぜなら、バインディングの外側に結果が表示されていたからです。それは、オーストラリアとニューヨークで同じ名前の2つのカフェがある場合、「LatLngBounds」をニューヨーク内に設定し、国を制限するフィルタを持たないようにすると、ニューヨークのカフェが最初に現れることを意味します。オーストラリアでは依然として優先順位が下がっていますか? – gnB

+0

私の更新されたコードを見てください。私の場合、期待どおりに働いています。 radiusDegreesを設定しましたか? –

+1

そこに素敵なサンプルコードがあります。私は、 'BOUNDS_MOUNTAIN_VIEW'の例で定義されている' LatLngBounds'オブジェクトを使っていました。私の要件は、少なくとも全国規模で検索することです。境界が1都市だけであると言えば、境界オブジェクトによって検索半径が小さくなりすぎるという懸念があります。しかし、NY City、USA **の前に、California ** New York Pizza **(マウンテンビューの境界線に近い)のローカルビジネスが登場しても、NY Cityが登場することはまだあります。私はこれが文書が* "**バイアスをかける**結果" *を意味するものだと思う。実際には***の概念を制限する***これらの結果を制限する – gnB

関連する問題