Getting results of nearby places from User's Location using Google Maps API in Android

后端 未结 4 1622
别那么骄傲
别那么骄傲 2020-12-01 02:33

This is the first time using google map API and google places API. I am doing a demo application that displays the list hospitals (for example) nearest to the user\'s locati

相关标签:
4条回答
  • 2020-12-01 02:53

    For Android, I tried to use Place picker for Android. It can add the built-in place picker UI widget to your app, so users can choose from a set of nearby places displayed on a map. It easy to use, you just need to do is:

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

    It will show the UI below to pick a place for you, and you can get the place info by using below:

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

    For more details, please refer to guide here and code here.

    However, it cannot set the place type because it no feature for the Build in UI.. If you really need to set, you should use Google Places API Web Service API here, search the location yourself, parse the JSON data, and show on your own UI.

    A Nearby Search lets you search for places within a specified area. You can refine your search request by supplying keywords or specifying the type of place you are searching for.

    A Nearby Search request is an HTTP URL of the following form:

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

    Note that in parameters you need to set types=hospital

    EDIT

    Example on how to pass the search request for specific locations in JSON using the google places API web API web service API.

    Request

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

    Url for this:

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

    and Response JSON like this:

    {
       "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"
    }
    

    The below example returns a list of hospitals near London, England.

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

    For more details please refer here.

    0 讨论(0)
  • 2020-12-01 02:54

    Follow below code:

    private static final String TAG_RESULT = "predictions";
    JSONObject json;
    
    
    ArrayList<String> names;
    ArrayAdapter<String> adapter;
    String browserKey = "Google API key";
    //------------------------AutoComplete code--------------  
      public void updateList(String place) {
            String input = "";
    
            try {
                input = "input=" + URLEncoder.encode(place, "utf-8");
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }
    
            String output = "json";
            String parameter = input + "&types=geocode&sensor=true&key="                + browserKey;
    
            url = "https://maps.googleapis.com/maps/api/place/autocomplete/"                + output + "?" + parameter;
    
            JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url,
                    null, new Response.Listener<JSONObject>() {
    
                @Override            public void onResponse(JSONObject response) {
                    System.out.println("response"+response);
                    try {
    
                        JSONArray ja = response.getJSONArray(TAG_RESULT);
    
                        for (int i = 0; i < ja.length(); i++) {
                            JSONObject c = ja.getJSONObject(i);
                            String description = c.getString("description");
                            System.out.println("description"+description);
                            names.add(description);
                        }
    
                        adapter = new ArrayAdapter<String>(
                                getApplicationContext(),
                                android.R.layout.simple_list_item_1, names) {
                            @Override                        public View getView(int position,
                                                View convertView, ViewGroup parent) {
                                View view = super.getView(position,
                                        convertView, parent);
                                TextView text = (TextView) view
                                        .findViewById(android.R.id.text1);
                                text.setTextColor(Color.BLACK);
                                return view;
                            }
                        };
                        edittext_signup_city.setAdapter(adapter);
                        adapter.notifyDataSetChanged();
                    } catch (Exception e) {
                    }
                }
            }, new Response.ErrorListener() {
                @Override            public void onErrorResponse(VolleyError error) {
                }
            });
            AppController.getInstance().addToRequestQueue(jsonObjReq, "jreq");
        }
    
    0 讨论(0)
  • 2020-12-01 03:02
     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);
    }
    

    This will load the near by hospital according to your location.

    0 讨论(0)
  • 2020-12-01 03:03

    Follow this link, it has all explained out,

    in the String type='grocery_or_supermarket' replace it to be 'hospital' and you'll be good to go:

    http://androidmastermind.blogspot.co.ke/2016/06/android-google-maps-with-nearyby-places.html

    0 讨论(0)
提交回复
热议问题