其他分享
首页 > 其他分享> > android-GeoDataApi.getAutocompletePredictions()中LatLngBounds的用途是什么?

android-GeoDataApi.getAutocompletePredictions()中LatLngBounds的用途是什么?

作者:互联网

Google Places Autocomplete API中使用的LatLngBounds对象是什么?

..和/或它的意思是:

biasing the results to a specific area specified by latitude and longitude bounds

在Google地方信息自动填充文档中,它表示要传入LatLngBounds和AutocompleteFilter.

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

在使用“地方信息自动填充”功能后,我可以看到AutocompleteFilter如何限制结果(例如按国家/地区).还不清楚如何使用LatLngBounds.在示例代码中,Bounds对象具有以下内容:

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

它说的范围是Mountain View(加利福尼亚州旧金山湾区的一个城市),但是当filter为null时,我仍然可以获得其他国家/地区的结果.

从此资源:
https://developers.google.com/places/android-api/autocomplete

Your app can get a list of predicted place names and/or addresses from the autocomplete service by calling GeoDataApi.getAutocompletePredictions(), passing the following parameters:

Required: A LatLngBounds object, biasing the results to a specific area specified by latitude and longitude bounds.

Optional: An AutocompleteFilter containing a set of place types, which you can use to restrict the results to one or more types of place.

解决方法:

假设您要搜索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);

    }

标签:google-places-api,android
来源: https://codeday.me/bug/20191026/1936786.html