如何使用ActivereCord-Postgis-Adapter在Ruby中处理简单的地理空间查询(距离)



我在CSV文件中有很多LAT/LON点,我创建了一个表格,该表在4326投影(表Postcode,field位置)

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

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)

我假设我需要进行一些转换或其他事情,任何指针都赞赏!

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

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

还要检查导轨日志以查看输出查询并在PG中手动运行。确保查询在没有问题的情况下运行。

最新更新