如何为现有线串添加顶点?


10

如果我有

Linestring(1 2, 1 5, 1 9)

还有一个

Point(1 3)

有没有可以合并线串和点保留顺序的函数,因此输出将是:

Linestring(1 2, 1 3, 1 5, 1 9)

因此,您只是将顶点添加到现有线中?
RK 2012年

是的,将顶点添加到现有的线串中,生成一个线串。
BorisT 2012年

为什么你需要这样做呢?
RK 2012年

Answers:


8

如果仅将LineString细分为最接近给定Point的位置,则可以执行此操作(将最接近Point的LineString拆分为给定Point并在之后合并这两个程序)

SELECT ST_AsText(
         ST_LineMerge(
           ST_Union(
             ST_Line_Substring(line, 0, ST_Line_Locate_Point(line, point)),
             ST_Line_Substring(line, ST_Line_Locate_Point(line, point), 1)
       )))
FROM  ST_GeomFromText('Linestring(1 2, 1 5, 1 9)') as line, 
      ST_GeomFromText('Point(1 3)') as point;

但是,如果不应将Point投影到LineString上,则此方法将无效。


2

PostGIS具有ST_AddPoint,尽管您必须指定添加点的位置,但应该允许您执行此操作。

ST_AddPoint —在点(基于0的索引)之前在LineString中添加一个点。

例子:

--guarantee all linestrings in a table are closed
        --by adding the start point of each linestring to the end of the line string
        --only for those that are not closed
        UPDATE sometable
        SET the_geom = ST_AddPoint(the_geom, ST_StartPoint(the_geom))
        FROM sometable
        WHERE ST_IsClosed(the_geom) = false;

        --Adding point to a 2-d line
        SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(1 2, 1 5, 1 9)'), ST_MakePoint(1, 3), 1));

        --result
        st_asewkt
        ----------
        LINESTRING(1 2, 1 3, 1 5, 1 9)

是的,我知道此功能,但我不知道该把新观点放在哪里。
BorisT 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.