วิธีเพิ่มจุดยอดนิยมไปยัง linestrings ที่มีอยู่


10

ถ้าฉันมี

Linestring(1 2, 1 5, 1 9)

และ

Point(1 3)

มีฟังก์ชั่นใด ๆ ที่สามารถรวมการคืนค่าและการเก็บรักษาจุดของคำสั่งเอาท์พุทดังนั้นจะเป็น:

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

ดังนั้นคุณจะเพิ่มจุดยอดในบรรทัดที่มีอยู่หรือไม่
RK

ใช่เพิ่มจุดยอดลงไปที่ linestring ที่มีอยู่ส่งผลให้ linestring
BorisT

ทำไมคุณต้องทำมันด้วย?
RK

คำตอบ:


8

หาก LineString ถูกแบ่งย่อยในตำแหน่งที่ใกล้กับจุดที่กำหนดมากที่สุดคุณสามารถทำสิ่งที่คุณต้องการได้ (แยก LineString ที่จุดที่ใกล้เคียงที่สุดที่สุดเพื่อกำหนด Point และ regeges สอง segements หลังจากนั้น)

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;

อย่างไรก็ตามหากจุดของคุณไม่ควรถูกฉายบน LineString สิ่งนี้จะไม่ทำงาน


2

PostGIS มีST_AddPointซึ่งควรอนุญาตให้คุณทำเช่นนี้แม้ว่าคุณจะต้องระบุตำแหน่งที่จะเพิ่มจุด

ST_AddPoint - เพิ่มจุดไปยัง LineString ก่อนจุด (ดัชนีที่ใช้ 0)

ตัวอย่าง:

--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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.