【问题标题】:Geofencing with MongoDB使用 MongoDB 进行地理围栏
【发布时间】:2011-11-06 05:39:36
【问题描述】:

我正在阅读 MongoDB here 的文档,我发现它非常有趣。但是,有一个功能似乎非常触手可及,但没有明确记录。这就是地理围栏的概念。如果我创建一个半径(或矩形),我如何执行查询以便我可以提供一个点,Mongo 可以告诉我该点是否在定义的区域内,而不必查询附近的区域和执行Ray-Casting algorithm(或其他算法)以确定我提供的点是否在这些区域内。

非常感谢您在正确方向上的任何帮助,或者更好的是,我们非常感谢您提供如何使用 MongoDB 执行此操作的一些示例。谢谢!

更新
只是为了让大家知道我做了什么。我最终推出了基于 Mongo 构建的自己的解决方案(以利用它现有的地理空间索引/查询能力),它对于原型来说效果很好。作为在生产中使用的解决方案,它肯定可以进行一些改进。但是,我写了一个关于我如何解决这个问题的博客系列以及一个 Ruby 中的示例服务器。您可以在我的网站here 上找到博客的第一部分。

【问题讨论】:

标签: mongodb geolocation geospatial


【解决方案1】:

不幸的是,mongodb 的地理索引仅用于存储点数据。存储区域需要对我们正在使用的数据结构进行一些认真的改造,这是一个长期目标,但不会在短期内发生。作为一种解决方法,如果您的区域的大小大致相似,您可能可以不用存储每个区域的中心点。然后您可以获取最近的十个区域并在您的应用中进行客户端过滤,以确定查询点位于哪个区域。

或者,您可以创建一个理想化的网格并将每个区域包含的网格正方形存储在该区域的数组中。然后将查询点映射到它的网格正方形,并确定该点所在的区域(如果该正方形不止一个)。这实际上类似于我们实现地理索引的方式,尽管我们使用了动态网格。如果你想走这条路,你应该使用普通(非地理)索引。

虽然这些都不是理想的,但希望它们能提供一个可行的解决方案。

【讨论】:

  • @msteern 在 2017 年是否为此更改了答案?
  • 从 2016 年开始 Mongodb 支持所有 GeoJSON 几何索引
【解决方案2】:

为什么不为您的区域使用集合并为您的区域使用多边形 - 这是 Greg Studer @ 10gen 的精彩演示,可能会给您一些想法:https://docs.google.com/present/edit?id=0ARXrl_iXSUmXZGhieDhqcTdfMTdjcjI4eDNkNQ&hl=en_US

【讨论】:

  • 文档似乎没有与公众共享
  • @nachi MongoDB 自该文档以来经历了一些重大变化——这是在最初开发这些东西的时候。此时可能值得寻找更新的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2015-11-07
相关资源
最近更新 更多