SDK数据库 Command·查询·地理位置操作符
2020-07-27 14:30 更新
Command.geoNear(options: Object): Command
支持端:小程序 , 云函数 , Web
按从近到远的顺序,找出字段值在给定点的附近的记录。
参数
options: Object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
geometry | GeoPoint | 是 | 地理位置点 (Point) | |
maxDistance | number | 否 | 选填,最大距离,单位为米 | |
minDistance | number | 否 | 选填,最小距离,单位为米 |
返回值
Command
索引要求
需对查询字段建立地理位置索引
示例代码
找出离给定位置 1 公里到 5 公里范围内的记录
const _ = db.command
db.collection('restaurants').where({
location: _.geoNear({
geometry: db.Geo.Point(113.323809, 23.097732),
minDistance: 1000,
maxDistance: 5000,
})
}).get()
Command.geoWithin(options: Object): Command
支持端:小程序 , 云函数 , Web
找出字段值在指定区域内的记录,无排序。指定的区域必须是多边形(Polygon)或多边形集合(MultiPolygon)。
参数
options: Object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
geometry | Object | 是 | 地理信息结构,Polygon,MultiPolygon,或 { centerSphere } |
返回值
Command
索引要求
需对查询字段建立地理位置索引
示例代码 1:给定多边形
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 构建一个圆形。
centerShpere 从公共库 2.8.3 开始支持
centerSphere 对应的值的定义是:[ [经度, 纬度], 半径 ]
半径需以弧度计,比如需要 10km 的半径,则用距离除以地球半径 6378.1km 得出的数字。
const _ = db.command
db.collection('restaurants').where({
location: _.geoWithin({
centerSphere: [
[-88, 30],
10 / 6378.1,
]
})
})
Command.geoIntersects(options: Object): Command
支持端:小程序 , 云函数 , Web
找出给定的地理位置图形相交的记录
参数
options: Object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
geometry | Object | 是 | 地理信息结构,Point |
返回值
Command
索引要求
需对查询字段建立地理位置索引
示例代码:找出和一个多边形相交的记录
const _ = db.command
const { Point, LineString, Polygon } = db.Geo
db.collection('restaurants').where({
location: _.geoIntersects({
geometry: Polygon([
LineString([
Point(0, 0),
Point(3, 2),
Point(2, 3),
Point(0, 0)
])
]),
})
})
以上内容是否对您有帮助:
更多建议: