Google商家信息自动填充API中使用的LatLngBounds
对象是什么?
..和/或它是什么意思:
将结果偏向特定区域 由纬度和经度范围指定
在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));
它表示绑定是山景城(加利福尼亚州旧金山湾区的一个城市),但当过滤器为空时,我仍然可以获得其他国家的结果。
从这个资源: https://developers.google.com/places/android-api/autocomplete
您的应用可以通过调用GeoDataApi.getAutocompletePredictions()从自动填充服务获取预测的地名和/或地址列表,并传递以下参数:
必需: LatLngBounds 对象,将结果偏移到由纬度和经度范围指定的特定区域。
可选:包含一组地点类型的 AutocompleteFilter ,您可以将其用于将结果限制为一种或多种类型的地点。
答案 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);
}