Es geht hauptsächlich um die Performanz…wie könnte ich die Funktion denn schneller ‘machen’
Ich möchte herausfinden, ob 3D-Linien (gespeichert in der Tabelle ‘lines’) von Polygonen (Tabelle ‘surface_geometry’) geschnitten werden oder nicht, sodass die Info ‘true’ oder ‘false’ an sich ausreicht. Ich brauche einen Befehl, dass die Funktion die Schnittüberprüfung beendet wird, sobald für eine Linie ein ‘true’ ermittelt wurde.
Das aktuelle SQL-Skript lautet:
DROP TABLE IF EXISTS public.lines;
CREATE TABLE public.lines(
id char(20) NOT NULL,
wandpunkt char(20)
– geom geometry
);
SELECT AddGeometryColumn(‘public’, ‘lines’, ‘geom’, 0, ‘GEOMETRY’, 3, true);
–ALTER TABLE public.lines ADD CONSTRAINT lines_pk PRIMARY KEY(id);
INSERT INTO public.lines
SELECT
kuppelpunkte.point_id,
wandpunkte.wand_pk,
ST_MakeLine(wandpunkte.geom, kuppelpunkte.geom)
FROM public.kuppelpunkte,
public.wandpunkte
WHERE
wandpunkte.wand_pk = ‘217586’
–52423
AND
kuppelpunkte.azimuth
BETWEEN wandpunkte.range_a
AND wandpunkte.range_b;
–CREATE B-TREE, PRIMARY KEY & INDEX
CREATE UNIQUE INDEX lines_pk
ON public.lines
USING btree(id);
CREATE INDEX lines_gist3d_geom
ON public.lines
USING gist(geom gist_geometry_ops_nd);
– Add primary key
ALTER TABLE public.lines
ADD CONSTRAINT lines_pk
PRIMARY KEY USING INDEX lines_pk;
DROP TABLE IF EXISTS public.intersection;
CREATE TABLE public.intersection(
id char(20) NOT NULL,
wandp char(20),
inter boolean,
inte boolean
– geom geometry
);
INSERT INTO public.intersection
SELECT DISTINCT
lines.id,
lines.wandpunkt,
–ST_3DIntersects(lines.geom, surface_geometry.geometry) “ST_3DIntersects”,
_ST_3DIntersects(lines.geom, surface_geometry.geometry) “_ST_3DIntersects”
–ST_3DIntersects(lines.geom,kuppelpunkte.geom) “ST_3DIntersects”
FROM
public.lines,
public.surface_geometry
WHERE
ST_DWithin(lines.geom,surface_geometry.geometry, 5);
ALTER TABLE public.intersection
ADD inter_bool boolean;
INSERT INTO public.intersection
SELECT DISTINCT intersection.id
FROM public.intersection;
–ORDER BY intersection.id ASC;
SELECT COUNT(id) FROM public.intersection
UNION
SELECT COUNT(inter) FROM public.intersection WHERE inter =‘f’
–SELECT* FROM public.intersection WHERE inter=‘t’;
–ALTER TABLE public.wandpunkte
–ADD svf double;
–INSERT INTO public.wandpunkte
Die Linien werden aus Punkten auf einer Halbkuppel über einem Stadtmodell und aus Punkten auf Gebäudeflächen erstellt (je eine Linie von jedem Gebäudepunkt zu einem Punkt auf der Halbkuppel). Aktuell bekomme ich am Schluss zwei Werte heraus (aus COUNT…). Diese sind 1. die Gesamtanzahl der Linien pro Gebäudepunkt und 2. die Anzahl der Linien, die nicht durch umliegende Objekte geschnitten werden. Aus diesen beiden Werten berechne ich den Prozentsatz an sichtbaren Punkten auf der Halbkuppel.