方法:我目前正在使用 turf.js 进行地理处理,作为更广泛的制图项目的一部分;我的工作流程如下所示:
- 拉取整个县的人口普查区的 geojson
- 从 OSM 为县区拉取水多边形的 geojson 瓷砖
- 递归地将大片和每个水瓦拉入节点脚本
- 在脚本中,
turf.merge
水平铺成单个多面体 - 在脚本中,递归
turf.intersect
每个区域多边形与水多边形 - 在脚本中,
turf.erase
区域多边形中的水域(如果相交) - 将被水擦除的大片倾倒到文件中
问题:当我的流程在第 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) 找到错误的几何形状并修复它?