Več

Plpgsql združuje ST_Overlaps in ST_Intersects

Plpgsql združuje ST_Overlaps in ST_Intersects


Imam vprašanje v zvezi z ustvarjanjem sprožilne funkcije v postgres z dvema pogojema:

Ko ustvarjate niz vrstic v QGIS, se mora prekrivati ​​ali sekati. Tako sem napisal dve funkciji, od katerih je vsaka delala bodisi s ST_Overlaps bodisi s ST_Intersects.

USTVARI ALI NADOMESTI FUNKCIJO check_linesintersecting () VRNI TRIGGER KOT $ TELO $ IZJAVA ZAČETI, ČE TG_OP = 'VSTAVI' TAKO, ČE (SELECT COUNT (*) FROM (SELECT gid FROM line_layer AS t WHERE st_intersects (NEW.geom, t.geom)) AS foo) Nato POVEČAJTE IZJEMO "Speicherung abgebrochen: Ueberschneidende Linien!"; VRATI NIŠČO; DRUGA VRNITEV NOVA; KONEC ČE; ELSIF TG_OP = 'POSODOBI', TUDI ČE (IZBERI ŠTEVILO (*) IZ (IZBERI gid IZ vrstice_plast AS T KJE st_intersects (NEW.geom, t.geom) IN (t.gid <> OLD.gid)) AS foo)> 0 Nato dvignite izjemo "Speicherung abgebrochen: Ueberschneidende Linien!"; VRATI NIŠČO; DRUGA VRNITEV NOVA; KONEC ČE; KONEC ČE; KONEC; $ BODY $ LANGUAGE plpgsql;

Vse, kar sem moral, da sem zaznal prekrivanje, je bilo spremeniti ST_Intersects v ST_Overlaps. Kako pa lahko kombiniram ST_Overlaps in ST_Intersects?

Poskušal sem uporabiti isto zanko takoj drug za drugim, vendar deluje le prva funkcija. Kakšne sledi?


kaj če uporabite ugnezdeni stavek if-else?

če se sekajo, se tudi prekrivajo?

if --intersection if --both then else --samo seka in se konča if end if

Poglej si posnetek: 42 PostgreSQL Procedural Languages Procedure and Error