Android谷歌地图自动完成GeoDataAPI给出界限特定的结果

时间:2015-10-15 10:49:23

标签: android google-maps google-places-api

我正在谷歌地图上实现搜索功能。为此,我使用的是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边界值。

非常感谢您的帮助。

1 个答案:

答案 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对象。