使用 geojson 和 mongoose 将多边形坐标插入 Mongo DB 时出错
Posted
技术标签:
【中文标题】使用 geojson 和 mongoose 将多边形坐标插入 Mongo DB 时出错【英文标题】:Error while inserting polygon coordinates to Mongo DB using geojson and mongoose 【发布时间】:2019-03-10 16:07:29 【问题描述】:我是 Nodejs 和 Mongo DB 的初学者。我正在尝试将区域创建为方形多边形。我正在使用 Nodejs 存储在数据库中。
我的 Mongoose 架构是
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var momentTimezone = require('moment-timezone');
var moment = require('moment');
const geofencingAreasSchema = new mongoose.Schema(
name: String,
coordinates: [],
created_at:
type: Date,
default: new moment.tz ('Asia/Dubai').format('Y-M-D HH:mm:ss')
);
geofencingAreasSchema.index( coordinates:"2d" );
/**
* Export Schema
*/
module.exports = mongoose.model('geofencing_areas', geofencingAreasSchema,'geofencing_areas');
我正在尝试使用以下方法插入坐标
var GeofencingModel = require('../models/geofencing_areas.js');
const Zone = new GeofencingModel(
name:row.toString()+col.toString(),
type:'Polygon',
coordinates : [coordinates],
created_at: new moment.tz('Asia/Dubai').format('Y-M-D HH:mm:ss')
);
Zone.save((err, zones) =>
if (err)
return false;
else
return true;
);
我的坐标数组包含
[ [ 55.18777533242337, 25.35359425987688 ],
[ 55.18777533242337, 55.287108408253516 ],
[ 55.287108408253516, 25.26372890279708 ],
[ 25.26372890279708, 25.35359425987688 ],
[ 55.18777533242337, 25.35359425987688 ] ]
运行后出现如下错误
MongoError:无法提取地理键: _id: ObjectId('5bb6ff2fddff79200cd5d5ef' ), created_at: new Date(1538714135000), name: "11", 坐标: [ [ [ 55.187775 33242337、25.35359425987688]、[55.18777533242337、55.28710840825352]、[55.28 710840825352, 25.26372890279708 ], [ 25.26372890279708, 25.35359425987688 ], [ 5 5.18777533242337, 25.35359425987688 ] ], __v: 0 点只能包含数字元素
【问题讨论】:
【参考方案1】:我找到了解决办法
架构
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var momentTimezone = require('moment-timezone');
var moment = require('moment');
const geofencingAreasSchema = new mongoose.Schema(
name: String,
loc:
type: type: String,
coordinates: []
,
created_at:
type: Date,
default: new moment.tz ('Asia/Dubai').format('Y-M-D HH:mm:ss')
);
geofencingAreasSchema.index(loc: '2dsphere');
/**
* Export Schema
*/
module.exports = mongoose.model('geofencing_areas', geofencingAreasSchema,'geofencing_areas');
插入函数
const Zone = new GeofencingModel(
name:row.toString()+col.toString(),
loc:type:'Polygon',coordinates : [coordinates],
created_at: new moment.tz('Asia/Dubai').format('Y-M-D HH:mm:ss')
);
Zone.save((err, zones) =>
if (err)
return false;
else
return respose;
);
【讨论】:
以上是关于使用 geojson 和 mongoose 将多边形坐标插入 Mongo DB 时出错的主要内容,如果未能解决你的问题,请参考以下文章
尝试将变量保存到 GeoJSON 点时出现 Mongoose CastError
如何在 MongoDB 中正确使用 $geoIntersects?
是否可以使用 JavaScript 确定 GeoJSON 点是否在 GeoJSON 多边形内?