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$','')
Artikelaktionen
Sitemap AGB Impressum