我目前正在制作一个包含两个表的模拟数据库模式:Booking
和Waypoint
。
如何在Excel中计算每次行程中不同站点之间的距离(使用lat / lon数据)?
有没有办法在Excel中以编程方式定义它,即可以将公式放入mileage
列(Booking
表),查找匹配的序列(通过bookingId
)在Waypoint
表中进行该旅程并返回结果?
示例1:
2站的旅程:
1 1 1 MK4 4FL, 2, Levens Hall Drive, Westcroft, Milton Keynes 52.002529 -0.797623
2 1 2 MK2 2RD, 55, Westfield Road, Bletchley, Milton Keynes 51.992571 -0.72753
根据谷歌的4.1英里,在mileage
表格的Booking
列中输入id = 1
示例2:
3站的旅程:
6 3 1 MK7 7DT, 2, Spearmint Close, Walnut Tree, Milton Keynes 52.017486 -0.690113
7 3 2 MK18 1JL, H S B C, Market Hill, Buckingham 52.000674 -0.987062
8 3 1 MK17 0FE, 1, Maids Close, Mursley, Milton Keynes 52.040622 -0.759417
根据谷歌的27.7英里,在mileage
表格的Booking
列中输入id = 3
答案 0 :(得分:3)
如果你想找到两点之间的距离,只需使用这个公式,你就可以得到Km的结果,只需要转换成里程。
A点:LAT1,LONG1 B点:LAT2,LONG2
ACOS(COS(RADIANS(90-Lat1))* COS(RADIANS(90-Lat2))+ SIN(RADIANS(90-Lat1))* SIN(RADIANS(90-lat2))* COS(RADIANS(long1) -long2)))* 6371
此致
答案 1 :(得分:1)
直到最近,通过三角测量构建了精确的地图,这实际上是毕达哥拉斯定理的应用。对于任何一对坐标之间的距离,取x坐标差的平方和与y坐标的差的平方之和的平方根。然而,x和y坐标必须处于相同的单位(例如英里),其涉及分析纬度和经度值。这可能很复杂,因为经度的因素取决于纬度(在北极周围行走的距离比在赤道附近行走的要少)但在你的情况下,应该使用52 o North的因子。由此得出的结果(可能会被检查here)与您给出的示例差异大约20%(在第二种情况下,配对ID为6和7,并将结果添加到配对ID 7和8的结果中) )。
答案 2 :(得分:1)
由于您说准确性并不重要,并且假设距离很小(比如说小于1000英里),您可以使用loxodromic距离。
为此,计算出不同(dlat)和经度差(dlon)的差异。如果有任何机会(不太可能)你正在经过180度经线,请采用模数360º以确保经度的差异在-180º和180º之间。同时计算平均纬度(alat)。
然后计算:
distance= 60*sqrt(dlat^2 + (dlon*cos(alat))^2)
这个距离是海里。根据需要应用转化。
解释:这利用了这样一个事实,即根据定义,一个海里总是等于一分钟的纬度弧。余弦对应于经线在接近极点时彼此靠近的事实。剩下的就是应用毕达哥拉斯定理 - 它要求地球的相关部分是平坦的,这当然只是小距离的良好近似。
答案 3 :(得分:0)
这一切取决于距离和所需的精度。基于“地球局部平坦”模型的计算对于长距离而言不会提供很好的结果,但对于短距离而言可能没问题。假设地球是理想球体的模型(例如Haversine公式)不会产生测地线坡度结果。 有关更多详细信息,请参见https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid。 Vincenty公式是一种高精度(几毫米)的解决方案。对于我的Excel实现,请点击此处https://github.com/tdjastrzebski/Vincenty-Excel