我正在实现谷歌地图上的搜索功能。为此,我正在使用谷歌的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);
根据我的要求,上述API应首先返回接近按区域计算的结果。例如,如果用户在印度并搜索某物,它应优先返回与印度有关的建议,如果巴西用户试图搜索某样东西,API应返回与巴西有关的建议。我不知道如何根据用户当前国家或位置传递动态LatLng边界值。
你的帮助会很感激的。
发布于 2015-11-19 05:24:43
这是一个月前的问题,但我希望我的答案能帮助OP或其他有类似问题的人。
主要问题的答案非常直接:每次获取用户位置信息并将该对象作为.getAutocompletePredictions的参数传递时,都创建新的LatLngBounds (文档)对象。
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);
这两个点,西南和东北是广场的相对角落,使用户的位置周围的区域。这就是束缚。
关于你的第二个问题,在评论。我想你有你的用户位置。例如,在巴西,你需要找到这个位置的边界。为此,我将使用基本的调用(您可以在浏览器中试用它):
https://maps.googleapis.com/maps/api/geocode/json?address=Brazil
它将返回有关巴西的JSON格式数据,其中包含字段界限:
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 42.1282269,
"lng" : -87.7108162
},
"southwest" : {
"lat" : 42.0886089,
"lng" : -87.7708629
}
},
...
}
正如你所看到的,这是巴西所在的广场的东北和西南边界。您现在可以将它们放入LatLngBounds对象中。
https://stackoverflow.com/questions/33146498
复制