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

Gracias

  • La geocodificación inversa de ellos y de la lista de lugares que tienes que encontrar el lugar más cercano
InformationsquelleAutor Andy | 2011-12-05

3 Comentarios

  1. 4

    De tener a su actual ubicación latitud una longitud de tan sólo tienes que encontrar la distancia entre su ubicación actual y la lista de dirección de la ubicación de geopoints el uso de esta fórmula y de visualización de 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);
        }
    • ¿Cuál es la unidad de distancia?
  2. 9

    Obtener primero su actual location Latitud & Longitude, a continuación, obtener Lattitude & Longitude de cada una de las ubicaciones y averiguar la distancia de cada lugar de su ubicación actual a través de distanceTo método de Location clase y después de que averigua menos distancia de su lista.

  3. 6

    Paso por paso,

    Cómo obtener la lista de los más cercano a su lugar de ubicación.

    Paso 1 : Ir a la API de la Consola para obtener el Lugar de la API de

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

    y seleccionar en la pestaña de servicios

    ¿Cómo puede encontrar el lugar más cercano desde la ubicación actual a partir de datos dados.

    en el lugar de servicio

    ¿Cómo puede encontrar el lugar más cercano desde la ubicación actual a partir de datos dados.

    ahora seleccione el Acceso a la API ficha y obtener la CLAVE de la API

    ¿Cómo puede encontrar el lugar más cercano desde la ubicación actual a partir de datos dados.

    ahora usted tiene una clave de API para conseguir lugar


    Ahora en la programación

    * * * * Paso 2 * : en primer lugar crear una clase denominada Place.java. Esta clase se utiliza para contener la propiedad de lugar que son proporcionados por el Lugar de la 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 crear una nueva Actividad donde desea recibir 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;
    }
    }
    }
    • puedes compartir conmigo un código de ejemplo para este…
    • esta respuesta es inútil cuando se trata de trabajar con GPS o de la RED cuando no hay internet

Dejar respuesta

Please enter your comment!
Please enter your name here