【问题标题】:Running PostGIS Commands on Clustered DB在集群数据库上运行 PostGIS 命令
【发布时间】:2014-04-06 19:39:33
【问题描述】:

在两个节点上的集群数据库(stado)中使用 Postgresql,我想测试这个查询:

select id,position,timestamp from table t1 WHERE id!=0 AND ST_Intersects ((Select ST_Buffer_Meters(ST_SetSRID(ST_MakePoint(61.4019,15.218205), 4326) ,1160006)),position) AND timestamp Between '2013-10-01' and '2013-12-30';

当我在命令行或 psql(在协调器上)运行它时,我得到这个错误:

Encountered ")" at line 1, column 171.

虽然其他 sql 命令(插入、更新、选择...等)工作正常。表格中的几何列似乎还可以,所以我认为安装 PostGIS 没有问题。

【问题讨论】:

  • 这真的是我抓住了救命稻草,但我看到流氓空间在调用函数时会导致问题:ST_Intersects (
  • 我应该怎么做才能解决它?
  • 尝试删除ST_Intersects(之间的空格?
  • 谢谢,只是试了一下。没用。
  • ST_Buffer_Meters 不是官方的函数,虽然看起来是由其他 Postgis 函数组成的。我建议使用 ST_Transform 将纬度/经度转换为您使用的任何本地投影坐标系,然后您可以以米为单位进行距离。并且不要发布带有非标准功能的示例:-)

标签: sql database postgresql postgis stado


【解决方案1】:

一般来说,不要缓冲几何图形来进行邻近搜索。通过上述尝试,它仅适用于一个点几何,但在其他查询中,您可能会缓冲表的所有几何,这会使查询变得昂贵,因为它需要创建新的几何并且无法使用索引。 请改用ST_DWithin

带有geometry 类型的ST_DWithin 将使用与空间参考系统相同的距离单位。所以对于 SRID=4326,这是以度为单位的,这在任何方面都没有帮助。但是,如果positiongeography 类型,ST_DWithin 将使用以米为单位的距离参数,这更有用。所以 WHERE 过滤器看起来像:

WHERE id <> 0
  AND ST_DWithin(ST_MakePoint(61.4019, 15.218205)::geography, position, 1160006)
...

这将对距离查询位置 1160006 m 或 1160 km 的位置进行邻近搜索(顺便说一下,如果您当时想的是瑞典,那么在瑞典不是)。如果positiongeometry 类型,您可以考虑更改类型,或执行转换 (position::geography) 或该转换操作的索引。

【讨论】:

    【解决方案2】:

    我在 PostGis 手册中找不到函数ST_Buffer_Meters(),只有ST_Buffer()

    无论哪种方式,我都无法想象任何函数都需要子查询作为参数。试试吧:

    SELECT id,position,timestamp
    FROM   table t1
    WHERE  id <> 0
    AND    ST_Intersects(ST_Buffer_Meters(ST_SetSRID(
                         ST_MakePoint(61.4019, 15.218205), 4326), 1160006), position)
    AND    timestamp BETWEEN '2013-10-01' AND '2013-12-30';
    

    并且不要使用timestamp 作为标识符。它是一个基本类型名称和一个reserved word in SQL

    【讨论】:

    • 事实证明 ST_Buffer_Meters 是某人创建的函数,请参阅:gistutor.com/postgresqlpostgis/…> 这似乎有点毫无意义,当您需要做的就是使用 ST_Transform 转换为投影然后你可以使用米的坐标系。
    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2019-09-30
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多