excel匹配纬度和长点

时间:2015-04-24 01:34:06

标签: excel latitude-longitude

我想从具有纬度,经度和距离点的值表中提取多个点的距离值。我有一张沿着一条小路沿着火车线的桌子,每隔约20米就有一个点,其中我想要提取距离值的公里点。

查找表

Lookup table: points and distances along the train path

我有另一个表,参考表,它是沿着与查找表相同的路径每3-5分钟一次列车的位置数据,因此纬度和长点不会相同。我需要搜索查找表以找到路径上最近的纬度和长点并提取相关距离。我能够单独找到纬度和经度的最近点,但由于路径有风,因此预期值不匹配。我已经浏览了一些与预期不同的点,在某些情况下,与纬度相关的距离是正确的,但在其他情况下,与经度相关的距离是正确的。

参考表

Reference table: Search the lookup table for the closest point to each point in this table

参考表中突出显示的值是不同于它们应该是什么的值,如查找表中所示(相同的颜色指的是查找表中找到的值)。大胆的价值观是同意的点,这是我希望为所有观点实现的。参考表中的公里点是正确的,但我必须手动调整方程式以使用正确的值。

这是我用来提取距离的等式。 (第J栏)

=IF(MATCH(MIN(ABS(LookupTable-ReferenceLatitude)),ABS(LookupTable-ReferenceLatitude),0)=MATCH(MIN(ABS(LookupTable-ReferenceLongitude)),ABS(LookupTable-ReferenceLongitude),0), TRUE:extract Distance, FALSE: ??? [both points should agree] )

目前我手动调整FALSE条件以根据需要从纬度或长值中提取距离。

我的问题是,有没有办法确保纬度和经度匹配才能获得正确的距离?什么应该在FALSE案例中用于计算?

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,真的很复杂。首先,通过找到参考点和查找点之间的最小距离,可以找到正确的点。然后,两点之间的最小距离将为您提供所需的纬度,对数和相关距离。

我发现document here等式(最简单的等式)可以让你计算两点之间的距离。然后,您可以使用MATCH()查找点的行,然后使用INDEX()来提取距离值。

这是MATCH()等式

=MATCH(MIN(ABS(2*ATAN2(SQRT(1-(SIN(RADIANS((refLat-lookupLatArray)/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong-lookupLonArray)/2))*SIN(RADIANS((refLong-lookupLonArray)/2)))),SQRT(SIN(RADIANS((refLat-lookupLatArray)/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong-lookupLonArray)/2))*SIN(RADIANS((refLong-lookupLonArray)/2))))*6371)),ABS(2*ATAN2(SQRT(1-(SIN(RADIANS((refLat2-lookupLatArray)/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong2-lookupLonArray)/2))*SIN(RADIANS((refLong-lookupLonArray)/2)))),SQRT(SIN(RADIANS((refLat-lookupLatArray/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong-lookupLonArray/2))*SIN(RADIANS((refLong-lookupLonArray)/2))))*6371),0)