2017-10-20 72 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工作。