흥미 문제.
이
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
거기에 문제가 다각형 또는 다각형의 쌍을, 그래서 그들을 찾기 위해 시도 할 수 있습니다
당신은 많은 폴리곤을 할 수있는 기회 (총 34)는 디버깅이 쉽게있다. 노조가 nil 일 경우 인덱스와 검사의 모든 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 선을 추천 모습이 아닌 빈 다각형이다.
1을 유지하고 11과 12를 제거하는 것으로는 충분하지 않습니다. 모든 다각형의 결합은 여전히 없습니다.
여전히 선 또는 매우 평평 다각형이있을 수 있습니다 :
sum = polygons.inject(&:union)
p sum.area - multi_poly_1.area - multi_poly_2.area
#=> -5.800481622797449e-18
이 영역의 차이가 큰되지 않습니다 : 이제 9 다각형이 사라 것을
polygons.reject!{|poly| poly.area < 1E-20}
p polygons.size
# 25
, 그것은 노동 조합을 계산하는 것이 가능 , 삭제 된 교차 폴리곤 또는 (아주) 작은 폴리곤에서 나올 수 있습니다.
화려한 답변! 그것은 일했다 :) – babasbot
그것을 듣기 좋게. 버그 보고서를 작성할 수 있습니다. 두 피연산자 모두 nil 경우 유니온 경우에만 nil 수 있습니다 생각합니다. 선, 편평한 다각형 또는 자체 교차 다각형은 고려하기가 어려울 수 있지만 조합은 여전히 유효하지 않습니다. –
이 문제는 https://github.com/rgeo/rgeo/issues/158에서 만들었습니다. – babasbot