6

首先仔细阅读问题...

我需要直线距离而不是步行、汽车等。

看看下面给出的这张图片,

直的

谷歌为我们提供开车和开车的距离。

但我不想要它,我想要两个位置之间的直线距离(纬度 - 经度)。

显示为红线。

注意:我不想把红线放在谷歌地图上,只想要单位距离(英里、公里等)

4

3 回答 3

15

安卓

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
于 2013-07-11T13:45:08.150 回答
3

Haversine 函数用于计算球体上两点之间的距离。

将其扩展到找到地球上两点之间的直线距离是相当简单的。地球不是一个完美的球体,但这仍然是使用赤道半径的标准测量值(称为 WGS84)的一个很好的近似值。

正如 CommonsWare 所说,您可以使用 distanceBetween() 非常简单地做到这一点,它使用 Haversine 函数和 WGS84 半径。

为了更好地理解实现/数学,请查看 Python 中的此示例代码

于 2013-07-11T14:36:17.587 回答
2

您使用以下代码找到的距离。你只需要得到两个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的表面半径,需要在计算中使用,你试试这个。我希望它对你有用。

于 2013-07-11T13:56:38.630 回答