mongodb - $geoIntersects 没有返回结果

标签 mongodb geospatial

我正在查询一个多边形,以检查一个点是否在其中,但没有返回结果。我在mongo shell中:(MongoDB shell版本:3.2.6)

db.restPolygons.find();
{
  "_id" : ObjectId("586e663175c32828be59e3a9"),
  "zoneCoordinates" : {
    "type" : "Polygon",
    "coordinates" : [
      [ 2, 0 ],
      [ 6, 0 ],
      [ 6, 2 ],
      [ 2, 2 ],
      [ 2, 0 ]
    ]
  }
}

db.restPolygons.find({
  "zoneCoordinates": {
    "$geoIntersects": {
      "$geometry": {
        "type": "Point",
        "coordinates": [3 ,1]
      }
    }
  }
}).count();
    0

最佳答案

您的多边形无效,它在坐标字段中缺少封闭数组的级别。这个应该可以工作:

> db.geo.find()
{
    "_id": ObjectId("586e663175c32828be59e3a9"),
    "zoneCoordinates": {
        "type": "Polygon",
        "coordinates": [
            [
                [2, 0],
                [6, 0],
                [6, 2],
                [2, 2],
                [2, 0]
            ]
        ]
    }
}

> db.geo.find({
    "zoneCoordinates": {
      "$geoIntersects": {
        "$geometry": {
          "type": "Point",
          "coordinates": [3 ,1]
        }
      }
    }
  }).count()
1

您可以在 GeoJSONLint 中检查 GeoJSON 对象的有效性

关于mongodb - $geoIntersects 没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489245/

相关文章:

node.js - Mongoose 使用父字段生成子字段

javascript - Node.js 连接到 mongodb

mysql - 优化与地理距离相关的 MySQL 查询

javascript - JavaScript 拓扑库

indexing - 在 Marklogic 中创建没有父级的地理空间对索引

mysql - 相当于 MYSQL 中 COUNT (`column` ) 的 mongodb 是什么?

macos - mac安装mongodb

python - Mongolab 拒绝连接

algorithm - 将矢量轮廓区域(边界)转换为栅格 map (像素网格)

javascript - map 颜色模式 "random"适用于 Google 地球但不适用于 Google map