turf.js 可以用来查找和修复错误的 geojson 几何图形吗?

Can turf.js be used to find and repair bad geojson geometry?

方法: 我目前正在使用 turf.js 作为 broader mapping project 的一部分进行地理处理;我的工作流程是这样的:

  1. 拉取整个县的人口普查区域的 geojson
  2. 从县域的 OSM 中提取水多边形的 geojson 瓦片
  3. Recursively pull the tracts and each water tile into a node script
  4. 在脚本中,turf.merge the water tile变成一个多边形
  5. 在脚本中,recursively turf.intersect each tract polygon对水多边形
  6. 在脚本中,turf.erase the water area from the tract polygon如果相交
  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 文件中,脚本也会导致格式错误的 geojson turf.erase 它直接针对tracts文件。另一个复杂的问题是,如果我将水瓦片合并到一个文件中,然后将其移交给 QGIS 并手动 运行 a "difference" 地理处理,整个过程就可以正常工作;没有错误,有效的输出几何。

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

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

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