我有一个包含LineString几何的表(SRID = 4326)。鉴于这条线,我也有一个"左边"和"对"每行的里程值。他们可能并不总是平等的。
我想从该LineString生成一个多边形,该多边形在英里的每一侧都正确展开,以形成一个结果矩形。
到目前为止,我试图在此处修改此解决方案但没有成功:https://gis.stackexchange.com/questions/60655/polygon-to-fill-gap
我可以使用ST_OffsetCurve()生成两条平行线,但到目前为止还没有能够创建多边形。非常感谢任何建议!
答案 0 :(得分:1)
您可以为线串几何创建最小边界矩形。您可以使用的postgis函数是ST_Envelope。有关示例,请参阅https://postgis.net/docs/ST_Envelope.html。如果您有此矩形,则可以使用给定的左侧和右侧值展开它。请参阅函数ST_Expand https://postgis.net/docs/ST_Expand.html
更新了我的答案(根据屏幕截图): 您可以执行以下步骤在postgis中创建所需的几何体。
drop table linetest;
--create table to test
create table linetest (
id serial not null,
geom geometry,
parallel_geom geometry,
union_lines geometry,
polygon_geom geometry
);
--insert sample linestring
insert into linetest (geom) values (
ST_GeomfromEWKT('SRID=4326; LINESTRING(100 100, 200 200)')
);
--create parallel linestring (query your field dx or dy for the parallel value here)
update linetest set parallel_geom = (
select ST_OffsetCurve(geom,
-15, -- here you can parametrize your offset
'quad_segs=4 join=round')
);
--union the 2 lines to get one geometry as a multilinestring
update linetest set union_lines = (
select ST_Union(geom, parallel_geom)
);
--create polygon with function convex hull out of the multilinestring
update linetest set polygon_geom = (
select ST_ConvexHull(union_lines)
);
--check your result
select ST_ASTEXT (polygon_geom) from linetest;
答案 1 :(得分:0)
计划如下:
棘手的部分是:
答案 2 :(得分:0)
如果我正确回答了您的问题,那么您可能需要从这里Creating a polygon around a linestring with PostGIS得到答案 。关键是ST_Buffer()函数,该函数用缓冲区半径包装内容。但是,它不是一个矩形-它使直线周围呈椭圆形。该函数接受点,线,多线,多边形和多多边形,并返回以该缓冲区半径包裹的任何点。