【发布时间】:2019-02-19 10:48:04
【问题描述】:
我有两个需要匹配坐标的列表。
一个非常大的列表(434,561 行)结构如下(在 Excel 中将列视为 A、B 和 C):
code (ID) | Latitude | Longitude
----------|------------|-----------
point455 | 4.513523 | 23.754457
point478 | 74.123523 | 83.757459
[...]
另一组具有相同结构的点的第二个列表(4000 行)。
我想将第二个列表中的每个点与第一个列表中最接近的坐标相匹配。差不多是这样的:
(second list)
code (ID) | Latitude | Longitude | Closest point
----------|------------|-------------|--------------
tag165 | 4.513523 | 23.754457 | point488
tag198 | 74.123523 | 83.757459 | point124
[...]
我尝试分别匹配纬度和经度。下面的公式给出了单元格中包含最近长值的值:
=INDEX(ALLStops!B2:ALLStops!$B$434561, MATCH(MIN(ABS(ALLStops!$B$2:ALLStops!$B$434561-B2)), ABS(ALLStops!B2:ALLStops!$B$434561-B2), 0))
两列具有相同的公式,并且被独立处理。然后我使用=MATCH(E2,ALLStops!B2:B434561,0) 获取行。
但是大约 1/3 的条目具有最近坐标在不同行上的值,这显然是无用的。
所以匹配为最接近的两个坐标值需要在同一行,我猜计算必须压缩为一个。
任何人都可以提出一种限制这种情况的方法,或者一种更简洁(并且内存占用更少)的方法吗?
【问题讨论】:
-
我会用勾股定理来确定两点之间的差异:假设你有你的
target和你所有的stops。从您的每个stop纬度中减去target的纬度(我们称该变量为dLat)。然后对你的经度做同样的事情(再说一遍dLon)。然后,这些值的平方的平方根将是这两个点之间的坐标差:=SQRT(dLon^2 + dLat^2) -
请注意,如果您使用地球表面上的坐标,距离将不会按比例表示:两个经度之间的距离在赤道处最长,并且随着您的移动越来越小两极
标签: arrays indexing excel-formula match vlookup