Name

ST_Azimuth — Gibt die 2-dimenionale kürzeste Strecke zwischen zwei Geometrien als Linie zurück

Synopsis

float ST_Azimuth(geometry origin, geometry target);

float ST_Azimuth(geography origin, geography target);

Beschreibung

Gibt den Azimutwinkel des Zielpunkts vom Ursprungspunkt in Bogenmaß zurück oder NULL, wenn die beiden Punkte übereinstimmen. Der Azimutwinkel ist ein positiver Winkel im Uhrzeigersinn, der sich auf die positive Y-Achse (Geometrie) oder den Nordmeridian (Geografie) bezieht: Nord = 0; Nordost = π/4; Ost = π/2; Südost = 3π/4; Süd = π; Südwest 5π/4; West = 3π/2; Nordwest = 7π/4.

Für den Typ Geografie ist die Azimutlösung als inverses geodätisches Problem bekannt.

Der Azimut ist ein mathematisches Konzept, das als der Winkel zwischen einem Referenzvektor und einem Punkt definiert ist, mit Winkeleinheiten im Bogenmaß. Der Ergebniswert in Bogenmaß kann mit der PostgreSQL-Funktion degrees() in Grad umgerechnet werden.

For offsetting lines relative to their direction, use ST_OffsetCurve. For projecting a point by distance and bearing, use ST_Project.

Verfügbarkeit: 1.1.0

Erweiterung: mit 2.0.0 wurde die Unterstützung des geographischen Datentyps eingeführt.

Erweiterung: 2.2.0 die Messungen auf dem Referenzellipsoid werden mit der Bibliothek "GeographicLib" durchgeführt. Dadurch wurde die Genauigkeit und die Robustheit erhöht. Um die Vorteile dieser neuen Funktionalität zu nutzen, benötigen Sie Proj >= 4.9.0.

Beispiele

Geometrischer Datentyp - Azimut in Grad

SELECT degrees(ST_Azimuth(ST_Point(25, 45),  ST_Point(75, 100))) AS degA_B,
       degrees(ST_Azimuth(ST_Point(75, 100), ST_Point(25, 45) )) AS degB_A;
dega_b       |     degb_a
------------------+------------------
42.27368900609371 | 222.27368900609372

Compass direction labels can be computed from the azimuth.

WITH directions(deg) AS (VALUES
  (0), (45), (90), (135), (180), (225), (270), (315)
),
bearings AS (
  SELECT deg,
         degrees(ST_Azimuth(ST_Point(0, 0),
                            ST_MakePoint(sin(radians(deg)),
                                         cos(radians(deg))))) AS azimuth
  FROM directions
)
SELECT deg,
       round(azimuth::numeric, 1) AS azimuth,
       (ARRAY['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW', 'N'])
         [floor((azimuth + 22.5) / 45)::int + 1] AS direction
FROM bearings
ORDER BY deg;
deg | azimuth | direction
-----+---------+-----------
   0 |     0.0 | N
  45 |    45.0 | NE
  90 |    90.0 | E
 135 |   135.0 | SE
 180 |   180.0 | S
 225 |   225.0 | SW
 270 |   270.0 | W
 315 |   315.0 | NW

Blau: Ursprung Punkt(25,45); Grün: Zielpunkt(75, 100); Gelb: Y-Achse oder Norden; Rot: Azimutwinkel.

Blau: Ursprung Punkt(75, 100); Grün: Ziel Punkt(25, 45); Gelb: Y-Achse oder Norden; Rot: Azimutwinkel.