Postgisfunktionen
Beschreibt Standard- und eigene Postgisfunktionen
Eigene Postgisfunktionen:
Azi2QgisLabelAngle(azi real): Rechnet Azimutwinkel in Winkel für QGIS Textlabelorientierungen um. Achtet, dass Labels nicht auf dem Kopf stehen. Resultat = real (Winkel in 360° für GIS Textlabels).
Definition:
CREATE OR REPLACE FUNCTION azi2qgislabelangle(azi double precision) RETURNS real AS $BODY$ DECLARE qgisangle REAL; BEGIN qgisangle := azi; IF azi >= 0 AND azi <= 90 THEN qgisangle := 90 - azi; ELSIF azi > 90 AND azi <= 180 THEN qgisangle := 360 - (azi -90); ELSIF azi > 180 AND azi <= 270 THEN qgisangle := 90 - (azi - 180); ELSIF azi > 270 AND azi <= 360 THEN qgisangle := 360 - (azi - 270); END IF; RETURN qgisangle; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; COMMENT ON FUNCTION azi2qgislabelangle(double precision) IS 'Rechnet Azimutwinkel in Winkel für QGIS Textlabelorientierungen um. Achtet, dass Labels nicht auf dem Kopf stehen.';
String Concatenation mit Group BY
Zunächst muss ein Aggregate gemacht werden mit dem folgenden Befehl:
CREATE AGGREGATE textcat_all(
basetype = text,
sfunc = textcat,
stype = text,
initcond = ''
);
Danach Abfrage mit:
SELECT partner.name, textcat_all(phones.number || ', ')
FROM partner LEFT JOIN phones ON partner.id = phones.partner_id
GROUP BY partner.name;
Alternativ kann man auch mit DISTINCT() Doppeleinträge rausnehmen:
replace(textcat_all(DISTINCT(phones.number) || '; ')
Schliesslich kann man auch den letzten ";" noch rausnehmen mit:
regexp_replace(textcat_all(DISTINCT(phones.number) || '; '),';\s$','')

