2012-05-21 17 views
13

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

[NOTA: sin implementar mapa de Google que tengo que hacer it.The lon destino, lat se known.Just tiene que encontrar mi lugar y hacer el cálculo]

Respuesta

16

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 utilizar esta función para determinar la distancia entre el punto actual (inicio) y el punto objetivo.

/** 
* 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]; 
} 
+1

¿Cómo puedo demostrar este resultado en la Vista de Texto? – MBMJ

+1

puede iniciar una nueva asynctask, cuando se gana una nueva posición (consulte el enlace anterior). En el método onpostexecute, puede escribir la distancia en la vista de texto. – CAA

+1

pero ¿cómo? Lo siento. Soy nuevo en android.¿Podría explicarlo aquí o darme el código para mostrarlo en la vista de texto? – MBMJ

3

Esto es bastante sencillo utilizando LocationServices para determinar su ubicación y actualizando su TextView con la nueva distancia cada vez que se reciba una actualización.

+1

tener ningún bien vínculo? Por favor mencionar aquí – MBMJ

4

he escrito 2 respuestas diferentes aquí en this Question para calcular la diferencia entre dos geo-puntos por lo que no copiar pegar aquí,

Lo segundo también ver this Example la misma manera que usted necesita implementar Locationlistener para obtener el evento onLocationChanged.

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

12

Location.distanceBetween dará una distancia recta entre dos puntos. Si desea medir la distancia del trayecto entre dos puntos geográficos, puede utilizar hacer esto mediante el uso de 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á la distancia o longitud del camino/carretera entre dos puntos.

y aquí está la clase parser_Json el que analizar JSON API

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; 

    } 

}

Cuestiones relacionadas