无法在两个地方之间获得完美的距离
Posted
技术标签:
【中文标题】无法在两个地方之间获得完美的距离【英文标题】:Not able to get perfect distance between two places 【发布时间】:2016-02-04 12:21:20 【问题描述】:我使用Haversine
计算两个位置之间的距离。
public static class Haversine
static int Radius = 6371;
public static double haversine(double lat1, double lon1, double lat2,
double lon2)
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
* Math.sin(dLon / 2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult = Radius * c;
double km = valueResult / 1;
DecimalFormat newFormat = new DecimalFormat("####");
int kmInDec = Integer.valueOf(newFormat.format(km));
double meter = valueResult % 1000;
int meterInDec = Integer.valueOf(newFormat.format(meter));
Log.i("Radius Value", "" + valueResult + " KM " + kmInDec
+ " Meter " + meterInDec);
return Radius * c;
/*double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1)* Math.cos(lat2);
double c = 2 * Math.asin(Math.sqrt(a));
return R * 2 * Math.asin(Math.sqrt(a));*/
从上面的代码中,我无法获得 2 个位置之间的准确距离。
当我运行上述方法时,它会从我的两个地方显示4.32 km
,但是当我检查google map
时,它会显示5.3 km
。
我也使用了Location.distanceBetween
方法,但它仍然显示4.32 km
。
我怎样才能得到位置之间的确切距离?
【问题讨论】:
看看***.com/questions/1502590/… 我已经看到了。在此基础上实施。 我猜上面的公式会计算位移而不是距离。您可以使用谷歌地图距离矩阵 API。 developers.google.com/maps/documentation/distance-matrix/intro 【参考方案1】:你可以看到这个link。 Haversine 和 Location.distanceBetween 方法都是线的原点。 因此,您可以使用 http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=false 来获取实际距离。
【讨论】:
哦...所以Haversine
不准确。但是我如何在android
中使用它?
这不是获取距离的正确方法取决于谷歌最新的文档。这不会一直对你有用..developers.google.com/maps/documentation/distance-matrix/intro【参考方案2】:
来自谷歌官方仓库link
SphericalUtil
MathUtil
用法
double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00));
上述方法将返回两个 LatLng 之间的距离,以米为单位。 或者试试这个
private String getDistance(LatLng my_latlong,LatLng frnd_latlong)
Location l1=new Location("One");
l1.setLatitude(my_latlong.latitude);
l1.setLongitude(my_latlong.longitude);
Location l2=new Location("Two");
l2.setLatitude(frnd_latlong.latitude);
l2.setLongitude(frnd_latlong.longitude);
float distance=l1.distanceTo(l2);
String dist=distance+" M";
if(distance>1000.0f)
distance=distance/1000.0f;
dist=distance+" KM";
return dist;
或者你可以看看link
【讨论】:
以上是关于无法在两个地方之间获得完美的距离的主要内容,如果未能解决你的问题,请参考以下文章