Hallo Forum,
ich habe eine Tabelle t1 mit Geometrien und führe folgende Funktion aus:
Select min(ST_Z(geom)) from t1;
Als Resultat erhalte ich das kleinste Z.
Nun ist das leider nur ein Beispiel um das Problem besser darstellen zu können, denn:
CREATE OR REPLACE FUNCTION public.get3dpoints(poly geometry)
RETURNS SETOF geometry
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
r RECORD;
l geometry;
BEGIN
FOR r IN
Select geomvalue from allpoints(poly) --Returns select statement result
LOOP
Select into l interpolateZ(r.geomvalue); --returns only the geometry
RETURN NEXT l;
END LOOP;
END;
$BODY$;
liefert eine Liste von Geometrien.
Select geomvalue from allpoints(poly)
splitet eine Geometrie in alle Punkte auf und gibt mir eine Liste mit Geometrien zurück, mit deren Hilfe ich auch den kleinsten Wert herausbekomme.
Select into l interpolateZ(r.geomvalue);
Erzeugt mir aus 2D Koordinaten und einem 3D Polygon, den fehlenden Z Wert.
Die daraus entstandene Liste:
“9.54710000000801”
“9.05679999999981”
“9.0784999999993”
“9.06999999997276”
“9.13009999998682”
“9.12579999996163”
“9.54710000000801”
kann ich leider nicht mit min oder max intensiver abfragen:
Aufrufe von Aggregatfunktionen können keine Aufrufe von Funktionen mit Ergebnismenge enthalten
Daher hier meine Frage, wie kann ich den obigen Spaß als Tabelle ausgeben, damit Funktionen wie min und max weiterhin funktionieren.
Ich denke das Problem ist, dass die Geometrie nur häppchenweise ausgegeben wird, da in jedem Schleifendurchlauf ein l ausgegeben wird. Ich habe mit RETURN QUERY schon viel versucht, bin aber immer daran gescheitert das l in die temporare tabelle zu stecken.
beste Grüße
Balli