ฉันจะแปลง polylines เป็นคะแนนทุก ๆ n เมตรใน PostGIS ได้อย่างไร


14

คำถามในแบบนี้เหมือนกันมาก แต่ฉันต้องใช้ PostGIS

ฉันมีโพลีนจำนวนมากและต้องการที่จะแปลงให้เป็นคะแนนทุก ๆ n เมตรตามเส้นเหล่านี้

แก้ไข: ขอบคุณมากสำหรับสเตฟาน ข้อความค้นหาสุดท้ายของฉันแตกต่างไปเล็กน้อยอาจเป็นเพราะรุ่นที่เก่ากว่าของ PostGIS (1.5) แต่ในที่สุดฉันก็ได้สิ่งที่ต้องการ คะแนนรวมกันเป็นแผนที่ความร้อนของความหนาแน่นของถนน ป้อนคำอธิบายรูปภาพที่นี่


คำตอบ:


17

แบบสอบถามนี้ควรทำเคล็ดลับ:

WITH line AS 
    (SELECT
        your_polylinestring_id,
        (ST_Dump(geom)).geom AS geom
    FROM your_polylinestring_table),
linemeasure AS
    (SELECT
        ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
        generate_series(0, ST_Length(line.geom)::int, 10) AS i
    FROM line),
geometries AS (
    SELECT
        i,
        (ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom 
    FROM linemeasure)

SELECT
    i,
    ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
  1. ในตอนแรกคุณเลือก linestrings ที่แตกต่างจากคอลัมน์ polylinestring ของคุณด้วย ST_Dump

  2. จากนั้นคุณต้องกำหนดองค์ประกอบการวัดด้วยST_AddMeasureเริ่มต้นด้วย 0 (เริ่มต้นจากการ linestring) และสิ้นสุดการ linestring (เช่นเดียวกับความยาวของ linestring) Generate_seriesสร้างชุดข้อมูลบนการวัดนี้โดยขั้นตอนที่ 10 ที่นี่คุณสามารถกำหนด"n metres"(ในตัวอย่างนี้ 10 เมตร) iค่าเริ่มต้นใหม่อีกครั้งสำหรับทุก LineString

  3. ด้วยST_LocateAlongและST_GeometryNคุณสร้างเรขาคณิตจุดหลายมิติ

  4. ในที่สุดคุณต้องแยกค่า X และ Y ของรูปทรงเรขาคณิตนี้และสร้างจุดจากมัน

ผลลัพธ์อาจมีลักษณะเช่นนี้: ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข

เพื่อความเป็นธรรมฉันต้องการเพิ่มข้อมูลนี้: ความคิดและแบบสอบถามในคำตอบนี้ถูกแยกออกจากแบบสอบถามที่ฉันใช้เพื่อสร้างเส้นผ้าม่านจาก DEMs ใน PostGIS การใช้งานที่ยอดเยี่ยมของสิ่งนี้ได้อธิบายไว้ในบทความนี้จาก Mathieu Leplatre


คุณช่วยอธิบายได้มั้ย b / c ฉันไม่คุ้นเคยกับโครงสร้าง SQL เหล่านี้: WITH line ASใช้ที่ไหน? ฉันไม่เห็น 'บรรทัด' ที่อื่น
culebrón

2
@ culebrón The WITH Queryจัดให้มีการใช้ตารางชั่วคราวสำหรับการสืบค้นที่ใหญ่ขึ้น นี่คือข้อมูลบางส่วน: postgresql.org/docs/8.4/static/queries-with.html ถูกนำมาใช้ในแบบสอบถามย่อยต่อไปline linemeasureข้อมูลที่เลือกในแบบสอบถามย่อยนี้จะขึ้นอยู่กับการเลือกที่ทำในlineแบบสอบถามย่อย พวกเขาสร้างต่อกัน หวังว่าจะช่วย!
Stefan

ใน PostGIS เก่ากว่า 2.0 st_locate_along_measureฟังก์ชั่น
culebrón
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.