Freigeben über


geo_azimuth()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Berechnet den Winkel im Uhrzeigersinn in Bogenmaßen zwischen der Linie von Punkt1 bis true Nord und einer Linie von Punkt1 bis Punkt2 auf der Erde.

Syntax

geo_azimuth(p1_longitude p1_latitude p2_longitudep2_latitude,,,)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
p1_longitude real ✔️ Der Längengradwert in Grad der ersten geospatialen Koordinate. Ein gültiger Wert befindet sich im Bereich [-180, +180].
p1_latitude real ✔️ Der Breitengradwert in Grad der ersten geospatialen Koordinate. Ein gültiger Wert befindet sich im Bereich [-90, +90].
p2_longitude real ✔️ Der Längengradwert in Grad der zweiten geospatialen Koordinate. Ein gültiger Wert befindet sich im Bereich [-180, +180].
p2_latitude real ✔️ Der Breitengradwert in Grad der zweiten geospatialen Koordinate. Ein gültiger Wert befindet sich im Bereich [-90, +90].

Gibt zurück

Ein Winkel in Bogenmaßen zwischen der Linie von Punkt p1 bis true Nord und Linie [p1, p2]. Der Winkel wird im Uhrzeigersinn gemessen.

Hinweis

  • Die Geospatialkoordinaten werden durch das WGS-84-Koordinatenverweissystem interpretiert.
  • Das geodetische Datum , das zum Messen der Entfernung auf der Erde verwendet wird, ist eine Kugel. Linienränder sind geodätische Ränder auf der Kugel.
  • Azimuth 0 Punkte nördlich. Azimuth Pi/2 Punkte ost. Azimuth Pi punkte südlich. Azimuth 3Pi/2 Punkte west.
  • Wenn die Koordinaten ungültig sind, erzeugt die Abfrage ein NULL-Ergebnis.
  • Wenn Punkt1 gleich Punkt2 ist, erzeugt die Abfrage ein NULL-Ergebnis.
  • Wenn Punkt1 und Punkt2 antipodal sind, erzeugt die Abfrage ein NULL-Ergebnis.

Beispiele

Im folgenden Beispiel wird azimuth in Bogenmaß berechnet.

print azimuth_in_radians = geo_azimuth(5, 10, 10, -40)

Output

azimuth_in_radians
3.05459939796449

Im folgenden Beispiel wird die Azimut in Grad berechnet.

let azimuth_in_radians = geo_azimuth(5, 10, 10, -40);
print azimuth_in_degrees = degrees(azimuth_in_radians);

Output

azimuth_in_degrees
175.015653606568

Im folgenden Beispiel wird ein Lkw betrachtet, der Telemetriedaten seines Standorts ausgibt, während er unterwegs ist und nach seiner Reiserichtung sucht.

let get_direction = (azimuth:real)
{
    let pi = pi();
    iff(azimuth < pi/2,   "North-East",
    iff(azimuth < pi,     "South-East",
    iff(azimuth < 3*pi/2, "South-West",
                          "North-West")));
};
datatable(timestamp:datetime, lng:real, lat:real)
[
    datetime(2024-01-01T00:01:53.048506Z), -115.4036607693417, 36.40551631046261,
    datetime(2024-01-01T00:02:53.048506Z), -115.3256807623232, 36.34102142760111,
    datetime(2024-01-01T00:03:53.048506Z), -115.2732290602112, 36.28458914829917,
    datetime(2024-01-01T00:04:53.048506Z), -115.2513186233914, 36.27622394664352,
    datetime(2024-01-01T00:05:53.048506Z), -115.2352055633212, 36.27545547038515,
    datetime(2024-01-01T00:06:53.048506Z), -115.1894341934856, 36.28266934431671,
    datetime(2024-01-01T00:07:53.048506Z), -115.1054318118468, 36.28957085435267,
    datetime(2024-01-01T00:08:53.048506Z), -115.0648614339413, 36.28110743285072,
    datetime(2024-01-01T00:09:53.048506Z), -114.9858032867736, 36.29780696509714,
    datetime(2024-01-01T00:10:53.048506Z), -114.9016966527561, 36.36556196813566,
]
| sort by timestamp asc 
| extend prev_lng = prev(lng), prev_lat = prev(lat)
| where isnotnull(prev_lng) and isnotnull(prev_lat)
| extend direction = get_direction(geo_azimuth(prev_lng, prev_lat, lng, lat))
| project direction, lng, lat
| render scatterchart with (kind = map)

Output

Azimuth zwischen zwei aufeinander folgenden Speicherorten.

Das folgende Beispiel gibt zurück true , da der erste Punkt dem zweiten Punkt entspricht.

print is_null = isnull(geo_azimuth(5, 10, 5, 10))

Output

is_null
true