【问题标题】:How to get closest geo position within radius?如何获得半径内最近的地理位置?
【发布时间】:2014-04-19 12:59:35
【问题描述】:

我正在使用 postgis 运行 rails 4 应用程序。 为了获得最近的点,我有以下 sql

 SELECT * FROM geo_name_cities 
 WHERE ST_DWithin(lonlat, ST_Geomfromtext('POINT(11.75292 47.42321)', 1000))
 ORDER BY ST_Distance(lonlat, ST_Geomfromtext('POINT(11.75292 47.42321)',1000))
 limit 5;

由于某种原因,我确实收到以下错误:

ERROR: function st_geomfromtext(unknown, integer) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add  
explicit type casts.
Character: 57

我看不出与 postgis 文档有什么不同

 ST_GeomFromText('POINT(-71.064544 42.28787)');

【问题讨论】:

  • 您的数据库是否在空间上启用,即CREATE EXTENSION postgis
  • 是的,但在另一个方案中
  • 这可能是问题所在。 show search_path 中的另一个架构是什么?
  • 在 rails 我有以下配置 schema_search_path: public,postgis 并且它正在工作,但不在 db 命令行上。现在你是对的,显示搜索路径没有显示 postgis 模式。我刚刚添加了 postgis 作为额外的搜索路径,但重新启动数据库后没有任何变化

标签: postgresql postgis


【解决方案1】:

如果 PostGIS 安装到不在 search_path 上的架构上(例如,在 postgis 中),则需要完整提供功能(例如,postgis.st_geomfromtext(...))或 search_path 需要要被更新。这可以在每个会话中完成:

SET search_path = postgis, public;

永久更改数据库的search_path

ALTER DATABASE my_database SET search_path = postgis, public;

或者对于用户:

ALTER USER postgres SET search_path = postgis, public;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 2014-04-28
    相关资源
    最近更新 更多