MongoDB 地理空间查询的类型和特性

2023-04-15 00:00:00 类型 特性 地理

MongoDB地理空间查询主要有以下类型:

  1. 点查询:查询给定点是否在指定的地理区域内,如附近的酒店、银行等。
  2. 区域查询:查询所有包含指定区域的地理数据,如查找所有位于一个特定国家/州/城市/街道的人。
  3. 面内查询:查询一个面内的所有地理数据,如在一个城市区域内查找公园和游乐场等。
  4. 面与面之间的关系查询:查询两个面之间的空间关系,如A面是否包含B面或A面是否与B面相交等。

MongoDB地理空间查询的特性:

  1. 支持地理空间索引,提高查询效率。
  2. 支持各种地图投影方式,如平面坐标、经纬度等。
  3. 灵活的查询方式,可以根据需求进行多种组合查询,如在 某个城市 的 某个区域内 的 某个范围内 的物品等。
  4. 可以使用 $near 运算符查找最接近的地理位置。
  5. 可以查询平面和球面距离。
  6. 可以通过复合查询结合地理数据和其他条件查询,如在城市中查找满足性别和职业条件的人员。

代码演示:

  1. 创建地理空间索引:
db.places.createIndex( { location : "2dsphere" } )
  1. 插入地理数据:
db.places.insertMany([
   { name: "pidancode", website: "www.pidancode.com", location: { type: "Point", coordinates: [ -73.97, 40.77 ] } },
   { name: "皮蛋编程", website: "www.pidancode.com", location: { type: "Point", coordinates: [ -73.96, 40.78 ] } },
   { name: "Times Square", website: "www.timessquare.com", location: { type: "Point", coordinates: [ -73.98, 40.76 ] } },
   { name: "Central Park", website: "www.centralpark.com", location: { type: "Point", coordinates: [ -73.97, 40.78 ] } },
   { name: "Madison Square Garden", website: "www.msg.com", location: { type: "Point", coordinates: [ -73.99, 40.75 ] } }
])
  1. 点查询:
db.places.find({
   location: {
      $geoWithin: {
         $centerSphere: [ [ -73.97, 40.77 ], 1 / 6378.1 ]
      }
   }
})
  1. 区域查询:
db.places.find({
   location: {
      $geoWithin: {
         $geometry: {
            type: "Polygon",
            coordinates: [ [ [ -73.98, 40.76 ], [ -73.96, 40.76 ], [ -73.96, 40.78 ], [ -73.98, 40.78 ], [ -73.98, 40.76 ] ] ]
         }
      }
   }
})
  1. 面内查询:
db.places.find({
   location: {
      $geoWithin: {
         $geometry: {
            type: "Polygon",
            coordinates: [ [ [ -73.98, 40.76 ], [ -73.96, 40.76 ], [ -73.96, 40.78 ], [ -73.98, 40.78 ], [ -73.98, 40.76 ] ] ]
         }
      }
   }
})
  1. 面与面之间的关系查询:
db.places.find({
   location: {
      $geoIntersects: {
         $geometry: {
            type: "Polygon",
            coordinates: [ [ [ -73.98, 40.76 ], [ -73.96, 40.76 ], [ -73.96, 40.78 ], [ -73.98, 40.78 ], [ -73.98, 40.76 ] ] ]
         }
      }
   }
})

相关文章