当几何体几乎不相交时,栅格ST_Clip失败

时间:2017-03-25 21:15:25

标签: postgis postgis-raster

我正在尝试使用postgis执行空间统计。有一段时间我有ST_Clip粉碎并停止查询。我认为当多边形几乎与光栅相交时会发生这种情况。请参阅下面的示例。

SELECT ST_Summary(
        ST_Clip(
                ST_AddBand(
                        ST_MakeEmptyRaster(16, 16, 0, 0, 1, 1, 0, 0),
                        ARRAY[
                        ROW(1, '8BUI'::text, 0, 255),
                        ROW(2, '8BUI'::text, 0, 255),
                        ROW(3, '8BUI'::text, 0, 255)
                        ]::addbandarg[]
                )
                -- this works
                --, ST_GeomFromText('POLYGON((15.999999 15.999999, 15.999999 17, 17 17, 17 15.999999, 15.999999 15.999999))')
                -- this fails
                , ST_GeomFromText('POLYGON((15.9999999 15.9999999, 15.9999999 17, 17 17, 17 15.9999999, 15.9999999 15.9999999))')
        )
);

通过上述查询,我​​收到了以下错误。

psql:demo_clip_fail_barelyintersects.sql:16: ERROR:  RASTER_clip: Could not get band from working raster 
CONTEXT:  PL/pgSQL function st_clip(raster,integer[],geometry,double precision[],boolean) line 8 at RETURN

我希望没有返回记录,或者某种空栅格。在我的生产代码中,ST_Intersects(r.rast, p.geom)在多边形表和栅格之间找到了几何/栅格对。我想过为光栅制作边界框的一种方法,它比光栅的范围略小,但这很难看......

我的postgres和postgis版本是

  • x86_64-pc-linux-gnu上的PostgreSQL 9.6.1,由gcc(GCC)4.9.1编译, 64位
  • POSTGIS =“2.3.1 r15264”GEOS =“3.6.0-CAPI-1.10.0 r0”PROJ =“Rel。 4。9。3,2016年8月15日“GDAL =”GDAL 2.1.2,发布20 16/10/24“LIBXML =”2.9.4“LIBJSON =”0.12.1“RASTER

谢谢!

1 个答案:

答案 0 :(得分:1)

我的暂定解决方案,用begin / exception / end块包装,让异常部分返回空栅格。性能受损(〜两次)。它会造成假阴性,但不确定要寻找什么......

public IQueryable<Api.Client> Get() {
    return Repositories.Clients.Query().ProjectTo<Api.Client>(mapper.ConfigurationProvider);
}