-- de a torkolat mégsem érinti a vízfolyást
CREATE OR REPLACE VIEW hiba_lista AS
(SELECT
e1.gid_pk,
e1.vizfolyas,
e1.befogado,
e2.vizfolyas as bef_vizfolyas,
e2.befogado as bef_befogado,
ST_DISTANCE(ST_ENDPOINT(e1.the_geom),e2.the_geom) as ep_tavolsag,
ST_DISTANCE(ST_STARTPOINT(e1.the_geom),e2.the_geom) as sp_tavolsag,
ST_DISTANCE(e1.the_geom,e2.the_geom) as tavolsag,
ST_LENGTH(e1.the_geom) as hossz_e1
FROM
(SELECT (ST_DUMP(the_geom)).geom as the_geom,befogado,vizfolyas,gid_pk FROM eszt_vegleges) as e1,
(SELECT (ST_DUMP(the_geom)).geom as the_geom,befogado,vizfolyas,gid_pk FROM eszt_vegleges) as e2
WHERE e1.gid_pk<>e2.gid_pk
--AND ST_INTERSECTS(e1.the_geom,e2.the_geom) = 'f'
AND e1.befogado = e2.vizfolyas
AND ST_DISTANCE(ST_ENDPOINT(e1.the_geom),e2.the_geom)>0.001
ORDER BY tavolsag);
-- Ahol az kezdő pont (sp) távolság 0 és a végpont (ep) távolság nem nulla, ott
-- a geometria irányultsága helytelen
UPDATE eszt_vegleges
SET the_geom = ST_REVERSE(the_geom) WHERE eszt_vegleges.gid_pk IN
(
SELECT gid_pk FROM hiba_lista
WHERE ep_tavolsag > 0
AND sp_tavolsag = 0
);
-- Közeli pontok hozzáfűzése
-- Amikor a vízfolyás épp nem éri el a befogadóját szükséges azt kiegészíteni (sql úton nem feltétlenül a legjobb)
-- Figyelni kell, hogy a két vizsgált geometria valóban ne metsze egymást,
-- És az áthidalt szakasz se legyen egy bizonyos távolságnál nagyobb
SELECT
e1.gid_pk,ST_ADDPOINT(e1.the_geom,
ST_CLOSESTPOINT(e2.the_geom,e1.the_geom),ST_NPOINTS(e1.the_geom)) as the_geom
INTO to_close
FROM
(SELECT (ST_DUMP(the_geom)).geom as the_geom,befogado,vizfolyas,gid_pk FROM eszt_vegleges) as e1,
(SELECT (ST_DUMP(the_geom)).geom as the_geom,befogado,vizfolyas,gid_pk FROM eszt_vegleges) as e2
WHERE e1.gid_pk<>e2.gid_pk
AND ST_INTERSECTS(e1.the_geom,e2.the_geom) = 'f'
AND e1.befogado = e2.vizfolyas
AND ST_DISTANCE(ST_CLOSESTPOINT(e2.the_geom,ST_ENDPOINT(e1.the_geom)),ST_ENDPOINT(e1.the_geom)) BETWEEN 0.01 AND 20;
UPDATE eszt_vegleges SET the_geom = to_close.the_geom
FROM to_close
WHERE eszt_vegleges.gid_pk = to_close.gid_pk;
-- Túlnyúló pontok levágása
-- Túlnyúló pontok szakaszok ott vannak, ahol az ep távolság nem nulla, viszont a távolság nulla
-- Korlátozás, hogy a levágandó rész nem lehet hosszabb 20 méternél
SELECT
e1.gid_pk,
ST_LINE_SUBSTRING(e1.the_geom,0,ST_LINE_LOCATE_POINT(e1.the_geom,(ST_DUMP(ST_INTERSECTION(e1.the_geom,e2.the_geom))).geom)) as the_geom,
ST_LENGTH(e1.the_geom)*(1-ST_LINE_LOCATE_POINT(e1.the_geom,(ST_DUMP(ST_INTERSECTION(e1.the_geom,e2.the_geom))).geom)) as levagando_tavolsag
INTO to_trim
FROM
(SELECT (ST_DUMP(the_geom)).geom as the_geom,befogado,vizfolyas,gid_pk FROM eszt_vegleges) as e1,
(SELECT (ST_DUMP(the_geom)).geom as the_geom,befogado,vizfolyas,gid_pk FROM eszt_vegleges) as e2
WHERE e1.gid_pk<>e2.gid_pk
AND e1.befogado = e2.vizfolyas
AND ST_DISTANCE(ST_ENDPOINT(e1.the_geom),e2.the_geom) >0
AND ST_DISTANCE(e1.the_geom,e2.the_geom) = 0;
UPDATE eszt_vegleges SET the_geom = to_trim.the_geom
FROM to_trim
WHERE eszt_vegleges.gid_pk = to_trim.gid_pk
AND to_trim.levagando_tavolsag<20;
Nincsenek megjegyzések:
Megjegyzés küldése