【发布时间】:2011-02-12 13:59:40
【问题描述】:
我有一个程序,它将一组经纬度点作为输入。我需要对该数组进行检查,以确保所有点都在某个半径内。因此,例如,我允许的最大半径是 100 英里。给定一个纬度/经度数组(来自 MySQL 数据库,可能是 10 个点,可能是 10000 个),我需要弄清楚它们是否都适合半径为 100 英里的圆。
对于如何处理这个问题有点困惑。任何帮助将不胜感激。
【问题讨论】:
-
找到任何给定点集的中心是我没有试图弄清楚的事情,但是一旦你这样做了,Haversine 公式将帮助你确定它们是否在半径范围内。
-
中心不会只有个别经纬度平均值的经纬度,还是我缺少一些球面几何的微妙之处?
-
中心称为重心。但是,这无济于事,因为这与包含所有点的最小圆的中心不同(想象一下右边有很多点,左边有一个 - 重心将在右边,但是圆的中心将在中间)
-
如上所述,您想做的事情可能与找到包含您的点的最小圆圈一样难。这是一个棘手的(虽然不是不可能的)问题。在这种情况下,我会重新检查原始要求,看看是否有可以计算出的替代事物足以解决真正的潜在问题。您可能不想浪费开发和 CPU 时间来解决一个精确的数学问题,而该问题本身只是对开始时仅含糊地指定的问题的近似。
-
@las3jrock: 同一纬度 45 度的两点的中心,正好在纬度 45 度以上。想想飞机的路径在墨卡托地图上投影时是如何“弯曲”的,即使它实际上是直线飞行。