在 MongoDB 中,$polygon 操作可以用来进行多边形地理位置查询。而在 Mongoose 中,$polygon 操作可以通过使用 GeoJSON 对象来实现。本文将详细介绍 Mongoose 中的 $polygon 操作,包括其语法、使用方法、示例代码以及一些注意事项。
语法
Mongoose 中的 $polygon 操作的语法如下所示:
Model.find({location: {$geoWithin: {$polygon: [[x1, y1], [x2, y2], [x3, y3], ..., [xn, yn]]}}}, callback);其中,Model 表示 Mongoose 模型,location 表示存储地理位置信息的字段名,x1, y1, x2, y2, ..., xn, yn 分别表示多边形各个顶点的经纬度坐标。
使用方法
使用 $polygon 操作进行多边形地理位置查询的步骤如下:
定义 Mongoose 模型并设置地理位置索引。
// www.javascriptcn.com code example var mongoose = require('mongoose'); var Schema = mongoose.Schema; var locationSchema = new Schema({ name: String, location: { type: {type: String}, coordinates: [] } }); locationSchema.index({location: '2dsphere'}); var Location = mongoose.model('Location', locationSchema);插入数据。
// www.javascriptcn.com code example var location1 = new Location({ name: 'location1', location: { type: 'Point', coordinates: [116.397128, 39.916527] } }); var location2 = new Location({ name: 'location2', location: { type: 'Point', coordinates: [116.407128, 39.926527] } }); var location3 = new Location({ name: 'location3', location: { type: 'Point', coordinates: [116.417128, 39.936527] } }); location1.save(); location2.save(); location3.save();进行多边形地理位置查询。
// www.javascriptcn.com code example var polygon = [[116.387128, 39.906527], [116.387128, 39.946527], [116.447128, 39.946527], [116.447128, 39.906527], [116.387128, 39.906527]]; Location.find({location: {$geoWithin: {$polygon: polygon}}}, function(err, locations) { if (err) { console.error(err); } else { console.log(locations); } });
示例代码
以下是一个完整的示例代码,包括定义 Mongoose 模型、插入数据以及进行多边形地理位置查询:
// www.javascriptcn.com code example
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var locationSchema = new Schema({
name: String,
location: {
type: {type: String},
coordinates: []
}
});
locationSchema.index({location: '2dsphere'});
var Location = mongoose.model('Location', locationSchema);
var location1 = new Location({
name: 'location1',
location: {
type: 'Point',
coordinates: [116.397128, 39.916527]
}
});
var location2 = new Location({
name: 'location2',
location: {
type: 'Point',
coordinates: [116.407128, 39.926527]
}
});
var location3 = new Location({
name: 'location3',
location: {
type: 'Point',
coordinates: [116.417128, 39.936527]
}
});
location1.save();
location2.save();
location3.save();
var polygon = [[116.387128, 39.906527], [116.387128, 39.946527], [116.447128, 39.946527], [116.447128, 39.906527], [116.387128, 39.906527]];
Location.find({location: {$geoWithin: {$polygon: polygon}}}, function(err, locations) {
if (err) {
console.error(err);
} else {
console.log(locations);
}
});注意事项
在使用 $polygon 操作进行多边形地理位置查询时,需要注意以下几点:
多边形各个顶点的经纬度坐标必须以逆时针方向排列。
多边形各个顶点的经纬度坐标必须是一个数组,其中第一个元素表示经度,第二个元素表示纬度。
Mongoose 中的 $polygon 操作只能用于查询多边形内的地理位置,不能用于查询多边形外的地理位置。
在进行多边形地理位置查询时,需要先为存储地理位置信息的字段建立地理位置索引。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d208e4a941bf71343fe5b8