mongodb - 如何在 MongoDB= 中的两个圆的差异内执行地理搜索

标签 mongodb mongoid geospatial

是否可以在 MongoDB 中根据两个圆的差异在结果区域中执行地理空间搜索。假设我有一个半径为 x 的圆 A 和另一个半径为 y 的圆 B,其中 y > x。我需要找到 B - A 内的所有点。这对于 MongoDB 是否可行?我知道 MongoDB 支持多边形搜索,但也许有更好的方法。请记住,我是在使用 mongoid 的 Rails 应用程序中使用 Mongo。

最佳答案

是的,这是可能的。 使用 $within 运算符。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-Querying

Bounds Queries

$within 可以用来代替 $near 来查找形状内的项目。结果不按距离排序,当不需要这种排序时,这可能会导致更快的查询。支持 $box(矩形)、$center(圆形)和 $polygon(凹多边形和凸多边形)类型的形状。所有边界查询都隐式包含形状的边界作为边界的一部分,但由于浮点不准确,这不能严格依赖。

要查询矩形内的所有点,必须指定左下角和右上角: 圆由中心点和半径指定:

center = [50, 50] radius = 10 db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

一种方法是您可以在两个圆内找到点,然后对这些集合进行交集。 如果圆是同心的,或者不是同心的但有一些重叠区域,这对这两种情况都适用。

关于mongodb - 如何在 MongoDB= 中的两个圆的差异内执行地理搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11771009/

相关文章:

node.js - Mongoose $push 的问题

arrays - mongoid 更新数组中的元素

ruby-on-rails - NoMethodError : undefined method `[]' for false:FalseClass

ruby-on-rails - Mongoid 查询中的日期

redis - 从Redis的源码看 "area"和 "BoundingBox"有什么区别

node.js - Mongoose 通过id方法删除子文档

ruby-on-rails - Rails 和 mongo 嵌入关系

c - 是否有一个纯 C 语言的库可以将 GPX 转换为 KML 和其他地理格式?

sql - 为什么 SQL Server GEOGRAPHY 允许经度在 -15069° 和 +15069° 之间?为什么±15069°?

javascript - 获取一周数的所有对象