我在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)
我认为我需要做一些转换或其他什么,任何指针都赞赏!
答案 0 :(得分:0)
我认为您的问题在于您使用的工厂。尝试从球形工厂生成点:
p = RGeo::Geographic.spherical_factory(srid: 4326).point(53.7492, 1.6023)
同时检查rails日志以查看输出查询并在PG中手动运行。确保查询运行没有问题。