我正在寻找一种方法来检查 ruby 中的 2 个多边形(纬度/纬度坐标集)是否重叠。因此,例如,如果我对美国和加利福尼亚都有积分,我应该能够分辨出它们重叠。
我研究了 rgeo,但显然它需要一些仅限 Linux 的二进制文件才能让它工作,我正在寻找一个跨平台的解决方案。
例如,假设我有 2 个多边形,如下所示:
p1 = [[30, 30], [30, 40], [40, 40], [40, 30], [30, 30]]
p2 = [[35, 35], [35, 45], [45, 45], [45, 35], [35, 35]]
如何证明它们在红宝石中重叠?
使用 rgeo,它看起来像这样...
注意:我只是为此使用我的局部直线投影,SRID:3361,应该可以正常工作。单位以英尺为单位,可以说是。但基本上只是一个笛卡尔网格CRS(坐标参考系)
require 'rgeo'
f = RGeo::Geos.factory(:srid => 3361)
p1 = [[30, 30], [30, 40], [40, 40], [40, 30], [30, 30]]
p2 = [[35, 35], [35, 45], [45, 45], [45, 35], [35, 35]]
#first you have to build the polygons, its a 3 step process. array of points --> linear ring --> polygon
polygons = []
[p1, p2].each do |pointset|
points = []
pointset.each do |x, y|
points << f.point(x,y)
end
polygons << f.polygon(f.linear_ring(points))
end
#then you'd just use rgeo's methods to do the work
polygons[0].overlaps?(polygons[1])
#=> true
测试过这个。它有效