我正在使用place.geodataapi for android,并且根据执行请求的设备的位置,我会获得不同的搜索结果。我需要结果始终位于边界内。我看不到在getautocompletepredictions请求中可以设置该设置的位置。我缺少什么吗?
我使用googleapiclient获得地址/放置自动完整建议,并通过以下方式将API放置:
Places.GeoDataApi.getAutocompletePredictions()
该方法需要一个googleapiclient对象,一个要自动完成的字符串和一个latlngbounds对象才能限制搜索范围。这就是我的用法的样子:
LatLngBounds bounds = new LatLngBounds(new LatLng(38.46572222050097, -107.75668023304138),new LatLng(39.913037779499035, -105.88929176695862));
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.build();
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi.getAutocompletePredictions(googleApiClient, "Starbucks", bounds, null);
使用中的版本:com.google.android.gms:Play-Services-Location:8.3.0
文档:https://developers.google.com/places/android/autocomplete
好消息。截至2018年4月,Google增加了可能在自动完成预测中处理界限的可能性。现在,您可以使用GeoDataClient
类的getAutocompletePredictions()
方法与boundsMode
参数
public Task<AutocompletePredictionBufferResponse> getAutocompletePredictions (String query, LatLngBounds bounds, int boundsMode, AutocompleteFilter filter)
boundsmode - 如何处理边界参数。设置为严格的预测时,所提供的界限包含。如果设置为偏见预测会偏向提供的界限。如果边界为null,则此参数无效。
来源:https://developers.google.com/android/reference/com/google/android/android/gms/location/geodataclient
您可以将代码修改为类似的内容:
LatLngBounds bounds = new LatLngBounds(new LatLng(38.46572222050097, -107.75668023304138),new LatLng(39.913037779499035, -105.88929176695862));
GeoDataClient mGeoDataClient = Places.getGeoDataClient(getBaseContext());;
Task<AutocompletePredictionBufferResponse> results =
mGeoDataClient.getAutocompletePredictions("Starbucks", bounds, GeoDataClient.BoundsMode.STRICT, null);
try {
Tasks.await(results, 60, TimeUnit.SECONDS);
} catch (ExecutionException | InterruptedException | TimeoutException e) {
e.printStackTrace();
}
try {
AutocompletePredictionBufferResponse autocompletePredictions = results.getResult();
Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
+ " predictions.");
// Freeze the results immutable representation that can be stored safely.
ArrayList<AutocompletePrediction> al = DataBufferUtils.freezeAndClose(autocompletePredictions);
for (AutocompletePrediction p : al) {
CharSequence cs = p.getFullText(new CharacterStyle() {
@Override
public void updateDrawState(TextPaint tp) {
}
});
Log.i(TAG, cs.toString());
}
} catch (RuntimeExecutionException e) {
// If the query did not complete successfully return null
Log.e(TAG, "Error getting autocomplete prediction API call", e);
}
我希望这会有所帮助!
我遇到了同样的问题。
不幸的是,没有办法使用Google Places API Android 。
获得特定范围的位置但是,您仍然可以使用Google Places API Web Service 。
使用附近搜索。文档此处:https://developers.google.com/places/web-service/search?hl=fr
然后,您应该能够在参数中设置界限,并在JSON响应中获取ploce 内部,如下所述:https://stackoverflow.com/a/32404701/5446285