PG等距离切分线,返回点串

--PG将线等距离切割,line 必须是Polyline类型,不能是mutilLine类型,interval_length间隔距离
CREATE
OR REPLACE FUNCTION GetLinePoints (line geometry,interval_length FLOAT) RETURNS VARCHAR AS $$
DECLARE pointCount integer;
DECLARE ii INTEGER ;
DECLARE num INTEGER ;
DECLARE pointLatLog VARCHAR;
BEGIN
    ii := 1 ; num = 1 ; pointLatLog:='';
--获取等距离分割后的点数
pointCount=st_npoints(ST_Segmentize (st_transform (line, 3857),interval_length));
FOR ii IN 1..pointCount LOOP raise notice '%', num; 
--将点的坐标进行切分
--120.21668534667,30.2468406908998,120.217042136705,30.2466049913211,120.21739892674,30.2463692911771,120.217755716775,30.2461335904676,120.21811250681,30.2458978891928,120.218469296845,30.2456621873526,120.218557880024,30.2456036676422
pointLatLog=pointLatLog||(SELECT
    st_x(
        st_transform(ST_PointN (ST_Segmentize (
                st_transform (line, 3857),
                interval_length
            ),
            num
        ),4326))||','||st_y(
        st_transform(ST_PointN (
            ST_Segmentize (
                st_transform (line, 3857),
                interval_length
            ),
            num
        ),4326)));
    IF( num<pointCount ) THEN
    pointLatLog=pointLatLog||',';
    end if;
 num = num + 1 ;
END loop ; RETURN pointLatLog;
END ; $$ LANGUAGE plpgsql;
--调用方式,按50米进行切分
select GetLinePoints(t.geom,50) from road_segment_copy2 t
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容