边界框内的纬度/经度组合

时间:2011-04-04 20:19:44

标签: c# math geospatial

给定一个边界框,我希望能够计算该框内所有可能的纬度/经度组合,达到一定的精度,例如:小数点后3位。目前,计算是实时的,这是非常缓慢的。为了帮助加快速度,我计划使用AppFabric Caching之类的东西来缓存所有点/距离组合的数据集。如果正确完成,这应该将距离计算减少到查找。

我缺少的唯一一个难题是在边界框中计算纬度/经度组合的有效方法 - 任何人都可以帮忙吗?

标记

3 个答案:

答案 0 :(得分:1)

我的猜测是,不应加快在某个方框内计算“所有纬度和经度组合”;它根本不应该完成。相反,您应该派生沿着边界框的四个边缘运行的函数。例如,对于变化x和常量y_top,派生函数lat(x)long(x)。给定四个边的两个函数=总共八个函数,您应该能够开发快速逻辑,以确定任何给定坐标是否在边界框中。

答案 1 :(得分:1)

为什么你想要所有这些点,而不仅仅是检查一个给定的点是否在动态框中(这确实需要很多计算)仍然有点神秘。

然而,考虑到一个小盒子,我们可以对待当地的平坦。

这意味着我们将任何点转换为新坐标:

(llat, llong) -> (x = llong * cos(llat), y = llong)

[注意cos()不是一个昂贵的功能 - 除非你还在486上!]

然后问题减少到笛卡尔平面的问题。

假设“盒子”是指一个矩形,不一定是方向的。

显而易见的事情是光栅化它。

  • 从你的盒子中找出极值的纬度点。
  • 对于范围内的每个纬度,找到与边相交的一对经度。 [对于这个边缘部分,您使用局部平坦度并考虑直线交叉点。]
  • 由这对经度定义的区间内的所有经度都在你寻找的集合中。
  • 也许所有实际存储都是间隔终点而不是所有点。

答案 2 :(得分:0)

我会同意其他答案,通常你不想创建所有纬度/经度组合的列表。

如果您使用的是SQL Server 2008或2012,则使用STContains()或STIntersects()方法非常简单,并且空间索引非常快。