首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Turf.js合并查找GeoJSON中的特性

Turf.js合并查找GeoJSON中的特性
EN

Stack Overflow用户
提问于 2016-03-10 07:03:58
回答 1查看 2.2K关注 0票数 2

我正在用Node.js构建一个地图应用程序。我们有大约40,000个多边形显示在地图上,所以我试图通过在可能的情况下合并它们来提高性能。Turf.js有一个类似于票据的合并函数。不过,我还没能让它起作用。

这是我试图在我的控制器中使用草坪的代码。

代码语言:javascript
复制
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var turf = require('turf');
var fs = require('fs');

exports.show = function(req, res) {
  res.render('map', {
    title: 'Map'
  });
};


exports.postSearch = function(req, res) {

  // Bunch of query stuff goes into array below, (omitted for post)

  mongoose.model('Claim').find({
    $and:array
    }, function(err, polygons){
        // fs.writeFile('poly.txt', polygons);
        var test = turf.merge(polygons);
        res.json(test);
    });
};

我将这个fs.writeFile放在那里,以获得从mongodb返回的geojson的示例。我得到的是:

代码语言:javascript
复制
{
  properties: {
    TTLTPCD: 'CL',
    RNHCTRS: 389,
    TNRTPCD: 'C'
  },
  geometry: {
    coordinates: [
      [Object]
    ],
    type: 'Polygon'
  },
  type: 'Feature',
  _id: '56d2a2061c601e547e1099ee'
}, {
  properties: {
    TTLTPCD: 'CS',
    RNHCTRS: 261,
    TNRTPCD: 'C'
  },
  geometry: {
    coordinates: [
      [Object]
    ],
    type: 'Polygon'
  },
  type: 'Feature',
  _id: '56d2a2071c601e547e109d37'
},
// this repeats a couple hundred times on my test query.

我得到了堆栈跟踪,但这对我来说毫无意义:

代码语言:javascript
复制
PROJECT_FOLDER/node_modules/turf/node_modules/turf-merge/index.js:55
  var merged = clone(polygons.features[0]),
                                      ^

TypeError: Cannot read property '0' of undefined
    at Object.module.exports [as merge] (/media/ng/DATA/LighthouseLabs/ClaimMaps/nodeMaps/MapEmGems/node_modules/turf/node_modules/turf-merge/index.js:55:39)
    at Query.<anonymous> (/media/ng/DATA/LighthouseLabs/ClaimMaps/nodeMaps/MapEmGems/controllers/map.js:75:14)
    at /media/ng/DATA/LighthouseLabs/ClaimMaps/nodeMaps/MapEmGems/node_modules/kareem/index.js:177:19
    at /media/ng/DATA/LighthouseLabs/ClaimMaps/nodeMaps/MapEmGems/node_modules/kareem/index.js:109:16
    at doNTCallback0 (node.js:430:9)
    at process._tickCallback (node.js:359:13)

草皮似乎在寻找一个特色钥匙,但却没有。有人有办法解决这个问题吗?

######################编辑在ghybs回答后

好吧,ghybs解决了geojson格式化问题。我将控制器的最后一部分改为:

代码语言:javascript
复制
  mongoose.model('Claim').find({
    $and:array
    }, function(err, polygons){
        polygons = {
          type: "FeatureCollection",
          features: [polygons] };
        fs.writeFile('poly.txt', polygons);
        var test = turf.merge(polygons);
        fs.writeFile('test.txt', test);
        res.json(test);
    });
};

我放了第二个fs.writeFile,看看turf.merge返回了什么。原始的geojson不是一个数组,所以我添加了[]的。没有更多的草皮错误。我的地图无法理解输出。

现在,poly.txt给了我以下内容:

代码语言:javascript
复制
[object Object]

test.txt包含以下内容:

代码语言:javascript
复制
{ properties: null,
  geometry: undefined,
  type: 'Feature',
  _id: '56d2a2061c601e547e1099ee',
  __v: undefined },{ properties: null,
  geometry: undefined,
  type: 'Feature',
  _id: '56d2a2071c601e547e109d37',
  __v: undefined },
// This repeats 336 times

所以我想我离你更近了一步。有什么想法吗?该地图与poly.txt中的原始数据运行良好。我想得到同样的东西但是合并了。

EN

回答 1

Stack Overflow用户

发布于 2016-03-10 07:09:57

来自polygons调试的fs.writeFile()对象不符合GeoJSON。草皮需要一个符合GeoJSON的FeatureCollection,它必须有一个features成员。

还请参阅草皮归并法,它为您提供了一个GeoJSON兼容FeatureCollection应该是什么样子的代码示例。

因此,看起来您应该简单地将polygons对象包装在FeatureCollection中,以使其兼容:

代码语言:javascript
复制
polygons = {
    type: "FeatureCollection",
    features: polygons // assuming polygons is an array
};

在问题之后进行编辑

如果您的初始polygons确实在几何坐标中输出"[Object]“,而不是一个坐标数组,那么草坪将无法理解您的多边形几何图形。

但是如果你说它在尝试合并之前是有效的,那么这个问题可能是另外一回事。

你怎么知道你的polygons不是数组?你确定做[polygons]是正确的解决方案吗?

对于下一期,请打开另一个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35909731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档