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

时间:2014-10-01 18:20:29

标签: postgresql geospatial earthdistance

我正在使用Postgresql 9.3和iv安装的立方体和地球延伸扩展。

我试图关注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.

1 个答案:

答案 0 :(得分:6)

O.K,最后几个小时后我得到了它:)

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

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);