我正在尝试使用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版本是
谢谢!
答案 0 :(得分:1)
我的暂定解决方案,用begin / exception / end块包装,让异常部分返回空栅格。性能受损(〜两次)。它会造成假阴性,但不确定要寻找什么......
public IQueryable<Api.Client> Get() {
return Repositories.Clients.Query().ProjectTo<Api.Client>(mapper.ConfigurationProvider);
}