检查2个多边形是否在红宝石中重叠

时间:2016-01-17 00:09:42

标签: ruby geolocation geospatial rgeo

我正在寻找一种方法来检查2个多边形(一组纬度/经度坐标)是否与红宝石重叠。因此,例如,如果我有美国积分和加州积分,我应该能够说它们重叠。

我研究了rgeo,但显然它需要一些只有linux的二进制文件才能让它工作,我正在寻找一个跨平台的解决方案。

例如,让我说我有两个看起来像的多边形:

p1 = [[30, 30], [30, 40], [40, 40], [40, 30], [30, 30]]
p2 = [[35, 35], [35, 45], [45, 45], [45, 35], [35, 35]]

如何在红宝石中显示它们重叠?

1 个答案:

答案 0 :(得分:2)

使用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

经过测试。它的工作原理