ruby-on-rails - 按最近的顺序排序-PostGIS,GeoRuby,spatial_adapter

标签 ruby-on-rails gis postgis

我正在尝试执行一个顺序查询,以查找最接近current_user的记录。

我知道两点之间的距离是:current_location.euclidean_distance(@record.position)
如何将其用于PostGIS(或active_record/spatial_adapter)查询?

最佳答案

要获得最接近的5:

SELECT * FROM your_table 
ORDER BY ST_Distance(your_table.geom, ST_Geomfromtext(your point as wkt)) 
limit 5;

如果您有一个庞大的数据集,并且知道您不想进行进一步搜索,例如说1 km,那么执行以下查询将更高效:
SELECT * FROM your_table 
WHERE ST_DWithin(your_table.geom, ST_Geomfromtext(your point as wkt, 1000)
ORDER BY ST_Distance(your_table.geom, ST_Geomfromtext(your point as wkt))  
limit 5;

/尼克斯

关于ruby-on-rails - 按最近的顺序排序-PostGIS,GeoRuby,spatial_adapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5111627/

相关文章:

postgresql - 从postgis中的一个点周围的点创建一个多边形

postgresql - 在 Qgis 或 Postgres 中合并不相邻的多边形

python - 选择部分颜色图绘制地形

mysql - MySQL 有聚合 ST_UNION() 吗?

ruby-on-rails - Ruby:修剪或替换前导数字

ruby-on-rails - Rails 5.2 + Trix + ActiveStorage

r - 计算多个多边形之间共享边界的长度

postgresql - 交换纯 PostgreSQL 多边形数据中的坐标

ruby-on-rails - 在 docker compose 上运行时无法连接到 Rails 应用程序中的数据库

ruby-on-rails - 嵌套属性 + 多重选择 : Couldn't find Collection with ID= ["1", "2", "3"] 对于 ID=? 的产品