首先仔细阅读问题...
我需要直线距离,而不是步行、汽车等。
看看下面给出的这张图片,
谷歌为我们提供开车和开车的距离。
但我不想要它,我想要两个位置之间的直线距离(纬度 - 经度)。
显示为红线。
注意:我不想把红线放在谷歌地图上,只想要单位距离(英里、公里等)
安卓
double distance
Location locationA = new Location(“point A”)
locationA.setLatitude(latA);
locationA.setLongitude(lngA);
Location locationB = new Location(“point B”);
locationB.setLatitude(latB);
LocationB.setLongitude(lngB);
distance = locationA.distanceTo(locationB);
数学上
a = distance in degrees //meterConversion = 1609;
b = 90 - latitude of point 1
c = 90 - latitude of point 2
l = longitude of point 1 - longitude of point 2
Cos(a) = Cos(b)Cos(c) + Sin(b)Sin(c)Sin(l)
d = circumference of Earth * a / 360 // circumference of Earth = 3958.7558657440545D km
Haversine 函数用于计算球体上两点之间的距离。
将其扩展到找到地球上两点之间的直线距离是相当简单的。地球不是一个完美的球体,但这仍然是使用赤道半径的标准测量值(称为 WGS84)的一个很好的近似值。
正如 CommonsWare 所说,您可以使用 distanceBetween() 非常简单地做到这一点,它使用 Haversine 函数和 WGS84 半径。
为了更好地理解实现/数学,请查看 Python 中的此示例代码。
您使用以下代码找到的距离。你只需要得到两个geoPoint的纬度和经度。并在以下计算中使用它来获得距离。
R = 6371; // km
d = Math.acos(Math.sin(lat1)*Math.sin(lat2) +
Math.cos(lat1)*Math.cos(lat2) *
Math.cos(lon2-lon1)) * R;
这将是所有计算后的返回距离。
R是KM的表面半径,需要在计算中使用,你试试这个。我希望它对你有用。