5

方法:我目前正在使用 turf.js 进行地理处理,作为更广泛的制图项目的一部分;我的工作流程如下所示:

  1. 拉取整个县的人口普查区的 geojson
  2. 从 OSM 为县区拉取水多边形的 geojson 瓷砖
  3. 递归地将大片和每个水瓦拉入节点脚本
  4. 在脚本中,turf.merge水平铺成单个多面体
  5. 在脚本中,递归turf.intersect每个区域多边形与水多边形
  6. 在脚本中,turf.erase区域多边形中的水域(如果相交)
  7. 将被水擦除的大片倾倒到文件中

问题:当我的流程在第 3 步中遍历每个水瓦时,它会碰到一个特定的瓦并开始抛出此错误:

/Users/wboykinm/github/tribes/processing/water/node_modules/turf/node_modules/turf-intersect/index.js:45
  if(poly2.type === 'Feature') geom2 = poly2.geometry;
          ^
TypeError: Cannot read property 'type' of null
    at Object.module.exports [as intersect] (/Users/wboykinm/github/tribes/processing/water/node_modules/turf/node_modules/turf-intersect/index.js:45:11)
at Object.<anonymous> (/Users/wboykinm/github/tribes/processing/water/piranha.js:26:14)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3

. . . 继续所有后续迭代。一旦发生错误,tracts geojson 文件就会出现格式错误,并且不会在任何查看器中加载。

最令人困惑的是,仅当我通过 turf 脚本按顺序运行所有图块时才会出现此错误。当我只运行有问题的磁贴时,脚本会成功。如果我将所有水瓦合并到一个 geojson 文件中,turf.erase并且直接针对 tracts 文件,该脚本还会导致格式错误的 geojson。另一个复杂之处是,如果我将水瓦合并到一个文件中,然后将其移交给 QGIS 并手动运行“差异”地理处理,则整个过程都可以正常工作;没有错误,有效的输出几何。

所有迹象都指向无效几何的问题,可能与瓷砖边界或我合并水多边形的方式有关。如何使用手头的工具 (turf.js) 找到错误的几何形状并修复它?

4

1 回答 1

3

根据错误,问题似乎在于 poly2 不是一个特征(因为它没有类型属性)。忽略这一点,有时使用草皮修复不良几何形状的一种方法是使用 0 的数量进行缓冲区。你可以试试turf.buffer(badgeometry, 0)。这在过去为我修复了糟糕的几何形状。

您可能会尝试的另一件事是在导致问题的磁贴在过程中中断之前记录它,以查看您是否可以发现任何明显错误的东西。您还可以尝试查看由于某种原因您期望成为特征的数据是 A. 特征集合还是 B. 编码的 geojson 特征。

于 2016-11-23T13:26:05.400 回答