2013-01-09 111 views
1

我已經編寫了一些代碼來根據它們的突出位置搜索附近的地方。接下來,我想根據距離用戶的距離提升我的應用搜索位置。爲了做到這一點,我才知道,我需要使用rankby=distancerankby不允許值radius - 所以下面的半徑爲基礎的搜索無法正常工作:rankby = Google Places中的距離Android API

​​

我見過幾個博客和人們提出類似問題的文章,但沒有一篇提供了似乎可行的答案。我應該使用什麼,如果不是以上情況?

回答

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

} 
6

正確的是rankBy=distance...

保持B資本rankBy...

+0

哇,真的有幫助! –

+1

謝謝你。該文件說「rankby」與小寫「b」不正確。 –

0

你可以繞過它。我用「Google商家Web服務的 https://developers.google.com/places/webservice/search:使用位置API(使用HttpURLConnection類發送請求的)所有的地方

  1. 得到一個JSON:

    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。

    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; 
    

    注意,距離爲步行,駕車或騎自行車的距離,這就是:使用距離矩陣API從當前位置到地方的每一個

  3. 所有距離的JSON我們感興趣的距離。半徑距離(空氣距離)不相關。步行/駕駛/騎行距離大於空中距離。因此,例如,您可以搜索半徑爲10公里的地方,但步行距離爲11公里。

  4. 爲每個位置創建一個對象,其名稱和距離當前位置的距離作爲內部變量。

  5. 生成包含所有對象位置的ArrayList。

  6. 根據距離使用方法比較器對ArrayList進行排序。