使用 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 多边形内?

在 Google Maps API v3 中缩放到 geojson 多边形边界

使用jquery在geojson文件中查找多边形中的点

Mongoose 查询返回带有空数组的嵌套文档