2014-08-27 1048 views
0

我目前正在制定一个带有两个表格的模拟数据库架构:BookingWaypoint使用经纬度坐标计算多个点之间距离的Excel公式

  • 预定存储出租车预订信息。

enter image description here

  • 航点存储该拾取和在行程中脱落点,与纬度经度位置沿。每个序列都是旅程中的一站。

enter image description here

我将如何计算每个旅程(使用经/纬度数据)在Excel中不同的站之间的距离?

有一种方法在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英里根据谷歌,条目在mileageBooking表中进行,其中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列在id = 3

+0

结帐:http://www.cpearson.com/Excel/latlong.aspx – 2014-08-27 18:06:00

+1

虽然很容易计算出地图上的直线上的距离(“右旋距离”),而在大圆圈(“正向距离”)上并不困难,但计算合理精确的陆上里程需要更复杂的解决方案tions到表示路线的图上的最小长度路径问题 - 这又需要良好的路线数据库。我建议使用现成的专用软件来实现此功能,除非您并不真正在意精度。如果是这样的话,让我知道,我会找到公式...我有他们的地方... – jsalvata 2014-08-27 18:27:31

+0

@jsalvata谢谢你回到我身边。准确性不是真正的问题:) – methuselah 2014-08-27 18:28:25

回答

1

直到最近,准确的地图由三角构建Booking表,这在本质上是由毕达哥拉斯定理的应用。对于任意一对坐标之间的距离,取x坐标差的平方和y坐标差的平方和的平方根。然而,x和y坐标必须是相同的单位(例如英里),这涉及因子分解纬度和经度值。这可能会很复杂,因为经度的因素取决于纬度(在北极行走比在赤道附近行走的距离要小),但在你的情况下,北部的因素应该是服务的。从这个结果(可能会检查here)与您给出的示例(第二种情况,配对ID 6和7并将该结果添加到配对ID 7和8的结果)大约有20%不同。

1

既然你说的准确性并不重要,并且假设距离很小(比如说少于1000英里),那么你可以使用洛克索距离。

为此,计算结果(dlat)与经度差(dlon)的差值。如果您有可能(不太可能)穿越子午线180º,则以模数360º来确保经度差异在-180º和180º之间。还计算平均纬度(alat)。

然后计算:

distance= 60*sqrt(dlat^2 + (dlon*cos(alat))^2) 

这个距离是在海里。根据需要应用转化。

说明:这样做的好处是,根据定义,一海里总是等于纬度的一分钟弧。余弦对应于经脉在接近两极时彼此接近的事实。其余的只是毕达哥拉斯定理的应用 - 它要求地球的相关部分是平坦的,这对于小距离来说当然只是一个很好的近似值。

2

如果您想查找两点之间的距离,只需使用此公式,您将得到以Km为单位的结果,如果需要,则转换为英里。

点A:LAT1,LONG1 点B:LAT2,LONG2

ACOS(COS(RADIANS(90 LAT1))* RADIANS(90 LAT2))+ SIN COS((RADIANS(90 LAT1 ))* SIN(RADIANS(90 LAT2))* COS(RADIANS(long1-long2)))* 6371

问候

相关问题