db.command.geoWithin

需对查询字段建立地理位置索引

找出字段值在指定区域内的记录,无排序。指定的区域必须是多边形(Polygon)或多边形集合(MultiPolygon)。

方法签名:

function geoWithin(IOptions): Command

interface IOptions {
  geometry: Polygon | MultiPolygon // 地理位置
}

示例代码 1:给定多边形

const db = wx.cloud.database()
const _ = db.command
const { Point, LineString, Polygon } = db.Geo
db.collection('restaurants').where({
  location: _.geoWithin({
    geometry: Polygon([
      LineString([
        Point(0, 0),
        Point(3, 2),
        Point(2, 3),
        Point(0, 0)
      ])
    ]),
  })
})

示例代码 2:给定圆形

可以不用 geometry 而用 centerSphere 构建一个圆形。

centerSphere 对应的值的定义是:[ [纬度, 经度], 半径 ]

半径需以弧度计,比如需要 10km 的半径,则用距离除以地球半径 6378.1km 得出的数字。

const db = wx.cloud.database()
const _ = db.command
db.collection('restaurants').where({
  location: _.geoWithin({
    centerSphere: [
      [-88, 30],
      10 / 6378.1,
    ]
  })
})