我将RoR与PostGIS一起使用来存储位置数据。
我正在尝试使用圆(例如半径为中心的点)存储估算位置。

我已经尝试过类似的方法,但是不起作用:

@location = Location.new(:place_id => place.id,
                         :circle => %{ST_Buffer(ST_MakePoint(#{latitude}, #{longitude})::geography, #{accuracy})})

我也尝试过使用RGeo,它在工厂使用,但不确定如何正确使用它。

任何帮助将不胜感激。
谢谢。

编辑1:
我取得了一些进展。
factory = RGeo::Cartesian.factory
center_point = factory.point(latitude, longitude)
circle = center_point.buffer(accuracy)

@location = Location.new(:place_id => place.id,
                         :circle => circle)

但是-现在它引发以下异常:
can't cast RGeo::Cartesian::Polygon Impl to string

再次,任何帮助将不胜感激。

最佳答案

看来circle表中名为locations的列是文本列,而不是几何列。您的架构是什么样的?

您可能还需要设置您的SRID。

circle = RGeo::Cartesian.factory.point(0, 0).buffer(20)
@location = Location.new(:place_id => place.id, :circle => circle)
@locaiton.save

另一个可能也是更好的选择是仅存储准确的位置,并查询具有一定距离的位置。您可以使用距离运算符(http://postgis.net/docs/manual-2.1/geometry_distance_centroid.html)或重叠运算符(http://postgis.net/docs/manual-2.1/geometry_overlaps.html)。

关于ruby-on-rails - Ruby on Rails PostGIS-将多边形记录插入数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22423655/

10-15 07:21