【问题标题】:PostGIS SQL query and invalid geometriesPostGIS SQL 查询和无效几何
【发布时间】:2011-04-27 09:29:48
【问题描述】:

我有一个用 osm2pgsql 导入的 postgis 数据库。显然有很多无效的几何图形会导致一些空间操作出错。

geometry.buffer(x) 似乎可以解决这个问题,但是这个操作需要很多时间。因此,我只想将它应用于无效的几何图形:

select * from
    (
        select *
        from polygons
        WHERE NOT IsValid(polygons.geom)
    ) as tbl
where ST_Intersects(
    ST_Buffer(tbl.geom, 0.001),
    GeomFromText('POLYGON ((XY))', 4326)
);

但是这个查询似乎将缓冲区操作应用于表中的所有条目。您如何将此操作仅限于无效的几何图形?

提前谢谢你!

【问题讨论】:

    标签: sql postgis


    【解决方案1】:

    PostgreSQL 优化器在优化之前扩展内联视图,因此不能保证谓词不会被推入或推出视图。

    另一方面,CTE 总是物化的,所以这个查询:

    WITH    tbl AS
            (
            SELECT  *
            FROM    polygons
            WHERE   NOT IsValid(polygons.geom)
            )
    SELECT  *
    FROM    tbl
    WHERE   ST_Intersects
                    (
                    ST_Buffer(tbl.geom, 0.001),
                    GeomFromText('POLYGON ((XY))', 4326)
                    );
    

    只会将ST_buffer 应用于无效的几何图形。

    但是,这对我来说似乎不是正确的解决方案。请提供导入产生的“无效几何”示例吗?

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      相关资源
      最近更新 更多