2011-04-04 72 views
0

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

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

马克

+1

地图有什么样的投影? – Reinderien 2011-04-04 20:22:36

+2

@markpirvine 为什么你想要所有可能的组合?仅仅知道某个点是否在边界框内是不够的?这将更容易计算。 – Adi 2011-04-04 20:25:22

+0

我认为Reinderien正在假设一个对齐的矩形边界框。但是,除了您使用的是什么地图投影之外,您还打算使用哪种箱形/投影?同一枚硬币的两面... – winwaed 2011-04-04 20:48:07

回答

1

对于为什么你想要所有这些点而不是仅仅检查一个给定的点的问题,仍然有点神秘莫测,这是因为不是需要很多计算。

但是,给定一个小方块,我们可以把它看作是局部平坦的。

也就是说,我们把任何一点新坐标:

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

[注意COS()不是一个昂贵的功能 - 除非你是仍然在486!]

的问题,那么降低对于笛卡尔飞机。

假设通过“框”你是指一个矩形,不一定是定向的。

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

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

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

0

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

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