擅长匹配经纬度和长点

我想从具有纬度,经度和距离点的值表中提取多个点的距离值。 我有一张沿着一条路线的火车线路,并且每隔20米有一个点,与我想要提取的距离值相关的公里点。

查找表

查找表:沿火车路径的点和距离

我有另一个表,参考表,这是一个火车的位置数据沿查找表相同的path每隔3-5分钟,所以经纬度不会是相同的。 我需要通过查找表来查找path上最接近的纬度和长点,并提取相关的距离。 我能够单独find纬度和经度的最近点,但由于path有风,预期值不匹配。 我已经经历了一些与预期不同的点,在某些情况下,与纬度有关的距离是正确的,但在另一些情况下,与经度有关的距离是正确的。

参考表

参考表:在查找表中搜索与此表中每个点最近的点

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

这是我用来提取距离的公式。 (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情况下应该使用什么?

我发现一个解决scheme,真的很复杂。 首先推理,find你的参考点和查找点之间的最小距离,find正确的点。 这两点之间的最小距离将给你所需的纬度,日志和相关的距离。

我find了余弦方程(最不复杂的)的球面定律 ,可以计算两点之间的距离。 然后,您可以使用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)