PostgreSQL veritabanımda sokak (yol merkez hattı) ve bina çokgen tablolarım var. Örnek senaryo aşağıdaki gibidir:
Sorun:
Caddenin etrafındaki 50 metrelik tamponun kesişim noktasında ve her iki tarafta en yakın bina poligonunun kesiştiği yerde paralel çizgiler hesaplamam gerekiyor. İstenen çıktı senaryosu:
Ne denedim:
Benim yaklaşımım:
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
İşte benim girişimim:
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
Yukarıdaki kodla ilgili sorun, istenen çıktıya göre paralel çizgiler döndürmemesi, yani en yakın çokgenlerin kesişimi yerine tüm çokgen kavşaklarında paralel çizgiler üretilmesidir.
EDIT_1:
Yukarıdaki kodun gerçek çıktısı:
Yukarıdaki çıktıda sadece sarı paralel çizgiler (sokağın her iki tarafındaki en yakın çokgenlere ofset eğrileri) gereklidir:
Birisi bana istenen çıktıyı nasıl alacağımı önerebilir mi?