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

时间:2016-04-06 02:54:14

标签: javascript node.js geojson turfjs

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

  1. 拉动整个县的人口普查区域的geojson
  2. 从OSM为县区拉出水多边形的geojson瓷砖
  3. Recursively pull将大片和每个水瓦片放入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. 将用水擦除的小册子转储到档案
  8. 问题:当我的流程在步骤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)找到坏的几何体并进行修复?

1 个答案:

答案 0 :(得分:2)

根据错误,似乎问题是poly2不是一个特征(因为它没有类型属性)。忽略这一点,有时用草皮修复坏几何的一种方法是使用0作为量的缓冲区。您可以尝试turf.buffer(badgeometry, 0)。这对我来说已经修复了不好的几何形状。

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