我已根据其突出性编写了一些代码来搜索附近的地方。接下来,我想根据用户的上升距离让我的应用搜索位置。为了做到这一点,我了解到我需要使用rankby=distance
,但rankby
不允许radius
的值 - 因此以下基于半径的搜索不起作用:
nearPlaces = googlePlaces.search(
gps.getLatitude(),
gps.getLongitude(),
radius,
types
);
我看过几篇人们提出类似问题的博客和文章,但没有一个提供了似乎有用的答案。如果不是,我应该使用什么?
答案 0 :(得分:7)
正确是rankBy=distance...
将B
首都保留在rankBy...
答案 1 :(得分:1)
private static final String PLACES_SEARCH_URL =“https://maps.googleapis.com/maps/api/place/search/json?rankby=distance&”;
public PlacesList搜索(双纬度,双经度,双半径,字符串类型) 抛出异常{
this._latitude = latitude;
this._longitude = longitude;
this._radius = radius;
//this._rankby=_rankby;
try {
HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
HttpRequest request = httpRequestFactory
.buildGetRequest(new GenericUrl(PLACES_SEARCH_URL));
request.getUrl().put("key", API_KEY);
request.getUrl().put("location", _latitude + "," + _longitude);
// request.getUrl().put("radius", _radius);
request.getUrl().put("rankBy", _radius);
// in meters
request.getUrl().put("sensor", "false");
//request.getUrl().put("rankby", _rankby);
if(types != null)
request.getUrl().put("types", types);
PlacesList list = request.execute().parseAs(PlacesList.class);
// Check log cat for places response status
Log.d("Places Status", "" + list.status);
return list;
} catch (HttpResponseException e) {
Log.e("Error:", e.getMessage());
return null;
}
}
答案 2 :(得分:0)
你可以绕过它。我使用'GOOGLE PLACES WEB SERVICES' https://developers.google.com/places/webservice/search:
使用PLACES API获取所有场所的JSON(使用HttpURLConnection发送请求):
String nearByPlaceSearchURL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?"
+ "location=" + myLatPosition + "," + myLonPosition
+ "&radius=" + myPlaceDistanceMeters
+ "&types=" + myPlaceName
+ "&key=" + MyConstants.KEY_FOR_PLACES_AND_DISTANCES_API;
解析返回的JSON并获取每个地方的坐标LAT / LON。
使用DISTANCE MATRIX API获取当前位置到每个位置的所有距离的JSON:
String distancesSearchURL = "https://maps.googleapis.com/maps/api/distancematrix/json?"
+ "origins=" + myLatPosition + "," + myLonPosition
+ "&destinations=" + allPlacesCoordinates
+ "&mode=walking"
+ "&key=" + MyConstants.KEY_FOR_PLACES_AND_DISTANCES_API;
请注意,距离是步行,驾驶或骑车距离,这是我们感兴趣的距离。半径距离(空中距离)无关。步行/驾驶/骑行距离大于空中距离。因此,例如,您可以搜索半径为10公里的地方,但步行距离为11公里。
为每个地点创建一个对象,其名称和距离当前位置的距离为内部变量。
生成一个包含所有对象位置的ArrayList。