可以使用turf.js来查找和修复不良的几何几何?

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

  1. 把整个县的人口普查区的地理拉
  2. 从县域拉动OSM水多边形瓷砖
  3. recursion地拉大片和每个水瓦片成节点脚本
  4. 在脚本中, 将水瓷砖合并成单个turf.merge
  5. 在该脚本中, recursion地turf.intersect每个多边形区域与水面多边形进行turf.intersect
  6. 在脚本中,如果相交, turf.erase多边形区域中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 

。 。 。 继续所有后续的迭代。 只要发生错误,地块geojson文件格式不正确,不会加载任何查看器。

  • 这是input的tracts文件
  • 这是不断抛出错误的OSM水砖

最令人困惑的是这个错误只有当我通过草皮脚本依次运行所有的瓷砖时才会出现这个错误。 当我只运行冒犯的瓦片时,脚本就成功了。 如果我将所有的水分块合并到一个单一的geojson文件中,并且turf.erase其直接对照tracts文件, turf.erase导致格式错误。 另一个复杂的问题是,如果我将水砖合并成一个文件,然后将其交给QGIS并手动运行“差异”地理处理,则整个过程可以正常工作。 没有错误,有效的输出几何。

所有的迹象都指向无效的几何问题,可能与瓦片边界或我合并水多边形的方式有关。 如何find不好的几何graphics并使用手头的工具(turf.js)修复它?

基于这个错误,看起来问题是poly2不是一个特征(因为它没有一个type属性)。 忽略这一点,有时用turf修正坏几何的一种方法是做一个数量为0的缓冲区。 你可以尝试turf.buffer(badgeometry, 0) 。 这对我来说已经修好了几何形状。

另一件你可能会尝试的事情是,在进程崩溃之前logging导致问题的磁贴,看看你是否可以发现任何明显的错误。 您还可以尝试查看,如果出于某种原因,您希望成为function的数据是A.一个function集合,或B.一个编码的几何信息function。