【问题标题】:How can I divide the globe in to small grids such that it allows me to assign each lat/long location to a grid? [closed]如何将地球划分为小网格,以便我可以将每个纬度/经度位置分配给网格? [关闭]
【发布时间】:2010-12-21 22:33:57
【问题描述】:

为了计算由纬度/经度表示的最近位置,我正在考虑将地图划分为小网格,大约 100x100 米的网格。基本上每个点都会被分配到一个网格中。

我知道我也可以在 MySQL 等中使用空间索引,但我计划使用像 Cassandra 这样的非关系数据库,在这种情况下很难对空间对象进行索引,因此可以使用某种网格近似技术整洁。

创建这样一个网格系统并将二维空间位置映射到它的最佳方法是什么?

Edit1:如果网格不是完全均匀的,这可能没关系,在两极周围更是如此。

【问题讨论】:

  • 不容易……地球不是平的,它没有分成矩形网格。
  • 好问题。你最后做了什么?
  • 您找到解决方案了吗?

标签: grid geolocation maps geospatial spatial


【解决方案1】:

从二维空间坐标映射到您的空间索引/geohash 是一个有趣的问题。你可以看看this article on quadtrees, geohashes and Hilbert curvesHilbert curve 是提供局部性的空间填充曲线;出于您的目的,这意味着一维空间索引中的附近项目将在二维空间中附近。

目标(如其他响应者所述)是在不从服务器请求大量不必要数据的情况下,最大限度地减少覆盖相关空间所需的查询次数。如何从二维空间映射到一维索引将影响该目标。

【讨论】:

    【解决方案2】:

    在不了解您的确切应用要求的情况下,地理哈希可能是一种合适的技术:http://en.wikipedia.org/wiki/Geohash

    “它是一种分层的空间数据结构,将空间细分为网格形状的桶。 Geohashes 提供了任意精度等属性,以及逐渐从代码末尾删除字符以减小其大小(并逐渐失去精度)的可能性。”

    【讨论】:

      【解决方案3】:

      矩形网格可能是一种合理的估计,但仅限于不太靠近两极的相对较小的区域。全面的解决方案需要不同的方法。

      【讨论】:

      • 谢谢瑞克。我认为对于我的用例,如果网格不均匀,则可能是可以接受的,而对于两极周围的区域则更是如此。
      • 如果您在每条边上使用具有相同角距离数的极坐标(纬度、经度、半径),自然会出现不均匀的网格。如果您转换为笛卡尔坐标 (x, y, z),您可能会发现索引等会更容易一些。最佳方法很大程度上取决于您的具体要求,包括准确性和速度等。
      【解决方案4】:

      您无法创建统一映射地球的矩形网格。如果网格必须是统一的,则必须改用三角形。但总的来说,我怀疑这会解决你的问题。您需要的是某种 2D octree(这是一个 Google 搜索链接;查看图像以了解其工作原理):您必须将坐标划分为层次结构(例如北/南/东/西第一级的原点,然后在 90 度之间等)。

      然后您可以进行几次选择,这将快速生成包含现有坐标的最小矩形。现在,您可以检查矩形的大小。如果它

      Google 搜索“octree sql 数据库”的实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-04
        • 2022-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 2018-09-26
        相关资源
        最近更新 更多