从我的位置到android中的目标位置的距离计算

我必须做一个项目,我需要计算从我的位置到目的地位置的距离,并在textview中显示它。请注意,当我的位置发生变化时,这个距离会更新。是否可以制作这种types的项目?

[注意:没有实施谷歌地图我必须做它。目的地lon,lat是已知的。只需要find我的位置并进行计算]

检查google android dev页面上的文档,了解如何监听位置更改。 http://developer.android.com/guide/topics/location/obtaining-user-location.html

您可以使用此function确定当前(起始)点和目标点之间的距离。

/** * 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将给出两点之间的直线距离。 如果你想要两个地理点之间的PATH距离,那么你可以使用这个类来做到这一点:

 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; } 

}

这将给出两点之间的路径/道路的距离或长度。

这是解析JSON api的parser_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; } 

}

我在这个问题中写下了2个不同的答案来计算两个地理点之间的差异,所以不要在这里复制粘贴,

第二件事也看到这个例子 ,你需要实现Locationlistener来获取onLocationChanged事件。

在那种情况下,使用上面给出的函数计算差异并适当地使用它们。

使用LocationServices确定您的位置并在每次收到更新时使用新距离更新TextView ,这非常简单。