Haversine公式在Arduino上的实现

6

我正在使用GPS和Arduino创建地理围栏。我想使用Haversine公式找到两点之间的距离,以便与半径计算。问题是我很难在Arduino IDE上实现Haversine公式,因为我是相对初学者。

a = sin²(Δφ/2) + cos1).cos2).sin²(Δλ/2)
c = 2.atan2(√a, √(1−a))
d = R.c

如何在Arduino IDE上实现上述公式?

我没有在Arduino上尝试过这个,但是在以下代码中我没有发现任何不起作用的问题:https://code.google.com/p/siklon/source/browse/trunk/source/Haversine.c?r=11 - PeterJ
2个回答

2
使用Haversine或球面余弦定理,需要使用Arduino中似乎没有的atan2()或acos()函数。
可以在等距投影上使用勾股定理来计算距离。这比Haversine或球面余弦定理简单,但仍允许向极点收敛,并使用Arduino中可用的三角函数。 理论 地球赤道周长=40,076公里。赤道被分成360度经线,因此赤道上每度经线大约代表111.32公里。从赤道向极地移动,这个距离会减少到极点为零。
1 degrees aproximates to 111.32 km at equator.
96.41km at 30 degrees N/S
78.71 km at 45 degrees N/S
55.66 km at 60 degrees N/S
28.82 km at 75 degrees N/S

应用程序
伪代码(因为我不知道Arduino)
R = 6371;km
lat/lng in radians

var x = (lng2-lng1) * cos((lat1+lat2)/2);
var y = (lat2-lat1);
var dist = sqrt(x*x + y*y) * R;

结果。
coordinates = (0,0) to (1,0) Haversine 157.293809 km Equirectangular 157.294807 km
coordinates = (10,0) to (11,0) Haversine 155.985273 km Equirectangular 155.986379 km
coordinates = (20,0) to (21,0) Haversine 152.397156 km Equirectangular 152.39855 km
coordinates = (30,0) to (31,0) Haversine 146.81715 km Equirectangular 146.818975 km
coordinates = (40,0) to (41,0) Haversine 139.728101 km Equirectangular 139.730447 km
coordinates = (50,0) to (51,0) Haversine 131.817706 km Equirectangular 131.820603 km
coordinates = (60,0) to (61,0) Haversine 123.976838 km Equirectangular 123.980256 km
coordinates = (70,0) to (71,0) Haversine 117.255674 km Equirectangular 117.259525 km
coordinates = (80,0) to (81,0) Haversine 112.726966 km Equirectangular 112.731106 km

0

TinyGPS库为Arduino提供了一个功能,可以测量两点之间的距离,以及两点之间的航向/方位。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接