turf.js 可以用来查找和修复坏的 geojson 几何体吗?

Bil*_*ris 5 javascript geojson node.js turfjs

方法:我目前正在使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dyl*_*ton 3

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

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