我在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中手动运行。确保查询在没有问题的情况下运行。