将线段变成弧形,漂亮的传输显示

Turning line segments in to arcs, pretty transport display

我正在尝试转一个线段显示 进入圆弧段显示

我的 linput 数据被编码为一系列 MultiLineString 几何图形,
我已经尝试过 st_forcecurve(st_linemerge(geom)) 之类的东西,它将我的数据转换为一系列非常漂亮的直线,这些直线编码为 CompoundCurve 几何图形。有什么方法可以直接生成曲线而不是直线。

看来我不是唯一一个 运行 遇到这样问题的人 A very similair problem

其中一个答案符合我的要求。我只是将该答案转换为生成弯曲弧的 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;