Příklady topologického zpracování vektorových data
Otázky
1. Najděte parcely, které sousedí s parcelou, ve které se nachází adresní bod s označením kod=22560840. |
---|
278, 280/1, 562, 279/5 |
2. Proveďte generalizaci parcel. |
---|
- |
Řešení
1. Najděte parcely, které sousedí s parcelou, ve které se nachází adresní bod s označením kod=22560840. |
---|
278, 280/1, 562, 279/5 |
WITH parcela AS
(
SELECT p.geom FROM parcely as p
JOIN ruian_praha.adresnimista AS a
ON a.kod=22560840 AND ST_Within(a.geom, p.geom)
)
SELECT id, kmenovecislo, pododdelenicisla FROM parcely AS p
JOIN parcela
ON st_touches(p.geom, parcela.geom);
topologické řešení: seznam hran (verze 1)
SELECT topology.ST_GetFaceEdges('topo_parcely', f.face_id) FROM
(
SELECT face_id FROM topo_parcely.face AS f JOIN
ruian_praha.adresnimista AS a ON a.kod=22560840 AND a.geom && f.mbr AND
ST_Within(a.geom, topology.ST_GetFaceGeometry('topo_parcely', f.face_id))
) AS f;
topologické řešení: seznam hran (verze 2)
SELECT topology.ST_GetFaceEdges('topo_parcely', f.face_id) FROM
(
SELECT
topology.getFaceByPoint('topo_parcely', geom, 0) face_id
FROM ruian_praha.adresnimista WHERE kod = 22560840
) AS f;
topologické řešení: seznam hran (verze 3)
with original_face_id AS
(
SELECT
topology.getFaceByPoint('topo_parcely', geom, 0) face_id
FROM ruian_praha.adresnimista WHERE kod = 22560840
)
select * FROM original_face_id, topology.ST_GetFaceEdges('topo_parcely', face_id)
JOIN topo_parcely.edge ON edge_id = @edge;
topologické řešení: seznam sousedních stěn
SELECT
CASE right_face
WHEN original_face_id.face_id THEN left_face
ELSE right_face
END AS face
FROM original_face_id, topology.ST_GetFaceEdges('topo_parcely', face_id)
JOIN topo_parcely.edge ON edge_id = @edge;
topologické řešení: výsledek
WITH original_face_id AS
(
SELECT
topology.getFaceByPoint('topo_parcely', geom, 0) face_id
FROM ruian_praha.adresnimista WHERE kod = 22560840
),
sousedni AS
(
SELECT
CASE right_face
WHEN original_face_id.face_id THEN left_face
ELSE right_face
END AS face
FROM original_face_id
, topology.ST_GetFaceEdges('topo_parcely', face_id)
JOIN topo_parcely.edge ON edge_id = @edge
)
SELECT id, kmenovecislo, pododdelenicisla
FROM parcely p
JOIN topo_parcely.relation r
ON (p.topo).id = r.topogeo_id
AND (p.topo).layer_id = r.layer_id
AND (p.topo).type = 3
WHERE r.element_id IN
(
SELECT face
FROM sousedni
);
2. Proveďte generalizaci parcel. |
---|
- |
některé z prvků nejsou validní
řešení
řešení topologicky korektní