3

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]]

ruby で重複していることをどのように示すことができますか?

4

1 に答える 1

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

これをテストしました。できます

于 2016-01-20T20:29:31.070 に答える