2017-10-20 70 views
0

我需要知道一個點是否在一個多邊形或在我的rails應用程序,以便我想要使用rgeo寶石。點在多邊形rgeo

要安裝此GEME我folowed上rgeo git

的說明,然後我敢肯定,GEOS和Proj4被正確安裝。

enter image description here

我還添加了這種寶石「FFI-GEOS」,沒有特別的原因,只是下面

最後我做了軌控制檯上的測試,以檢查是否rgeo文檔工作

  1. poly_text =「POLYGON ...」(很多觀點,我知道第一點和最後一個是相同的,否則我認爲這個瓦特工作,因爲需要是封閉的多邊形)
  2. factory = RGeo ::鈣rtesian :: Factory(我使用的是笛卡爾工廠,因爲根據我的調查,如果我使用球形工件,此工作)
  3. poly = factory.new().parse_wkt(poly_text)
  4. point1 = factory 。。新的()parse_wkt( 「POINT(0)」)(這點不屬於多邊形)
  5. poly.within(點1)
  6. 結果:RGeo ::錯誤:: UnsupportedOperation:幾何方法#contains?沒有定義的。 從(IRB):26

在這裏你可以看到輸出: enter image description here

更多信息: 軌版本5.1.2 IDE C9 操作系統Ubuntu的

,如果有人有一個解決方案,在此先感謝,我也打開使用另一個寶石,或其他,我的目標是解決我的點/多邊形問題。

回答

1

您可以使用Geokit,只需在您的Gemfile中包含gem 'geokit'即可。

然後您將需要創建一個點陣列,其中每個點是一個Geokit::LatLng

例如:

points = [] 
points << Geokit::LatLng.new("-34.8922513", "-56.1468951") 
points << Geokit::LatLng.new("-34.905204", "-56.1848322") 
points << Geokit::LatLng.new("-34.9091105", "-56.170756") 
polygon = Geokit::Polygon.new(points) 
polygon.contains? polygon.centroid #this should return true 

不要擔心第一點是否是一樣的。最後,new已經照顧的那個,因爲它是在源代碼解釋here

+1

嗨Moondaisy,最後我用同一顆寶石中的另一家工廠來解決這個問題,無論如何,在我的產品環境中使用Rgeo非常困難(bluemix),這就是爲什麼最終的靈魂是postgress擴展名爲postgis。希望這可以幫助別人:) –

0

我在安裝GEOS之前安裝了gem。卸載,然後再次安裝rgeo gem工作。