LatongBounds在GeoDataApi.getAutocompletePredictions()中的用途是什么?

时间:2016-11-30 04:07:41

标签: android google-places-api

Google商家信息自动填充API中使用的LatLngBounds对象是什么?

..和/或它是什么意思:

  

将结果偏向特定区域 由纬度和经度范围指定

在Google商家信息自动填充文档中,它表示要传递LatLngBoundsAutocompleteFilter

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

它表示绑定是山景城(加利福尼亚州旧金山湾区的一个城市),但当过滤器为空时,我仍然可以获得其他国家的结果。

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

  

您的应用可以通过调用GeoDataApi.getAutocompletePredictions()从自动填充服务获取预测的地名和/或地址列表,并传递以下参数:

     

必需: LatLngBounds 对象,将结果偏移到由纬度和经度范围指定的特定区域。

     

可选:包含一组地点类型的 AutocompleteFilter ,您可以将其用于将结果限制为一种或多种类型的地点。

1 个答案:

答案 0 :(得分:4)

假设您要搜索Cafe The Coffee Day,如果您设置LatLngBounds结果将根据该位置显示。

例如,如果您在纽约中设置LatLngBounds并搜索咖啡馆咖啡日,则会看到纽约的结果。如果您设置悉尼LatLngBounds,您会看到悉尼的结果。

现在如果您想将LatLngBounds设置为您的位置,那么您必须获取当前位置并根据该位置设置LatLngBounds

您还可以指定 radius 以获取特定结果。

例如

我使用下面的代码来获取当前城市的结果。

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

    }