从我的位置到android中的目标位置的距离计算
我必须做一个项目,我需要计算从我的位置到目的地的距离,并显示在一个文本视图。请注意,这个距离更新时,我的位置change.Is是否有可能做这样的项目types?
[注意:如果没有执行Google地图,我必须把它做出来。目的地lon,lat是已知的。只需要find我的位置并进行计算]
检查谷歌Android开发页面上的文档,看看如何侦听位置的变化。 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; }
}
这会给你两点之间的path/道路的距离或长度。
这里是parsingJSON 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; }
}
我在这个问题里写下了两个不同的答案来计算两个地理点之间的差异,所以不要在这里复制粘贴,
第二件事也看到这个例子 ,你需要实现Locationlistener
以获得onLocationChanged
事件的相同方式。
在这种情况下,使用上面给出的函数来计算差异并适当地使用它们。
这是相当简单的使用LocationServices
来确定您的位置,并更新您的TextView
与新的距离,每次收到更新。