Cómo encontrar el lugar más cercano de la ubicación actual de los datos dados.

Tengo lista de dirección de ubicación. desde mi ubicación actual, necesito conseguir el lugar más cercano y tengo que mostrarlo en el mapa. ¿Cómo puedo obtener el lugar más cercano de mi ubicación actual. Primero voy a obtener mi ubicación actual lat y largo, entonces cómo voy a conseguir el lugar más cercano.

Gracias

Usted tiene su latitud de ubicación actual de una longitud tan sólo averiguar la distancia entre su ubicación actual y la lista de geopuntos dirección de ubicación utilizando esta fórmula y mostrar la dirección con la distancia más corta.

private double distance(double lat1, double lon1, double lat2, double lon2) { // haversine great circle distance approximation, returns meters double theta = lon1 - lon2; double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); dist = Math.acos(dist); dist = rad2deg(dist); dist = dist * 60; // 60 nautical miles per degree of seperation dist = dist * 1852; // 1852 meters per nautical mile return (dist); } private double deg2rad(double deg) { return (deg * Math.PI / 180.0); } private double rad2deg(double rad) { return (rad * 180.0 / Math.PI); } 

Primero obtenga su location actual Lattitude & Longitude , luego obtenga Lattitude & Longitude de cada ubicación que tenga y averigüe la distancia de cada lugar desde su ubicación actual usando el método distanceTo de la clase Location y después descubra la distancia mínima de su lista.

Paso a paso,

Cómo obtener la lista del lugar más cercano de una ubicación.

Paso 1 : Vaya a la consola de API para obtener la API de lugar

https://code.google.com/apis/console/

y seleccione en la ficha servicios

Servicio

en el servicio de lugar

introduzca la descripción de la imagen aquí

ahora seleccione la pestaña Acceso a la API y obtenga la API CLAVE

introduzca la descripción de la imagen aquí

ahora tiene una clave de API para obtener lugar


Ahora en la programación

* Paso 2 * : primero crea una clase llamada Place.java . Esta clase se utiliza para contener la propiedad de lugar que son proporcionados por Place api.

 package com.android.code.GoogleMap.NearsetLandmark; import java.util.logging.Level; import java.util.logging.Logger; import org.json.JSONException; import org.json.JSONObject; public class Place { private String id; private String icon; private String name; private String vicinity; private Double latitude; private Double longitude; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Double getLatitude() { return latitude; } public void setLatitude(Double latitude) { this.latitude = latitude; } public Double getLongitude() { return longitude; } public void setLongitude(Double longitude) { this.longitude = longitude; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVicinity() { return vicinity; } public void setVicinity(String vicinity) { this.vicinity = vicinity; } static Place jsonToPontoReferencia(JSONObject pontoReferencia) { try { Place result = new Place(); JSONObject geometry = (JSONObject) pontoReferencia.get("geometry"); JSONObject location = (JSONObject) geometry.get("location"); result.setLatitude((Double) location.get("lat")); result.setLongitude((Double) location.get("lng")); result.setIcon(pontoReferencia.getString("icon")); result.setName(pontoReferencia.getString("name")); result.setVicinity(pontoReferencia.getString("vicinity")); result.setId(pontoReferencia.getString("id")); return result; } catch (JSONException ex) { Logger.getLogger(Place.class.getName()).log(Level.SEVERE, null, ex); } return null; } @Override public String toString() { return "Place{" + "id=" + id + ", icon=" + icon + ", name=" + name + ", latitude=" + latitude + ", longitude=" + longitude + '}'; } } 

Ahora cree una clase llamada PlacesService

 package com.android.code.GoogleMap.NearsetLandmark; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class PlacesService { private String API_KEY; public PlacesService(String apikey) { this.API_KEY = apikey; } public void setApiKey(String apikey) { this.API_KEY = apikey; } public List<Place> findPlaces(double latitude, double longitude,String placeSpacification) { String urlString = makeUrl(latitude, longitude,placeSpacification); try { String json = getJSON(urlString); System.out.println(json); JSONObject object = new JSONObject(json); JSONArray array = object.getJSONArray("results"); ArrayList<Place> arrayList = new ArrayList<Place>(); for (int i = 0; i < array.length(); i++) { try { Place place = Place.jsonToPontoReferencia((JSONObject) array.get(i)); Log.v("Places Services ", ""+place); arrayList.add(place); } catch (Exception e) { } } return arrayList; } catch (JSONException ex) { Logger.getLogger(PlacesService.class.getName()).log(Level.SEVERE, null, ex); } return null; } //https://maps.googleapis.com/maps/api/place/search/json?location=28.632808,77.218276&radius=500&types=atm&sensor=false&key=api key private String makeUrl(double latitude, double longitude,String place) { StringBuilder urlString = new StringBuilder("https://maps.googleapis.com/maps/api/place/search/json?"); if (place.equals("")) { urlString.append("&location="); urlString.append(Double.toString(latitude)); urlString.append(","); urlString.append(Double.toString(longitude)); urlString.append("&radius=1000"); // urlString.append("&types="+place); urlString.append("&sensor=false&key=" + API_KEY); } else { urlString.append("&location="); urlString.append(Double.toString(latitude)); urlString.append(","); urlString.append(Double.toString(longitude)); urlString.append("&radius=1000"); urlString.append("&types="+place); urlString.append("&sensor=false&key=" + API_KEY); } return urlString.toString(); } protected String getJSON(String url) { return getUrlContents(url); } private String getUrlContents(String theUrl) { StringBuilder content = new StringBuilder(); try { URL url = new URL(theUrl); URLConnection urlConnection = url.openConnection(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8); String line; while ((line = bufferedReader.readLine()) != null) { content.append(line + "\n"); } bufferedReader.close(); } catch (Exception e) { e.printStackTrace(); } return content.toString(); } } 

Ahora cree una nueva Actividad donde desee obtener la lista de lugares más cercanos.

/ ** * * /

  public class CheckInActivity extends ListActivity{ @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); new GetPlaces(this, getListView()).execute(); } class GetPlaces extends AsyncTask<Void, Void, Void>{ private ProgressDialog dialog; private Context context; private String[] placeName; private String[] imageUrl; private ListView listView; public GetPlaces(Context context, ListView listView) { // TODO Auto-generated constructor stub this.context = context; this.listView = listView; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); dialog.dismiss(); listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_expandable_list_item_1,placeName)); } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); dialog = new ProgressDialog(context); dialog.setCancelable(true); dialog.setMessage("Loading.."); dialog.isIndeterminate(); dialog.show(); } @Override protected Void doInBackground(Void... arg0) { // TODO Auto-generated method stub PlacesService service = new PlacesService("AIzaSyDIRAipDcVMf1FGYHEGDRzvLv0SFH46uRQ"); List<Place> findPlaces = service.findPlaces(28.632808,77.218276,"hospital"); // hq for hospital // atm for ATM placeName = new String[findPlaces.size()]; imageUrl = new String[findPlaces.size()]; for (int i = 0; i < findPlaces.size(); i++) { Place placeDetail = findPlaces.get(i); placeDetail.getIcon(); System.out.println( placeDetail.getName()); placeName[i] =placeDetail.getName(); imageUrl[i] =placeDetail.getIcon(); } return null; } } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.