ฉันมีถนน (เส้นกลางถนน) และสร้างตารางหลายเหลี่ยมในฐานข้อมูล PostgreSQL ของฉัน สถานการณ์ตัวอย่างเป็นดังนี้:
ปัญหา:
ฉันต้องคำนวณเส้นขนานตามถนนที่จุดตัดของบัฟเฟอร์ 50 เมตรรอบถนนและรูปหลายเหลี่ยมอาคารที่ใกล้ที่สุดทั้งสองด้าน สถานการณ์เอาท์พุทที่ต้องการคือ:
สิ่งที่ฉันได้ลอง:
แนวทางของฉันคือ:
 1) Generate 50m buffer around street layer
 2) get the intersection of buffer and polygons
 3) Compute the distance
 4) Draw offset curves (parallel lines) at both sides of street layer
 5) Merge both curves to get parallel lines at the intersection
นี่คือความพยายามของฉัน:
    WITH street_buffer AS (
     SELECT
      street.gid street_id,
      street.geom street_geom,
      ST_Buffer(street.geom, 50, 'endcap=square join=round') geom1,
      building.geom  geom2  
     FROM street
     LEFT JOIN building on ST_DWithin(building.geom, street.geom, 50)
     ORDER BY street_id
    ),
    selected_buildings AS (
     SELECT
      street_id,
      street_geom,
      ST_Intersection(geom1, geom2) geom
     FROM street_buffer
    ),
    distance AS (
     SELECT 
      street_id,
      street_geom,
      ST_Distance(street_geom, geom) as dist
     FROM selected_buildings 
    ),
    curves AS (
     SELECT 
      street_id,
      ST_OffsetCurve(ST_LineMerge(street_geom), dist) as curve1,
      ST_OffsetCurve(ST_LineMerge(street_geom), -dist) as curve2
     FROM distance
     ORDER BY street_id
    )
    SELECT 
     street_id,
     ST_Union(curve1, curve2) geom 
    FROM curves
    ORDER BY street_id
ปัญหาของโค้ดข้างต้นคือมันไม่ได้ส่งคืนเส้นคู่ขนานตามผลลัพธ์ที่ต้องการนั่นคือการสร้างเส้นคู่ขนานที่จุดแยกรูปหลายเหลี่ยมทั้งหมดแทนที่จะเป็นจุดตัดของรูปหลายเหลี่ยมที่ใกล้ที่สุด
EDIT_1:
เอาต์พุตจริงของโค้ดด้านบนคือ:
ในขณะที่ในการส่งออกข้างต้นจะต้องใช้เส้นขนานสีเหลือง (เส้นโค้งตรงข้ามกับรูปหลายเหลี่ยมที่ใกล้ที่สุดบนถนนทั้งสองด้าน):
ใครช่วยแนะนำฉันได้อย่างไรถึงได้ผลลัพธ์ที่ต้องการ?



