将线段变成圆弧,显示漂亮的运输

时间:2018-12-09 13:50:13

标签: line postgis

我正在尝试打开线段显示 enter image description here 进入弧段显示

enter image description here 我的linput数据被编码为一系列MultiLineString几何,
我尝试过类似st_forcecurve(st_linemerge(geom))之类的操作,该操作将我的数据转换为一系列非常漂亮的直线,这些直线被编码为CompoundCurve几何形状。它可以通过任何方式生成一条曲线而不是一条直线。

1 个答案:

答案 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;