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

C# 边界框内的纬度/经度组合,c#,math,geospatial,C#,Math,Geospatial,给定一个边界框,我希望能够计算该框内所有可能的纬度/经度组合,达到一定精度,例如小数点后3位。目前,计算是实时完成的,速度非常慢。为了加快速度,我计划使用AppFabric缓存之类的东西来缓存所有点/距离组合的数据集。如果操作正确,则应将距离计算减少为查找 我唯一缺少的是一种计算边界框中lat/lon组合的有效方法——有人能帮忙吗 马克我的猜测是,计算某个框中的“所有纬度和经度组合”的速度不应该加快;根本不应该这样做。相反,您应该派生沿边界框的四条边运行的函数。例如,对于变量x和常量y\u to

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

我唯一缺少的是一种计算边界框中lat/lon组合的有效方法——有人能帮忙吗


马克

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

仍然有点困惑,为什么您想要所有这些点,而不只是动态检查给定点是否在框中(这不需要太多计算)

然而,给定一个小盒子,我们可以将其视为局部平坦

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

(llat, llong) -> (x = llong * cos(llat), y = llong)
[注意cos()不是一个昂贵的函数-除非您仍然使用486!]

然后问题就归结为笛卡尔平面的问题

假设“长方体”是指矩形,不一定是定向的

最明显的做法是将其光栅化

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

    • 我同意其他答案,通常情况下,您不希望创建所有纬度/经度组合的列表


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

      地图有什么类型的投影?@markpirvine为什么需要所有可能的组合?仅仅知道某个点是否在边界框内就足够了吗?这将更容易计算。我认为Reinderien假设一个对齐的矩形边界框。但是除了使用什么地图投影外,您还打算使用什么样的长方体形状/投影?有点像一枚硬币的两面,“盒子”有多大?小到足以(低于一定程度)被视为局部平坦还是不平坦?@adi我想要所有的组合,这样我就可以确信所有的距离计算都可以在不使用昂贵的web服务查找的情况下完成。从lat/lon点移除一些精度应该具有创建多个边界框的相同效果?