0

我如何使用 rankBy=distance 按距离对地点列表进行排序,并在列表视图中的商家名称旁边显示该距离???

protected String doInBackground(String... args) {
    googlePlaces = new GooglePlaces();                      
    try {
        String types = null;
        double radius = 400;
        nearPlaces = googlePlaces.search(gps.getLatitude(),gps.getLongitude(), radius, types);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
4

2 回答 2

2

我目前正在自己​​做这件事。

  1. 如 Google Places API 文档所述,请勿在 rankBy=distance 中包含“radius”参数。
  2. 获取地点列表后,您将不得不再次调用以获取每个地点的详细信息,以便您可以获取每个地点的地址和纬度/纬度。
  3. 然后使用当前位置,计算结果中每个地方的距离。
于 2013-03-28T20:43:47.820 回答
2

您可以使用此搜索 URL 来实现您所描述的内容:

private static final String PLACES_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/search/json?rankby=distance&";

public PlacesList search(double latitude, double longitude, double radius, String types) throws Exception {
    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:13:13.530 回答