方法:我目前正在使用turf.js进行地理处理,作为broader mapping project的一部分;我的工作流程如下:
turf.merge
the water tile为单个多字形turf.intersect
each tract polygon针对水多面体turf.erase
the water area from the tract polygon如果它相交问题:当我的流程在步骤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文件就会格式错误,并且无法在任何查看器中加载。
最令人困惑的是,只有当我通过草皮脚本按顺序运行所有切片时才会出现此错误。 当我单独运行有问题的磁贴时,脚本会成功。如果我将所有水槽合并到一个geojson文件中并且turf.erase
直接针对它,那么该脚本也会导致格式错误的geojson tracts文件。另一个复杂因素是,如果我将水砖组合成一个文件,然后将其转移到QGIS并手动运行“差异”,整个过程就可以正常工作。 geoprocess;没有错误,有效的输出几何。
所有迹象都指向几何无效的问题,可能与瓷砖边界或我合并水多边形的方式有关。如何使用手头的工具(turf.js)找到坏的几何体并进行修复?
答案 0 :(得分:2)
根据错误,似乎问题是poly2不是一个特征(因为它没有类型属性)。忽略这一点,有时用草皮修复坏几何的一种方法是使用0作为量的缓冲区。您可以尝试turf.buffer(badgeometry, 0)
。这对我来说已经修复了不好的几何形状。
您可能尝试的另一件事是在进程中断之前记录导致问题的磁贴,看看是否可以发现任何明显错误的内容。您还可以尝试查看由于某种原因您希望成为要素的数据是A.功能集合,还是B.编码的geojson功能。