Tôi có đường (đường trung tâm đường) và xây dựng các bảng đa giác trong cơ sở dữ liệu PostgreQuery của tôi. Kịch bản mẫu như sau:
Vấn đề:
Tôi cần tính toán các đường song song dọc theo đường phố tại giao lộ của bộ đệm 50 mét xung quanh đường phố và đa giác tòa nhà gần nhất ở cả hai bên. Kịch bản đầu ra mong muốn là:
Những gì tôi đã thử:
Cách tiếp cận của tôi là:
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
Đây là nỗ lực của tôi:
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
Vấn đề với mã ở trên là nó không trả về các đường song song theo đầu ra mong muốn, tức là các đường song song tại tất cả các giao điểm đa giác đang được tạo thay vì tại giao điểm của đa giác gần nhất.
EDIT_1:
Đầu ra thực tế của mã trên là:
Trong khi, ở đầu ra trên, chỉ có các đường song song màu vàng (đường cong bù cho đa giác gần nhất ở hai bên đường) là bắt buộc:
Bất cứ ai có thể đề nghị tôi làm thế nào để có được đầu ra mong muốn?