我正在尝试使用Mongoose将Polygon存储到我的MongoDB数据库中。我已经尝试过各种替代方案,但遗憾的是我无法弄明白。我发现了一种将坐标存储为String的方法,但不是geoJSON数组(Polygons)
territory
对象的organization
属性应为polygon
,并应存储在数组中。
我使用POSTMAN
进行测试,下面是我对坐标的POST请求的屏幕截图:
当我提交我的帖子请求时,我收到了此错误:
以下是对象如何存储在数据库中,如String而不是点数组
我在下面尝试了多个版本的代码,我得到了上面的回复,或者另外一个回复cast to array failed for value...
请告诉我我做错了什么或如何让这个工作。
以下是我的代码。
Organization.js
var mongoose = require('mongoose');
var organizationSchema = mongoose.Schema({
name:String,
address:String,
point:{type:[Number],index:'2d'},
territory:{
type:{
type:String,
required:true,
enum:['Point','LineString','Polygon'],
default:'Point'
},
coordinates:[mongoose.Schema.Types.Mixed]
}
});
organizationSchema.index({coordinates:'2dsphere'});
API.js
var Organization = require('./models/organization');
var express = require('express');
var mongoose = require('mongoose');
var apiRoutes = express.Router();
apiRoutes.route('/organizations')
.post(function(req,res,next){
var organization = new Organization();
var pointData = {
latitude:req.body.latitude,
longitude:req.body.longitude
};
var loc = req.body.coordinates;
organization.name = req.body.name;
organization.address = req.body.address;
organization.latitude = req.body.latitude;
organization.longitude = req.body.longitude;
organization.point = [pointData.longitude,pointData.latitude];
organization.territory = {
coordinates: loc,
type: req.body.type
};
//save the new organization and check for errors
organization.save(function (err, organization) {
if (err)
return res.send(err)
res.json({
message: 'The Organization was successfully created!',
Organization: organization
});
});
});
答案 0 :(得分:0)
我在github上创建了一个存储库,以举例说明如何在NodeJS驱动的后端存储多边形和圆形坐标。 我可以告诉你哪里出了问题,但这可能无法解决你的问题,你将被另一个问题所困扰。 对于初学者来说 1.您的架构声明是错误的。它应该有一个类型和一个坐标元素 2.在排序坐标时,首先是经度,然后是纬度。这在文档中提到
有关详细信息,您可以前往repo运行代码并自行了解。如果你仍然发现任何问题。请通过GitHub或在此告诉我。