GeoJSON在Node.js中使用Mongoose / Mongodb

我正在使用Node.js,Express,Mongo,Mongoose和Mapbox API构build一个带有MEEN堆栈的地图Web应用程序。

到目前为止,它是令人兴奋 我想要显示的数据是来自shapefile的多边形,这些多边形具有与它们相关的属性。

到目前为止,我已经设法将数据加载到Mongodb中,并使用模式configurationMongoose模型。 在节点应用程序中,我可以访问数据,但不会将其加载到地图API中。

我得到错误“未捕获的错误:无效的GeoJSON对象”。

从检查devtools控制台中的对象,我可以看到几何logging是空的。 我认为这是由于模式中的错误configuration。

下面是Mongodb命令行的一条logging。 我为了隐私目的删除了一些元素。 看起来如预期的那样:

{ "_id" : ObjectId("56c77259336aac299181a207"), "type" : "Feature", "properties" : { "TNRTPCD" : "P", "TNRSBTPCD" : "C", "PRCNTOWNER" : 100, "NTRTMSTMP" : "20140908161622", "TNRSBTPDSC" : "CLAIM", "TRMNTNTPDS" : null, "TAG_NUMBER" : null, "OBJECTID" : 40495, "NTRSRD" : "MTA_ONLINE", "NUM_OWNERS" : 1, "PROTECTED" : "N", "PDTSRD" : "MTA_ONLINE", "TNRTPDSCRP" : "Placer", "TNRNMBRD" : 1030842, "RVSNNMBR" : 0, "FCODE" : null, "TRMNTNDT" : null, "RNHCTRS" : 20.3496, "TTLTPCD" : "PCX" }, "geometry" : { "type" : "Polygon", "coordinates" : [ [ [ -121.88883540217063, 50.97489195799901, 0 ], [ -121.88883523174192, 50.97072525131302, 0 ], [ -121.8950854466247, 50.97072527980969, 0 ], [ -121.89508560169767, 50.97489198254216, 0 ], [ -121.88883540217063, 50.97489195799901, 0 ] ] ] } } 

以下是我的模型文件中的代码:

  //Claim Model var mongoose = require('mongoose'); var Schema = mongoose.Schema; // Schema Defined Here var claimSchema = new Schema({ gid: Number, tnrtpcd: String, ttltpdsc: String, tnrsbtpcd: String, prcntowner: Number, ntrtmstmp: String, tnrsbtpdsc: String, owner_name: String, trmntntpds: String, tag_number: String, objectid: Number, gdtdt: String, ntrsrd: String, claim_name: String, num_owners: Number, clientnum: Number, issue_date: String, protected: String, pdtsrd: String, pdttmstmp: String, tnrtpdscrp: String, tnrnmbrd: Number, rvsnnmbr: Number, fcode: String, trmntndt: String, rnhctrs: Number, ttltpcd: String, geometry: { type: [String], index: '2dsphere'} }, { collection : 'docs' }); mongoose.model('Claim', claimSchema); 

路由似乎在app.js工作,因为我能够访问数据。 这是我的视图文件中的代码的相关部分:

 script. L.mapbox.accessToken = 'pk.[ommited]'; //- var geojson = mongoose.model('Claim').find({'properties.CLIENTNUM': 278107}); var geojson = $.getJSON('/claims/nick',function(result){ return result; }); L.mapbox.map('map', 'mapbox.outdoors') .featureLayer.setGeoJSON(geojson); 

所以这里最大的问题是如何正确定义几何数据的模式? 假设这是我的问题。

看起来像“types”更多的混淆作为字段名称和“types”作为mongoose模式上的声明。

为了灵活地允许几个GeoJSONtypes,你基本上需要你的“几何”字段是:

 "geometry": { "type": { "type": String }, "coodinates": [] } 

你可以添加enum “点”,“多边形”等,如果你想,但一般松散的“坐标”作为数组[]匹配在这些情况下的规则。

一些search应该显示人们之前已经为此创build了“types”。

好吧,现在修好了。 感谢Blakes Seven的build议。

我按照Blakes Seven的build议改变了模式。 我还必须更改mapbox调用,以便从getJSONcallback中调用它。 看起来像这样:

 var geojson = $.getJSON('/claims/placer',function(result){ L.mapbox.map('map', 'mapbox.outdoors') .setView([49.72902, -121.43253], 12) .featureLayer.setGeoJSON(result); }); 

不,我可以在地图上显示查询的数据!

Interesting Posts