2016-12-30 19 views

回答

2

有趣的問題。

你有機會,有許多多邊形(總共34),這使得它更容易調試:

multi_poly_1 = RGeo::Geos.factory(srid: 4326).parse_wkt(wkt_1) 
multi_poly_2 = RGeo::Geos.factory(srid: 4326).parse_wkt(wkt_2) 

polygons = multi_poly_1.each.to_a + multi_poly_2.each.to_a 

有可能是有問題的多邊形或對多邊形的,所以讓我們嘗試找到他們。這種過度指標和檢查的每一個combination代碼重複。如果工會是零:

(0...polygons.size).to_a.combination(2).each do |i1, i2| 
    if polygons[i1] + polygons[i2] == nil then 
    p [i1, i2] 
    end 
end 

它返回

# [1, 11] 
# [1, 12] 

1是一個非空多邊形,11和12的樣子線。

保留1並刪除11和12是不夠的:所有多邊形的並集仍然爲零。

有可能仍然是線或非常平整的多邊形:

polygons.reject!{|poly| poly.area < 1E-20} 
p polygons.size 
# 25 

現在9個多邊形都消失了,這是可以計算的結合:

sum = polygons.inject(&:union) 
p sum.area - multi_poly_1.area - multi_poly_2.area 
#=> -5.800481622797449e-18 

的面積差異不大並且可能來自相交的多邊形或已刪除的(非常)小的多邊形。

+0

輝煌答案!它'工作:) – babasbot

+0

很高興聽到它。你可以寫一個錯誤報告。如果兩個操作數都是零,我認爲工會只能是零。線條,平面多邊形或自交多邊形可能更難以考慮,它們的聯合仍然不應該爲零。 –

+0

我創建了這個問題https://github.com/rgeo/rgeo/issues/158 – babasbot

相關問題