Einführung in Die Geospatialfunktionen von Stream Analytics

Geospatiale Funktionen in Azure Stream Analytics ermöglichen Echtzeitanalysen zu streamenden georäumlichen Daten für Szenarien wie Fahrdienst, Flottenmanagement, Asset Tracking, Geo-Fencing und Telefonüberwachung an Mobilfunkstandorten. Mit nur wenigen Zeilen Abfragecode können Sie Lösungen bauen, die die sieben integrierten Funktionen der Stream Analytics Query Language (CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, , ST_INTERSECTS, und ST_WITHIN) verwenden, die alle WKT-Typen sowie GeoJSON-Punkte, Polygon und LineString unterstützen. Dieser Artikel beschreibt jede Funktion und zeigt Beispielabfragen, damit Sie sie auf Ihre eigenen Streaming-Daten anwenden können.

Geometrietypen und Koordinatenreihenfolge

Die geospatialen Funktionen arbeiten mit drei GeoJSON-Geometrietypen. Ein Punkt ist ein einzelner Ort, der durch Längen- und Breitengrade definiert ist. Eine LineString ist eine geordnete Menge von zwei oder mehr Punkten, die eine verbundene Linie bildet, wie zum Beispiel eine Route oder eine Straße. Ein Polygon ist eine geschlossene Form, deren Grenze zu ihrem Ausgangspunkt zurückkehrt, wie etwa einem Grundriss eines Gebäudes oder einem Geozaun.

Die Funktionen lassen sich in zwei Gruppen einteilen. Konstruktorfunktionen (CreatePoint, CreateLineString, und CreatePolygon) bauen Geometrien aus Koordinatenwerten in deinen Ereignisdaten auf. Beziehungsfunktionen (ST_DISTANCE, ST_OVERLAPS, , ST_INTERSECTSund ST_WITHIN) vergleichen zwei Geometrien und beschreiben, wie sie im Raum zusammenhängen.

In GeoJSON werden die Koordinaten in der Reihenfolge Längengrad zuerst und Breitengrad an zweiter Stelle angegeben, sodass ein eingegebener Breitengrad und Längengrad in der resultierenden Geometrie in umgekehrter Reihenfolge erscheinen. Das Verständnis dieser Ordnung, zusammen mit der gegen den Uhrzeigersinn gerichteten Ringorientierung, die Polygone erfordern, hilft Ihnen, die Ausgabe jeder Funktion vorherzusagen.

CreateLineString

CreateLineString ist eine Konstruktorfunktion, die eine GeoJSON LineString zurückgibt, eine Geometrie, die eine zusammenhängende Reihe von Punkten als Gerade auf einer Abbildung darstellt. Es akzeptiert zwei oder mehr Punkte und verbindet sie in der Reihenfolge, in der Sie sie auflisten, was es zu einer natürlichen Möglichkeit macht, Routen, Wege und Straßenabschnitte aus Streaming-Daten zu modellieren.

Das folgende Beispiel veranschaulicht dieses Verhalten, indem drei Punkte zu einer LineString kombiniert werden. Der erste Punkt stammt vom Streaming von Eingabedaten, und die anderen beiden definierst du manuell.

SELECT  
     CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))  
FROM input  

Eingabebeispiel

latitude Längengrad
3.0 -10.2
-87.33 20,2321

Ausgabebeispiel

{"type" : "LineString", "coordinates" : [ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5] ]}

{"type" : "LineString", "coordinates" : [ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5] ]}

Um mehr zu erfahren, siehe die Referenz CreateLineString .

CreatePoint

CreatePoint ist eine Konstruktorfunktion, die einen GeoJSON-Punkt aus einem Breiten- und Längengrad zurückgibt. Ein Punkt ist die grundlegendste Geometrie und stellt einen einzelnen Ort auf einer Karte dar, wie zum Beispiel die aktuelle Position eines Fahrzeugs oder eines Objekts. Die Breiten- und Längengrade müssen ein float Datentyp sein.

Das folgende Beispiel veranschaulicht dieses Verhalten, indem ein Punkt aus den Breiten- und Längengraden in den Streaming-Eingabedaten erstellt wird.

SELECT  
     CreatePoint(input.latitude, input.longitude)  
FROM input 

Eingabebeispiel

latitude Längengrad
3.0 -10.2
-87.33 20,2321

Ausgabebeispiel

{"type" : "Point", "coordinates" : [-10.2, 3.0]}

{"typ" : "Punkt", "Koordinaten" : [20.2321, -87.33]}

Um mehr zu erfahren, siehe die CreatePoint-Referenz .

CreatePolygon

CreatePolygon ist eine Konstruktorfunktion, die ein GeoJSON-Polygon aus einer Menge von Punkten zurückgibt. Ein Polygon stellt auf einer Karte einen umschlossenen Bereich dar, wie zum Beispiel einen Grundriss eines Gebäudes, eine Lagerhausgrenze oder einen Geo-Zaun. Die Reihenfolge der Punkte folgt der Orientierung des rechten Rings oder gegen den Uhrzeigersinn: Wenn du dir vorstellst, von einem Punkt zum nächsten in der deklarierten Reihenfolge zu gehen, bleibt das Polygonzentrum die ganze Zeit zu deiner Linken.

Das folgende Beispiel veranschaulicht dieses Verhalten, indem ein Polygon aus drei Punkten erstellt wird. Man definiert die ersten beiden Punkte manuell, und der letzte Punkt stammt aus den Eingabedaten.

SELECT  
     CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))  
FROM input  

Eingabebeispiel

latitude Längengrad
3.0 -10.2
-87.33 20,2321

Ausgabebeispiel

{"type" : "Polygon", "koordinaten" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}

{"type" : "Polygon", "Koordinaten" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

Weitere Informationen finden Sie in der CreatePolygon-Referenz .

ST_DISTANCE

ST_DISTANCE ist eine Beziehungsfunktion, die den Abstand zwischen zwei Geometrien in Metern zurückgibt. Es hilft Ihnen zu verstehen, wie nah oder fern zwei Orte sind, was für Nähe-Szenarien wie Fahrzeugalarme in der Nähe und Berechnungen des Versorgungsgebiets nützlich ist.

Das folgende Beispiel zeigt, wie man diese Funktion nutzt, um zu erkennen, wann eine Tankstelle weniger als 10 km von einem Auto entfernt ist.

SELECT Cars.Location, Station.Location 
FROM Cars c  
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000

Um mehr zu erfahren, siehe die ST_DISTANCE Referenz.

ST_OVERLAPS

ST_OVERLAPS ist eine Beziehungsfunktion, die zwei Geometrien vergleicht und angibt, ob sie einen gemeinsamen Bereich teilen. Es gibt 1 zurück, wenn sich die Geometrien überlappen, und 0, wenn sie es nicht tun. Diese Funktion ist nützlich, um räumliche Konflikte wie eine Gefahrenzone zu erkennen, die ein Interessengebiet berührt.

Das folgende Beispiel zeigt, wie diese Funktion verwendet werden kann, um zu erkennen, wann ein Gebäude in einer möglichen Überschwemmungszone liegt.

SELECT Building.Polygon, Flooding.Polygon
FROM Building b 
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, f.Polygon)

Das nächste Beispiel verwendet ebenfalls ST_OVERLAPS, um zu erkennen, wann sich ein Sturm auf ein Auto zubewegt.

SELECT Cars.Location, Storm.Course
FROM Cars c
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)

Um mehr zu erfahren, siehe die ST_OVERLAPS Referenz.

ST_INTERSECTS

ST_INTERSECTS ist eine Beziehungsfunktion, die zwei Geometrien vergleicht und berichtet, ob sie sich kreuzen oder berühren. Es gibt 1 zurück, wenn sich die Geometrien schneiden, und 0, wenn sie das nicht tun. Diese Funktion hilft Ihnen zu erkennen, wo Pfade oder Regionen aufeinandertreffen.

Das folgende Beispiel zeigt, wie man diese Funktion nutzt, um festzustellen, ob eine asphaltierte Straße eine Schotterstraße kreuzt.

SELECT  
     ST_INTERSECTS(input.pavedRoad, input.dirtRoad)  
FROM input  

Eingabebeispiel

asphaltierte Straße dirtRoad
{"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "coordinates": [ [0.0, 10.0], [0.0, 0.0], [0.0, -10.0] ]}
{"type":"LineString", "coordinates": [ [-10.0, 0.0], [0.0, 0.0], [10.0, 0.0] ]} {"type":"LineString", "coordinates": [ [-10.0, 10.0], [0.0, 10.0], [10.0, 10.0] ]}

Ausgabebeispiel

1

0

Weitere Informationen finden Sie in der ST_INTERSECTS Referenz.

ST_WITHIN

ST_WITHIN ist eine Beziehungsfunktion, die angibt, ob eine Geometrie vollständig in einer anderen enthalten ist. Sie gibt 1 zurück, wenn die erste Geometrie innerhalb der zweiten liegt, und 0, wenn nicht, was die Grundlage für Eindämmungsszenarien wie Geo-Fencing und Lieferzonenkontrollen bildet.

Das folgende Beispiel veranschaulicht dieses Verhalten, indem festgestellt wird, ob ein Lieferzielpunkt innerhalb eines gegebenen Warehouse-Polygons liegt.

SELECT  
     ST_WITHIN(input.deliveryDestination, input.warehouse)  
FROM input 

Eingabebeispiel

Lieferziel warehouse
{"type":"Point", "coordinates": [76.6, 10.1]} {"type":"Polygon", "coordinates": [ [0.0, 0.0], [10.0, 0.0], [10.0, 10.0], [0.0, 10.0], [0.0, [0.0] ]}
{"type":"Point", "coordinates": [15.0, 15.0]} {"type":"Polygon", "coordinates": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

Ausgabebeispiel

0

1

Weitere Informationen finden Sie in der ST_WITHIN Referenz.