android中从我的位置到目的地位置的距离计算
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10683554/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Distance calculation from my location to destination location in android
提问by MBMJ
I have to made a project where i need to calculate the distance from my location to destination location and show it in a textview.Here note that this distance updated when my location change.Is it possible to make such type of project ?
我必须制作一个项目,我需要计算从我的位置到目标位置的距离并将其显示在文本视图中。请注意,当我的位置更改时,此距离会更新。是否可以制作此类项目?
[NOTE: without implementing Google map i have to make it.The destination lon ,lat is known.Just have to find my location and make the calculation]
[注意:没有实施谷歌地图,我必须制作它。目的地 lon,lat 是已知的。只需找到我的位置并进行计算]
回答by CAA
check the documentation on the google android dev page to see how to listen for position changes. http://developer.android.com/guide/topics/location/obtaining-user-location.html
查看 google android dev 页面上的文档,了解如何监听位置变化。http://developer.android.com/guide/topics/location/obtaining-user-location.html
you can use this function to determine the distance between the current (start) point and the target point.
您可以使用此功能来确定当前(起点)点与目标点之间的距离。
/**
* 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];
}
回答by Vipul Purohit
Location.distanceBetween
will give to straight distance between two point. If you want distance of PATH between two geographical point then you can use do this by using this class :
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;
}
}
}
This will give you distance or length of path/road between two points.
这将为您提供两点之间路径/道路的距离或长度。
and here is the parser_Json class which parse JSON api
这是解析 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;
}
}
}
回答by MKJParekh
I have written down 2 different answers here in this Questionto calculate difference between two geo-points so not copy pasting here,
我在这个问题中写下了 2 个不同的答案来计算两个地理点之间的差异,所以不要在这里复制粘贴,
Second thing also see this Examplethe same way you need to implement Locationlistener
to get onLocationChanged
event.
第二件事也请以与获取事件所需的相同方式查看此示例。Locationlistener
onLocationChanged
And in that event calculate difference using above given functions and use them appropriately.
在这种情况下,使用上面给定的函数计算差异并适当地使用它们。
回答by ScouseChris
This is fairly straightforward using LocationServices
to determine your location and updating your TextView
with the new distance every time an update is received.
这非常简单,LocationServices
用于确定您的位置并TextView
在每次收到更新时使用新的距离更新您的位置。