如何使用activerecord-postgis-adapter处理ruby中的简单地理空间查询(距离)?

时间:2015-05-04 13:33:04

标签: rails-activerecord postgis

我在csv文件中有很多lat / lon点,我创建了一个在4326投影中有一个点的表(表格邮政编码,字段位置)

我正在构建这样的数据: -

factory = ::RGeo::Cartesian.preferred_factory(:has_z_coordinate => false)
p  = factory.point(data_hash[:latitude], data_hash[:longitude])

并将p存储在位置字段中。

然后问题是我想找到给定点的“近”记录。 我见过一些有希望的代码: -

https://github.com/rgeo/activerecord-postgis-adapter/blob/master/test/spatial_queries_test.rb

所以我写了以下内容: -

factory = ::RGeo::Cartesian.preferred_factory(:has_z_coordinate => false)
p  = factory.point(53.7492, 1.6023)
res = Postcode.where(Postcode.arel_table[:location].st_distance(p).lt(1000));

res.each do |single|
  puts single.postcode
end

但是我得到了异常(不支持:RGeo :: Cartesian :: PointImpl)

我认为我需要做一些转换或其他什么,任何指针都赞赏!

1 个答案:

答案 0 :(得分:0)

我认为您的问题在于您使用的工厂。尝试从球形工厂生成点:

p = RGeo::Geographic.spherical_factory(srid: 4326).point(53.7492, 1.6023)

同时检查rails日志以查看输出查询并在PG中手动运行。确保查询运行没有问题。