2016-04-06 19 views
2

方法:我目前使用turf.js進行地理處理,作爲broader mapping project的一部分;我的工作流程是這樣的:人口普查的可以使用turf.js來查找和修復不良的幾何幾何?

  1. 拉以GeoJSON爲全縣
  2. 水多邊形拉GeoJSON的瓷磚來自OSM全縣面積
  3. Recursively pull的大片,並且每個水魔方爲
  4. 在腳本中,turf.merge the water tile成一個單一的多面
  5. 在腳本中,recursively turf.intersect each tract polygon兌水MULTIPOLYGON
  6. 在SCR IPT,turf.erase the water area from the tract polygon如果它相交
  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 

。 。 。這繼續所有後續的迭代。只要發生錯誤,trao geojson文件格式不正確,不會在任何查看器中加載。

什麼是最令人費解的是,當我穿過草坪腳本按順序運行所有的瓷磚這個錯誤只發生。 當我只運行有問題的拼貼時,腳本就會成功。如果我將所有的水圖塊合併到一個單一的geojson文件中,並且它直接對着tracts文件,該腳本還會導致格式不正確的geojson。另外一個複雜的問題是,如果我將水磚合併到一個文件中,那麼整個過程都可以正常工作,然後將其交給QGIS並手動運行「差異」地理處理;沒有錯誤,有效的輸出幾何。

所有的跡象都指向無效幾何問題,可能與瓦片邊界或我合併水多邊形的方式有關。我怎樣才能找到不好的幾何圖形並使用手頭的工具(turf.js)來修復它?

+0

交叉發佈爲http://gis.stackexchange.com/q/188378/115 – PolyGeo

回答

2

基於這個錯誤,看來問題是poly2不是一個特徵(因爲它沒有type屬性)。忽略這一點,有時用草皮修復壞幾何的一種方法是用數量爲0的緩衝區。你可以嘗試turf.buffer(badgeometry, 0)。這在過去爲我確定了不好的幾何形狀。

另一件您可能會嘗試的事情是,在引起問題的磁盤碎片進入磁盤之前,查看是否可以發現任何明顯錯誤的磁盤。您也可以嘗試查看,如果由於某種原因,您希望成爲功能的數據是A.特徵集合或B.編碼的幾何特徵。

+1

這是賢者的建議 - 緩衝區已在其他情況下爲我工作,但不幸的不是這一個。老實說,我放棄了[走PostGIS路線](https:// github。com/wboykinm/redlines/blob/master/processing/water/piranha.sql#L29),這也解決了我遇到的一些內存限制問題。 我會將您的答案標記爲正確,因爲對於大多數遇到此問題的人來說,這是一個合理的解決方案。 –

相關問題