5

這是第一次使用Google地圖API和Google地方API。我正在製作一個演示應用程序,用於顯示與用戶所在位置最接近的列表醫院(例如,各醫院的路線)。我已經能夠與下面的代碼來獲取用戶的位置:在Android中使用Google地圖API從用戶位置獲取附近地點的結果

public class MainActivity extends ActionBarActivity { 
    private GoogleMap map; 
    UiSettings mapSettings; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

     if (map != null) { 
      // map.addMarker(new MarkerOptions().position(myLocation).title("Start")); 
      map.setMyLocationEnabled(true); 
      mapSettings = map.getUiSettings(); 
      mapSettings.setScrollGesturesEnabled(true); 
      mapSettings.setZoomControlsEnabled(true); 
     } 
    } 
} 

的xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment" /> 


</RelativeLayout> 

我的問題我如何獲得使用谷歌的地方API醫院的列表,並顯示它們。任何幫助,提示,演練或教程將真正appericaited.Thanks提前。

+0

[Nearby Places](https://developers.google.com/places/android-api/)適用於Android,bro。希望這個幫助^^ –

+2

事實上,這將有助於... https://developers.google.com/places/web-service/ 如果有人正在尋找json並且不想在他們的應用中包含地圖 – therealprashant

回答

14

對於Android,我試圖使用Place picker for Android。它可以將built-in place picker UI widget添加到您的應用中,以便用戶可以從地圖上顯示的一組附近地點中進行選擇。它使用簡單,你只需要做的是:

int PLACE_PICKER_REQUEST = 1; 
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();  
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST); 

它會顯示以下UI挑一個地方,你,你可以通過下面獲得的地方信息:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PLACE_PICKER_REQUEST) { 
    if (resultCode == RESULT_OK) { 
     Place place = PlacePicker.getPlace(data, this); 
     String toastMsg = String.format("Place: %s", place.getName()); 
     Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show(); 
    } 
    } 
} 

enter image description here

有關更多詳細信息,請參閱指南here和代碼here

但是,不能設置地方類型,因爲它在UI生成無功能。如果您真的需要設置,你應該使用Google Places API Web Service APIhere,自己搜索的位置,解析JSON數據,並顯示在您的自己的UI。

附近搜索可讓您搜索指定區域內的地點。您可以通過提供關鍵字或指定您正在搜索的地點類型來優化您的搜索請求。

周邊搜索請求是採用以下形式的HTTP網址:

https://maps.googleapis.com/maps/api/place/nearbysearch/output?parameters 

注意,在參數你需要設置如何通過types=hospital

編輯

例使用Google Places API Web API Web服務API在JSON中搜索特定位置的請求。

請求

location: -33.8670,151.1957 
radius: 500 
types: food 
name: cruise 
key: API_KEY 

網址是:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670,151.1957&radius=500&types=food&name=cruise&key=API_KEY

和響應JSON這樣的:

{ 
    "debug_log" : { 
     "line" : [] 
    }, 
    "html_attributions" : [], 
    "logging_info" : { 
     "experiment_id" : [], 
     "query_geographic_location" : "AU" 
    }, 
    "results" : [ 
     { 
     "geometry" : { 
      "location" : { 
       "lat" : -33.86879, 
       "lng" : 151.194217 
      } 
     }, 
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png", 
     "id" : "21a0b251c9b8392186142c798263e289fe45b4aa", 
     "name" : "Rhythmboat Cruises", 
     "opening_hours" : { 
      "open_now" : false, 
      "weekday_text" : [] 
     }, 
     "photos" : [ 
      { 
       "height" : 426, 
       "html_attributions" : [ 
        "\u003ca href=\"https://www.google.com/maps/views/profile/104066891898402903288\"\u003eRhythmboat Cruises\u003c/a\u003e" 
       ], 
       "photo_reference" : "CmRdAAAA-YL_I_Gk02blOX6S0nKHry8PFu9pDyp3Y9AnqISsa3Eq8mkbdD5mXuu1Fax60s0nSy3iiX-h5j-ztyLHcc1-782MsLQsgLLa4t3ZgDmCMll-a8ABapZGnZwDKByk67LFEhBgedv_u_eYFsEo9ay8jxJjGhTUHKPJ4G82vBJqSNliuv7UlAtclw", 
       "width" : 640 
      } 
     ], 
     "place_id" : "ChIJyWEHuEmuEmsRm9hTkapTCrk", 
     "reference" : "CnRmAAAAvQlMKw-XtxEY4vWFCvudF7CEMQGI5ycNbfVgGl9rAF75fdiPOiLJw1k9NL2v8ZIJsOJuRS3Lm9Dw1vga4ajycAs7PlxN1MVnnYT9la0pBvEvSQNlyvszKANS1R4P7Mvk_jhqswMggqCUtwJ13LN2hRIQOiAkLTWUi3DOjVVOw7J5IRoUb_cJyJaJNqKdmkDM2f0OjQjh9F0", 
     "scope" : "GOOGLE", 
     "types" : [ "restaurant", "food", "point_of_interest", "establishment" ], 
     "vicinity" : "Pyrmont Bay Wharf (Near Australia Maritime Museum), Pyrmont, NSW 2009" 
     }, 
     { 
     "geometry" : { 
      "location" : { 
       "lat" : -33.867591, 
       "lng" : 151.201196 
      } 
     }, 
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png", 
     "id" : "a97f9fb468bcd26b68a23072a55af82d4b325e0d", 
     "name" : "Australian Cruise Group", 
     "opening_hours" : { 
      "open_now" : false, 
      "weekday_text" : [] 
     }, 
     "photos" : [ 
      { 
       "height" : 1331, 
       "html_attributions" : [ 
        "\u003ca href=\"https://www.google.com/maps/views/profile/110751364053842618118\"\u003eAustralian Cruise Group\u003c/a\u003e" 
       ], 
       "photo_reference" : "CmRdAAAAtEoj29FJcNBccrsu6bHt0xgwVGhYlciCY1fe6gTr_d5_KkeP3LITnOwnpNRJWnX39B04-aIBOKXKJH6ltx948T5vWIYBoah1yZDXsWngWZ5kMsK7xyCB5P_q_xBIBxxUEhAYWeB4PiOm_Jy093fB-j0iGhSYmIs9xB2aa6u-RH8V8lZEk-Q5ig", 
       "width" : 2000 
      } 
     ], 
     "place_id" : "ChIJrTLr-GyuEmsRBfy61i59si0", 
     "reference" : "CnRqAAAAFbukrZvRNsc05TreHUCrPEya5NcN9v0fFLLaK-D1fSyxFTuQlUDhDstU3qwXKw_fADX4W6guUkexax1nufgiYIuGCKoZPEnup1r-LhGGNz9dn1uf9Of5iOtZ1XgCeDjJaYvGbSB3C0pAXL8r9kOsmhIQbx2Sia2DAWTjtSZwuh5aehoUhM6upqBCDLhGruZAGGsCOwAiIq8", 
     "scope" : "GOOGLE", 
     "types" : [ 
      "restaurant", 
      "travel_agency", 
      "food", 
      "point_of_interest", 
      "establishment" 
     ], 
     "vicinity" : "32 The Promenade, King Street Wharf 5, Sydney" 
     }, 
     { 
     "geometry" : { 
      "location" : { 
       "lat" : -33.870943, 
       "lng" : 151.190311 
      } 
     }, 
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/bar-71.png", 
     "id" : "e644f7f34cf875b9919c6548f1b721947362850a", 
     "name" : "Lunch Cruise with Jazz on Sydney Harbour", 
     "opening_hours" : { 
      "open_now" : false, 
      "weekday_text" : [] 
     }, 
     "photos" : [ 
      { 
       "height" : 292, 
       "html_attributions" : [ 
        "\u003ca href=\"https://www.google.com/maps/views/profile/105423912060796272053\"\u003eFrom a Google User\u003c/a\u003e" 
       ], 
       "photo_reference" : "CmRdAAAAR4bqFTKYWdBwZwdBdON_JRD7V_joTwwIPwRUpZIZWkSSd8GQ3P2O-_aQbUJdL2RhoAyzCUIF0f--DI4oXFneTpj5zZfFq-iFiT7i_x0tjnDveIY8tJv-6o0uWSSjYqabEhCKqQWZqrKAoddjDcc64N48GhQZ2T1_ntPzNKCooHpZzlYQ7AxFOA", 
       "width" : 438 
      } 
     ], 
     "place_id" : "ChIJLfySpTOuEmsRPCRKrzl8ZEY", 
     "reference" : "CoQBewAAAFd2fO_YWGTiT4RzXWb5tsOuOt7YyV_ScQOwm0tqJSrAyACCczeOzV-P_mgZLro1oKP_34Nt0nVC_1OEKAQUcd7cUm7xmAMSX-EkbSWiD0kOWGgGgKuDRtb0t_8qsxBGU_izugWCyK7SRWezTxELYNdkS0OEiSWPnvhxvXuQktBBEhAAtEe7fagW2kUR14T1QpVsGhQBO7YpIyYSPvo4zUJuL_bX30nJZw", 
     "scope" : "GOOGLE", 
     "types" : [ "bar", "restaurant", "food", "point_of_interest", "establishment" ], 
     "vicinity" : "37 Bank St, Pyrmont" 
     } 
    ], 
    "status" : "OK" 
} 

下面的例子返回英國倫敦附近的醫院名單。

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=51.503186,-0.126446&radius=5000&types=hospital&key=API_KEY 

欲瞭解更多詳情請參閱here

+0

謝謝你這個正是我所期待的。您可以給我一個例子,說明如何使用Google Places API Web API Web服務API在JSON中傳遞對特定位置的搜索請求?因爲我需要搜索是靜態的(即它會不斷地搜索一個地方,例如基於用戶位置的電影院)在此先感謝。 – 9it3e1

+0

抱歉,延遲迴復,我在度假BTW :)請參閱我的答案中的編輯。 – bjiang

+0

哪個api關鍵字會通過鏈接傳遞給Google Place API? –

0
private void loadNearByPlaces(double latitude, double longitude) 

//YOU Can change this type at your own will, e.g hospital, cafe, restaurant.... and see how it all works 
{ 


    mMap.clear(); 
    Intent i = getIntent(); 
    String type = hospital; 

    StringBuilder googlePlacesUrl = 
      new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); 
    googlePlacesUrl.append("location=").append(latitude).append(",").append(longitude); 
    googlePlacesUrl.append("&radius=").append(PROXIMITY_RADIUS); 
    googlePlacesUrl.append("&types=").append(type); 
    googlePlacesUrl.append("&sensor=true"); 
    googlePlacesUrl.append("&key=" + GOOGLE_BROWSER_API_KEY); 

    JsonObjectRequest request = new JsonObjectRequest(googlePlacesUrl.toString(), 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject result) { 

        Log.i(TAG, "onResponse: Result= " + result.toString()); 
        parseLocationResult(result); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e(TAG, "onErrorResponse: Error= " + error); 
        Log.e(TAG, "onErrorResponse: Error= " + error.getMessage()); 
       } 
      }); 

    AppController.getInstance().addToRequestQueue(request); 
} 

這將根據您的位置由醫院加載附近。

相關問題