distanceBetween()返回不正确的结果呢? [英] distanceBetween() returns inaccurate result?
问题描述
我用 distanceBetween()
位置类来计算两个点之间的距离如下:
I use distanceBetween()
of Location class to calculate the distance between two points as follows:
private float getDistanceInMiles(GeoPoint p1, GeoPoint p2) {
double lat1 = ((double)p1.getLatitudeE6()) / 1e6;
double lng1 = ((double)p1.getLongitudeE6()) / 1e6;
double lat2 = ((double)p2.getLatitudeE6()) / 1e6;
double lng2 = ((double)p2.getLongitudeE6()) / 1e6;
float [] dist = new float[1];
Log.i("destination coordinates", "Latitude:" + lat2 + ", Longitude: " + lng2);
Location.distanceBetween(lat1, lng1, lat2, lng2, dist);
return dist[0] * 0.000621371192f;
}
文档说distanceBetween()计算两个位置之间以米为单位的大致距离,和任选它们之间的最短路径的初始和最终的轴承。然而()由distanceBetween返回的结果与实际的GPS设备或谷歌导航应用程序之间的差别是pretty的大。例如我的方法将返回6.2英里,而谷歌地图显示10英里在相同位置。我仔细检查的出发点p1的坐标和结束点p2和它们似乎是正确的。这是多么distanceBetween()方法的工作还是我做错了什么?顺便说一下有没有办法使用谷歌广场API来检索的距离作为一个JSON响应?
Documentation says that distanceBetween() "Computes the approximate distance in meters between two locations, and optionally the initial and final bearings of the shortest path between them." However the difference between the result returned by distanceBetween() and real GPS device or Google Navigation app is pretty big. For example my method will return 6.2 miles while google maps shows 10 miles for the same location. I double check the coordinates of the starting point p1 and ending point p2 and they seems to be correct. Is that how distanceBetween() method works or Am I doing something wrong? And by the way Is there a way to use Google Place API to retrieve a distance as a JSON response?
距离计算谷歌地图:6.1英里
Distance calculated by Google Maps: 6.1 miles
和结果
Location.distanceBetween(41.742964, -87.995971, 41.811511, -87.967923, dist) is
4.947700
4.947700
推荐答案
要获得从谷歌地图我已经使用的谷歌路线API 和JSON解析器检索距离值:
To get a distance from a Google Maps I have used Google Directions API and JSON parser to retrieve the distance value:
private double getDistanceInfo(double lat1, double lng1, String destinationAddress) {
StringBuilder stringBuilder = new StringBuilder();
Double dist = 0.0;
try {
destinationAddress = destinationAddress.replaceAll(" ","%20");
String url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lng1 + "&destination=" + destinationAddress + "&mode=driving&sensor=false";
HttpPost httppost = new HttpPost(url);
HttpClient client = new DefaultHttpClient();
HttpResponse response;
stringBuilder = new StringBuilder();
response = client.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
JSONArray array = jsonObject.getJSONArray("routes");
JSONObject routes = array.getJSONObject(0);
JSONArray legs = routes.getJSONArray("legs");
JSONObject steps = legs.getJSONObject(0);
JSONObject distance = steps.getJSONObject("distance");
Log.i("Distance", distance.toString());
dist = Double.parseDouble(distance.getString("text").replaceAll("[^\\.0123456789]","") );
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dist;
}
这篇关于distanceBetween()返回不正确的结果呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!