邮政编码半径搜索

时间:2010-03-29 07:12:16

标签: math geocoding

我想知道是否可以通过经度和纬度在一个点的X半径内找到所有点?

所以,如果我提供-76.0000,3800.00的纬度/经度,是否可以简单地找到(例如)半径10英里范围内的所有可能坐标?

我知道有办法计算两点之间的距离,这就是为什么我不清楚这是否可能。因为,您似乎需要知道中心坐标(在这种情况下为-76和38)以及每个其他点的坐标,以确定它是否落在指定的半径范围内。是对的吗?

4 个答案:

答案 0 :(得分:1)

@David的策略是正确的,他的实施存在严重缺陷。我建议在执行计算之前,将lat,long对转换为UTM坐标,并在距离而非角度测量中工作。如果您不熟悉Universal Transverse Mercator,请点击谷歌或维基百科。

我认为你的观点(-76,38)是UTM 37C 472995(Easting)1564346(Northing)。所以你想要计算距离那一点的距离。你会发现使用UTM更容易以米为单位工作,所以你的距离是(如果你使用的法定里程为5280英尺)16040米。

顺便说一下,(-76,38)远不及美国的常设 - 美国邮政局是否定义了南极洲的邮政编码?

答案 1 :(得分:1)

如果您接受地球是一个完美的球体,您可以通过

获得点的空间坐标
x = R.cos(Lat).cos(Long)
y = R.cos(Lat).sin(Long)
z = R.sin(Lat)

现在,取两点并计算它们与地球中心形成的角度(使用点积):

cos(Phi) = (x'.x" + y'.y" + z'.z") / R²

(R的值得到简化)。

在您的情况下,角距离Phi等于2Pi.D / R. (R = 6 378.1 km)。

A点P"在P'的地面距离(D)内当点积大于而不是cos(Phi)时。

注意:所有角度都必须是弧度。

答案 2 :(得分:0)

根据精度,一定距离内的点数据集可能非常大甚至无限(不可能)。在具有正半径的圆的给定区域中,您将具有无限多个点。因此,确定一个点是否在一个圆圈内是微不足道的,但是枚举所有点是不可能的。

如果您设置了固定的精度(例如单个数字),则可以循环所有可能的纬度和经度组合并执行距离测试。

答案 3 :(得分:-1)

凯文是对的。没有理由计算半径中每个可能的坐标对。

如果从中心点开始pC = Point(-76.0000,38.0000)并且正在测试以确定任意点pA = Point(Ax,Ay)是否在半径10英里内...使用毕达哥拉斯定理:< / p>

xDist = abs( pCx - Ax )
yDist = abs ( pCy - Ay )
r^2 = (xDist)^2 + (yDist)^2

合理的近似是仅查询

的点
pAx >= (-76.0000 - 10.0000) && pAx <= (-76.0000 + 10.0000)
pAy >= ( 38.0000 - 10.0000) && pAy <= ( 38.0000 + 10.0000)

然后执行上面更密集的计算。