我的linput数据被编码为一系列MultiLineString几何,
我尝试过类似st_forcecurve(st_linemerge(geom))之类的操作,该操作将我的数据转换为一系列非常漂亮的直线,这些直线被编码为CompoundCurve几何形状。它可以通过任何方式生成一条曲线而不是一条直线。
答案 0 :(得分:0)
似乎我不是唯一遇到过类似A very similairproblem
这样的问题的人其中一个答案做了我想要的。我只是将答案转换为psql函数,该函数会生成弯曲的弧线,并使用您想要答案的弯曲程度的因素,低值非常弯曲,高值则是直线。
--
-- Draw an arc geom between two differentlocations
--
-- point1 must be a point starting location
-- point2 must be a point ending location
-- arc_fractor how curved you want the result
-- returns a curved geometry
create or replace function mk_arg_geom(point1 geometry, point2 geometry, arc_factor integer )
returns geometry
as $$
DECLARE
ret geometry;
ret_srid integer;
tmp_geom geometry;
c_geom geometry;
BEGIN
ret := null;
ret_srid:=st_srid(point1);
tmp_geom=st_makeline(point1,point2);
c_geom:= ST_CurveToLine('CIRCULARSTRING(' ||
st_x(st_startpoint(tmp_geom)) ||
' ' ||
st_y(st_startpoint(tmp_geom)) ||
', ' ||
st_x(st_centroid(ST_OffsetCurve(tmp_geom, st_length(tmp_geom)/arc_factor, 'quad_segs=4 join=bevel'))) ||
' ' ||
st_y(st_centroid(ST_OffsetCurve(tmp_geom, st_length(tmp_geom)/arc_factor, 'quad_segs=4 join=bevel'))) ||
', ' ||
st_x(st_endpoint(tmp_geom)) ||
' ' ||
st_y(st_endpoint(tmp_geom))
|| ')');
ret=st_setsrid(c_geom,ret_srid);
return ret;
END;
$$
LANGUAGE plpgsql;