Cálculo de distancia desde mi ubicación a la ubicación de destino en Android

Tengo que hacer un proyecto donde necesito calcular la distancia desde mi ubicación a la ubicación de destino y mostrarlo en una vista de texto. Tenga en cuenta que esta distancia se actualizó cuando mi ubicación cambió. ¿Es posible hacer ese tipo de proyecto?

[NOTA: sin implementar el mapa de Google tengo que hacerlo. El destino es lon, lat es conocido. Solo tengo que encontrar mi ubicación y hacer el cálculo]

revise la documentación en la página de desarrollo de Android de Google para ver cómo escuchar los cambios de posición. http://developer.android.com/guide/topics/location/obtaining-user-location.html

puede usar esta función para determinar la distancia entre el punto actual (inicio) y el punto objective.

/** * using WSG84 * using the Metric system */ public static float getDistance(double startLati, double startLongi, double goalLati, double goalLongi){ float[] resultArray = new float[99]; Location.distanceBetween(startLati, startLongi, goalLati, goalLongi, resultArray); return resultArray[0]; } 

Location.distanceBetween dará una distancia recta entre dos puntos. Si desea distancia de PATH entre dos puntos geográficos, puede usar hacer esto usando esta clase:

 public class GetDistance { public String GetRoutDistane(double startLat, double startLong, double endLat, double endLong) { String Distance = "error"; String Status = "error"; try { Log.e("Distance Link : ", "http://maps.googleapis.com/maps/api/directions/json?origin="+ startLat +","+ startLong +"&destination="+ endLat +","+ endLong +"&sensor=false"); JSONObject jsonObj = parser_Json.getJSONfromURL("http://maps.googleapis.com/maps/api/directions/json?origin="+ startLat +","+ startLong +"&destination="+ endLat +","+ endLong +"&sensor=false"); Status = jsonObj.getString("status"); if(Status.equalsIgnoreCase("OK")) { JSONArray routes = jsonObj.getJSONArray("routes"); JSONObject zero = routes.getJSONObject(0); JSONArray legs = zero.getJSONArray("legs"); JSONObject zero2 = legs.getJSONObject(0); JSONObject dist = zero2.getJSONObject("distance"); Distance = dist.getString("text"); } else { Distance = "Too Far"; } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return Distance; } 

}

Esto le dará distancia o longitud de camino / camino entre dos puntos.

y aquí está la clase parser_Json que analiza api JSON

  public class parser_Json { public static JSONObject getJSONfromURL(String url){ //initialize InputStream is = null; String result = ""; JSONObject jArray = null; //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection "+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } //try parse the string to a JSON object try{ jArray = new JSONObject(result); }catch(JSONException e){ Log.e("log_tag", "Error parsing data "+e.toString()); } return jArray; } public static InputStream retrieveStream(String url) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet getRequest = new HttpGet(url); try { HttpResponse getResponse = client.execute(getRequest); final int statusCode = getResponse.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { return null; } HttpEntity getResponseEntity = getResponse.getEntity(); return getResponseEntity.getContent(); } catch (IOException e) { getRequest.abort(); } return null; } 

}

He escrito 2 respuestas diferentes aquí en esta Pregunta para calcular la diferencia entre dos puntos geográficos, así que no copie el pegado aquí,

Lo segundo también es ver este ejemplo de la misma manera que necesita implementar Locationlistener para obtener el evento onLocationChanged .

Y en ese caso, calcule la diferencia usando las funciones anteriores y utilícelas adecuadamente.

Esto es bastante sencillo al usar LocationServices para determinar su ubicación y actualizar su TextView con la nueva distancia cada vez que se recibe una actualización.