我正在尝试使用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版本是
谢谢!
我的暂定解决方案是用开始/异常/结束块包裹,让异常部分返回空栅格。性能受到影响(~两次)。它会产生假阴性,但不确定要寻找什么......
-- function to work around bug in st_clip (fails when polygon barely intersects with raster)
-- not sure how much damage this has on performance
create or replace function st_clip_fuzzy(
rast raster, nband integer[],
geom geometry,
nodataval double precision[] DEFAULT NULL, crop boolean DEFAULT TRUE
)
returns raster
as $$
declare
rec record;
g geometry;
begin
return st_clip($1, $2, $3, $4, $5);
exception
when others then
select st_intersection(st_envelope(rast), geom) into g;
raise warning 'st_clip_fuzzy: intersection %', st_astext(g);
raise warning 'st_clip_fuzzy: area intersection %', st_area(g);
raise warning 'st_clip_fuzzy: area pixel %', abs(ST_ScaleX(rast) * ST_ScaleY(rast));
raise warning 'st_clip_fuzzy: area ratio %', st_area(g) / abs(ST_ScaleX(rast) * ST_ScaleY(rast));
return ST_MakeEmptyRaster(0, 0, ST_UpperLeftX(rast), ST_UpperLeftY(rast), ST_ScaleX(rast), ST_ScaleY(rast), ST_SkewX(rast), ST_SkewY(rast), ST_SRID(rast));
end;
$$ language 'plpgsql' immutable;
CREATE OR REPLACE FUNCTION st_clip_fuzzy(
rast raster, nband integer,
geom geometry,
nodataval double precision, crop boolean DEFAULT TRUE
)
-- four more interfaces with different set of arguments
用Pixi绘制几何图形 使用图片纹理是制作精灵最有效的方式之一,但是Pixi也提供了自己低级的绘画工具。你可以使用它们来创造矩形、线段、复杂的多边形以及文本。并且它使用和Canvas Drawing API几乎一致的api,所以如果你熟悉canvas的话,那么几乎没有什么新东西需要学习。当然另一个巨大的优势在于,不同于Canvas的绘画api,你使用Pixi绘制的图形是通过WebGL在GPU上渲染
在此处输入图像描述 grafico(){const bgColor={id:'bgColor', beforeDraw:(图表,步骤,选项)= }
我在一个板上有几个对象,我想通过坐标获取这些对象的索引。我尝试过制作一个处理程序,并使用与相结合,但没有成功。这些方法给了我不同的坐标,无法匹配它们。 我是否应该用光标的坐标画一个矩形,并使用< code > getBoundInParent()。intersects方法? 有什么建议吗?
下面的代码在我的图像上生成两个框。我正计划进一步分析这些框内的像素。 在下面的例子中,在红色方块的情况下,我不想继续下去,因为它的右上角有黑色像素。而我想继续在绿色方块的情况下,因为它没有一个黑色像素沿着它的边缘。
我在这个表中存储了一些几何图形(140k) CREATE TABLE缓冲区(pk整数NOT NULL,geom几何体(MultiPolygon,4326),) 我想(如果可能的话)创建一个新表(buffersmerged),该表将包含生成的几何图形,其中预览在彼此相交时进行分组。 我预期的输出,就像在QGIS中使用缓冲区工具检查“溶解缓冲区结果”时一样,但我希望,而不仅仅是一个大的独特几何作为输出
本教程将向您介绍提供使用Primitive API的几何图形和外观系统。这是一个高级主题,用于扩展具有自定义网格、形状、体积和外观的CesiumJS,而不是面向通用的Cesium用户。如果您有兴趣学习如何在地球上绘制各种形状和体积,请查看创建实体教程。 CesiumJS可以使用实体(如多边形和椭圆体)创建不同的几何类型。例如,将以下代码复制并粘贴到Hello World Sandcastle示例中