rankby = Google Places Android API中的距离

时间:2013-01-09 23:34:42

标签: android google-places-api

我已根据其突出性编写了一些代码来搜索附近的地方。接下来,我想根据用户的上升距离让我的应用搜索位置。为了做到这一点,我了解到我需要使用rankby=distance,但rankby不允许radius的值 - 因此以下基于半径的搜索不起作用:

nearPlaces = googlePlaces.search(
    gps.getLatitude(), 
    gps.getLongitude(), 
    radius, 
    types
);

我看过几篇人们提出类似问题的博客和文章,但没有一个提供了似乎有用的答案。如果不是,我应该使用什么?

3 个答案:

答案 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

  1. 使用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;
    
  2. 解析返回的JSON并获取每个地方的坐标LAT / LON。

  3. 使用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公里。

  4. 为每个地点创建一个对象,其名称和距离当前位置的距离为内部变量。

  5. 生成一个包含所有对象位置的ArrayList。

  6. 根据距离使用方法比较器对ArrayList进行排序。