如何使用NodeJS和Mongoose将多边形坐标(GeoJSON)作为数组存储到MongoDB数据库中

时间:2016-08-03 11:38:01

标签: arrays mongodb mongoose geometry geojson

我正在尝试使用Mongoose将Polygon存储到我的MongoDB数据库中。我已经尝试过各种替代方案,但遗憾的是我无法弄明白。我发现了一种将坐标存储为String的方法,但不是geoJSON数组(Polygons) territory对象的organization属性应为polygon,并应存储在数组中。
我使用POSTMAN进行测试,下面是我对坐标的POST请求的屏幕截图:
  enter image description here

当我提交我的帖子请求时,我收到了此错误:

enter image description here
以下是对象如何存储在数据库中,如String而不是点数组
enter image description here
我在下面尝试了多个版本的代码,我得到了上面的回复,或者另外一个回复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 
            });
          });
     });

1 个答案:

答案 0 :(得分:0)

我在github上创建了一个存储库,以举例说明如何在NodeJS驱动的后端存储多边形和圆形坐标。 我可以告诉你哪里出了问题,但这可能无法解决你的问题,你将被另一个问题所困扰。 对于初学者来说 1.您的架构声明是错误的。它应该有一个类型和一个坐标元素 2.在排序坐标时,首先是经度,然后是纬度。这在文档中提到

有关详细信息,您可以前往repo运行代码并自行了解。如果你仍然发现任何问题。请通过GitHub或在此告诉我。