我正在谷歌地图上实现搜索功能。为此,我使用的是Google的Places.GeoDataApi。
但我面临的问题是它是基于LatLanBounds值进行搜索。 目前我在下面的api中传递悉尼特定的边界,所以在搜索时它偏向于这些边界并首先检查syndey特定位置。
private static final LatLngBounds mBounds= new LatLngBounds(
new LatLng(-34.041458, 150.790100), new LatLng(-33.682247, 151.383362));
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi
.getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
mBounds, mPlaceFilter);
根据我的要求,Above API应首先返回near by area的结果。例如,如果用户在印度并搜索某些内容,则应优先返回与印度相关的建议。如果用户在巴西尝试搜索某些内容,则API应返回与巴西相关的建议。我不知道如何根据用户当前的国家或地点传递动态LatLng边界值。
非常感谢您的帮助。
答案 0 :(得分:-1)
这是一个月大的问题,但我希望我的回答能帮助OP或其他有类似问题的人。
主要问题的答案非常简单: 每次获取有关用户位置的信息时,都会创建新的 LatLngBounds (docs)对象,并将此对象作为 .getAutocompletePredictions 的参数传递:
LatLng sw = new LatLng(SOUTH_WEST_LAT, SOUTH_WEST_LNG);
LatLng ne = new LatLng(NORTH_EAST_LAT, NORTH_EAST_LNG);
LatLngBounds bounds = new LatLngBounds(sw, ne);
Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, constraint, bounds, null);
这两个点,西南和东北是广场的对角,在用户的位置周围形成一个区域。这是界限。
关于你的第二个问题,在评论中。我想你有你的用户位置(例如来自GPS),例如在巴西,你需要找到这个位置的界限。 为此,我会使用基本的Google Places API调用(您可以在浏览器中试用):
https://maps.googleapis.com/maps/api/geocode/json?address=Brazil
将返回关于巴西的JSON格式数据,其中包含字段 bounds :
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 42.1282269,
"lng" : -87.7108162
},
"southwest" : {
"lat" : 42.0886089,
"lng" : -87.7708629
}
},
...
}
如您所见,这些是巴西所在的东北和西南边界。您现在可以将它们放入LatLngBounds对象。