【问题标题】:rankby=distance in Google Places Android APIGoogle Places Android API 中的 rankby=距离
【发布时间】:2013-01-09 23:34:41
【问题描述】:

我已经编写了一些代码来根据它们的显着性搜索附近的地方。接下来,我想让我的应用根据与用户的距离递增来搜索位置。为此,我了解到我需要使用rankby=distance,但rankby 不允许radius 的值 - 所以以下基于半径的搜索不起作用:

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

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

【问题讨论】:

    标签: android google-places-api


    【解决方案1】:

    正确的是rankBy=distance...

    B大写保留在rankBy...

    【讨论】:

    • 谢谢你。文档中使用小写“b”表示“rankby”,这是不正确的。
    【解决方案2】:

    私有静态最终字符串 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;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      你可以绕过它。我使用了“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进行排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-08
        • 2014-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多