2017-01-22 17 views
7

Tworzę aplikację na Androida, która musi sprawdzić, czy użytkownik znajduje się w pobliżu interesującego miejsca, np. kino. (W promieniu 1 km)Lista bliskich miejsc bez użycia obiektu mapy na Androidzie

Jednak nie potrzebuję użytkownika, aby zobaczyć mapę, która według mnie jest wymagana do korzystania z aplikacji Google google places. Zrobiłem trochę badań, ale nie jestem pewien, jak to osiągnąć na Androidzie. Wszelkie wskazówki (w tym komentarze i odpowiednie linki będą mile widziane)

+0

Nie przypominam konieczności di Rozłóż mapę, aby uzyskać wyniki ... https://developers.google.com/places/web-service/search Wynik to json, możesz zrobić z nim, co chcesz. Przykład pobliskiego muzeum https://maps.googleapis.com/maps/api/place/radarsearch/json?location=51.503186,-0.126446&radius=5000&type=museum&key=YOUR_API_KEY – Distwo

+0

Oprócz wyświetlania map Google, w jaki sposób spodziewasz się użytkownika pokaż te dane? – Stallion

Odpowiedz

6

zobaczyć pobliskie miejsca,

1.- korzystanie Nearby Search Requests z google maps, link here

2.- współrzędne używać telefonu, aby uzyskać lista kinie koło z coords ...

https://maps.googleapis.com/maps/api/place/radarsearch/json?location=51.503186,-0.126446&radius=5000&types=movie+theater&key=YOUR_API_KEY

3.- porównać dwie współrzędne, i zrobić swoją magię, może uzyskać dystans o tym, że dwa punkty i pokazać użytkownikowi, że d istance ..

Uwaga: jeśli chcesz dużo specjalnych miejsc, musisz zobaczyć inny sposób, aby to zrobić. Tak myślałam ... jest, na twoim serwerze musisz zrobić zapytanie przez coord z wieloma najbliższymi miejscami, (muzeum, kino, itp.) I zapisać to, ponieważ google obciąża Cię , gdy serwer sprawdza w wielu czasach, gdy użytkownik wysyła coordenates będziesz miał listę najbliżej położonych miejsc, jeśli nie, należy skonsultować się listę najlepszych pleaces i zapisać na swoim serwerze i wysłać do użytkownika,

trzeba będzie użyć niektóre obliczają współrzędne, np. zakres, jeśli użytkownik jest bliski tego koordynuje, że mam w bazie danych, wyślij tę informację do , poproś o serwer, aby skonsultował najbliższe miejsca (z Twoją wcześniej określoną listą)

Przepraszamy za mój angielski.

Linki uzyskać więcej informacji
Find Places Nearby in Google Maps using Google Places API–Android App
Places APIs and Related Products
how to display nearby places like atm,hospitals in android google map?

+0

To powinno działać dobrze. Możesz uzyskać lokalizację telefonu za pomocą odbiornika telewizyjnego w systemie GPS oraz opcję Wola, aby przesłać żądanie i przeanalizować odpowiedź. – BMU

2

Możesz także korzystać z Api Awareness w pobliżu miejsc. Trzeba tylko stworzyć GoogleApiClient Object jako below-

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Awareness.API) 
       .addConnectionCallbacks(this) 
       .build(); 

mGoogleApiClient.connect(); 

następnie zadzwonić pod sposobu pobliskich miejscach.

private void detectNearbyPlaces() { 
     if (!checkLocationPermission()) { 
      return; 
     } 

     Awareness.SnapshotApi.getPlaces(mGoogleApiClient) 
       .setResultCallback(new ResultCallback<PlacesResult>() { 
        @Override 
        public void onResult(@NonNull PlacesResult placesResult) { 
         Place place; 
         if (placesResult.getPlaceLikelihoods() != null) { 
          for (PlaceLikelihood placeLikelihood : placesResult.getPlaceLikelihoods()) { 
           place = placeLikelihood.getPlace(); 
           Log.e(TAG, place.getName().toString() + "\n" + place.getAddress().toString()); 
           Log.e(TAG, "Rating: " + place.getRating()); 
           Log.e(TAG, "Likelihood that the user is here: " + placeLikelihood.getLikelihood() * 100 + "%"); 
          } 
         } 
        } 
       }); 
    } 

Mam nadzieję, że będzie to pomocne.

3

Spróbuj dostać miejsca, wprowadź własne zapytanie wyszukiwania

searchString = getIntent().getStringExtra("search_key"); 
GetPlacesTask getPlacesTask = new GetPlacesTask(); 
String url = getResources().getString(R.string.near_by_search) + 
      "location="+latitude+","+longitude+"&radius=1000&type=" + 
      searchString +"&keyword="+ searchString + 
      "&key="+ YOUR_API_KEY; 
String[] stringArray = new String[]{url}; 
getPlacesTask.execute(stringArray); 

GetPlacesTask

private class GetPlacesTask extends AsyncTask<String, String, ArrayList<Place>> 
{ 
    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
    } 

    @Override 
    protected ArrayList<Place> doInBackground(String... strings) 
    { 
     try 
     { 
      URL url = new URL(strings[0]); 
      HttpHandler httpHandler = new HttpHandler(url); 
      String result = httpHandler.getURLResponse(); 
      ArrayList<Place> placesArrayList = new ArrayList<>(); 
      JSONObject mainResponse; 
      JSONArray jsonArray; 
      mainResponse = new JSONObject(jsonString); 
      jsonArray = mainResponse.getJSONArray("results"); 
      if(jsonArray.length() > 0) 
      { 
       placesArrayList = fetch(jsonArray); 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return placesArrayList; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Place> placesArrayList) 
    { 
     super.onPostExecute(placesArrayList); 

     if(!placesArrayList.isEmpty()) 
     { 
      //Show Places in your views 
     } 
    } 
} 

HttpHandler klasa

public class HttpHandler 
{ 
private URL url; 
public HttpHandler(URL url) 
{ 
    this.url = url; 
} 

public String getURLResponse() 
{ 
    String response = ""; 

    try 
    { 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     InputStream is = new BufferedInputStream(urlConnection.getInputStream()); 
     response = convertStreamIntoString(is); 
     Log.d("RESPONSE", response); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 


    return response; 
} 

private String convertStreamIntoString(InputStream inputStream) 
{ 
    String response = ""; 
    String line; 
    try 
    { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
     StringBuilder sb = new StringBuilder(); 
     while ((line = reader.readLine()) != null) 
     { 
      sb.append(line); 
     } 
     response = sb.toString(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return response; 
} 
} 

Here is the repository for the same

Powiązane problemy