1

我写了一些代码来根据他们的突出搜索附近的地方。接下来,我想让我的应用根据与用户的距离递增来搜索位置。为了做到这一点,我了解到我需要使用rankby=distancerankby不允许使用值radius- 所以以下基于半径的搜索不起作用:

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

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

4

3 回答 3

7

正确的是rankBy=distance...

保持B资本在rankBy...

于 2013-01-21T07:27:39.670 回答
1

私有静态最终字符串 PLACES_SEARCH_URL = " https://maps.googleapis.com/maps/api/place/search/json?rankby=distance& ";

公共 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;
    }

}
于 2013-10-28T13:22:42.147 回答
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 进行排序。
于 2015-03-29T18:33:19.303 回答