ruby – RGeo两个MultyPolygons的并集返回nil
发布时间:2020-12-16 21:07:08 所属栏目:百科 来源:网络整理
导读:我想从两个几何的并集创建一个新的MultiPolygon,但它返回nil. multipolygon_1 = RGeo::Geos.factory(srid: 4326).parse_wkt("MULTIPOLYGON ...")multipolygon_2 = RGeo::Geos.factory(srid: 4326).parse_wkt("MULTIPOLYGON ...")multipolygon_1 + multipolyg
我想从两个几何的并集创建一个新的MultiPolygon,但它返回nil.
multipolygon_1 = RGeo::Geos.factory(srid: 4326).parse_wkt("MULTIPOLYGON ...") multipolygon_2 = RGeo::Geos.factory(srid: 4326).parse_wkt("MULTIPOLYGON ...") multipolygon_1 + multipolygon_2 # => nil 可以在以下要点中找到重现此错误的MultiPolygons值: https://gist.github.com/babasbot/926ae326ff3eb4a79601d56288e82a5f 解决方法
有趣的问题.
您有机会拥有多个多边形(总共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索引并检查union是否为nil: (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 面积差异不大,可能来自交叉多边形或已删除的(非常)小多边形. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |