Ho via (linea centrale stradale) e costruzione di tabelle poligonali nel mio database PostgreSQL. Lo scenario di esempio è il seguente:
Problema:
Devo calcolare le linee parallele lungo la strada all'intersezione di un buffer di 50 metri attorno alla strada e al poligono dell'edificio più vicino su entrambi i lati. Lo scenario di output desiderato è:
Cosa ho provato:
Il mio approccio era:
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
Ecco il mio tentativo:
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
Il problema con il codice sopra è che non restituisce linee parallele in base all'output desiderato, ovvero, vengono generate linee parallele in tutte le intersezioni dei poligoni anziché nell'intersezione dei poligoni più vicini.
EDIT_1:
L'output effettivo del codice sopra è:
Mentre, nell'output sopra, sono richieste solo linee parallele gialle (curve di offset ai poligoni più vicini su entrambi i lati della strada):
Qualcuno può suggerirmi come ottenere l'output desiderato?