PostgreSQL:如何获得一定半径内的所有点

标签 postgresql geospatial earthdistance

我正在使用 Postgresql 9.3 并且我安装了 cube 和 earthdistance 扩展。

我正在尝试关注 this tutorial ,所以我有一个包含 4 个字段的简单事件表:id、name、lat、lng。

现在我正在尝试运行此查询,以获取 1 公里半径内的所有事件:

SELECT events.id, events.name FROM events WHERE earth_box(31.789225, 34.789612, 1000) @> ll_to_earth(events.lat, events.lng);

但我一直收到这个错误:

20:59:34 Kernel error: ERROR:  function earth_box(numeric, numeric, integer) does not exist
  HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

所以我用类型转换做了同样的事情:

  SELECT events.id, events.name FROM events WHERE earth_box(CAST(31.789225 AS float8), CAST(34.789612 AS float8), 1000) @> ll_to_earth(events.lat, events.lng);

我得到:

   21:16:17 Kernel error: ERROR:  function earth_box(double precision, double precision, integer) does not exist
                                                              ^
      HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

最佳答案

好的,几个小时后我终于明白了:)

显然我使用的教程已经过时,正确的语法是这样的:

SELECT events.id, events.name FROM events WHERE earth_box(ll_to_earth(31.789225,34.789612), 1000) @> ll_to_earth(events.lat, events.lng); 

关于PostgreSQL:如何获得一定半径内的所有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147954/

相关文章:

sql - PostgreSQL if 查询?

linux - 如何在 bash 脚本执行期间更改用户并继续使用新用户运行命令?

ruby-on-rails - 表 "x"上的更新或删除违反了表 "fk_rails_5a7b40847a"上的外键约束 "x"

sqlite - 基于纬度/经度查询附近兴趣点的 SQL 查询 - SQLite

Solr 距离过滤

java - 如何编写一个 Java 程序来计算地球上两点之间的距离?

sql - 如何为 sql select 生成序列号,为后代项目提供子编号?

r - 求多边形外接圆的半径

c++ - 查找地球坐标(纬度、经度)、距离(米)和方位(角度)

sql - 试图计算 PostgreSQL 中两个经纬度点之间的距离 - PostgreSQL earth_box(ll_to_earth) 返回值的单位是什么?