Einführung in Stream Analytics-Geofunktionen

Geofunktionen in Azure Stream Analytics ermöglichen die Echtzeitanalyse von gestreamten Geodaten. Mit nur wenigen Codezeilen können Sie eine Lösung auf Produktionsniveau für komplexe Szenarien entwickeln. Diese Funktionen unterstützen alle WKT-Typen und GeoJSON Point, Polygon und LineString.

Einige Beispiele für Szenarien, die von Geofunktionen profitieren können:

  • Carsharing
  • Verwaltung von Fahrzeugflotten
  • Asset-Nachverfolgung
  • Geofencing (geografische Eingrenzung)
  • Zellenübergreifende Telefonnachverfolgung

Die Stream Analytics-Abfragesprache verfügt über sieben integrierte Geofunktionen: CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS und ST_WITHIN.

CreateLineString

Die CreateLineString-Funktion nimmt Punkte entgegen und gibt eine GeoJSON-LineString zurück, die als Linie auf einer Karte gezeichnet werden kann. Zum Erstellen einer LineString benötigen Sie mindestens zwei Punkte. Die LineString-Punkte werden in ihrer Reihenfolge verbunden.

Die folgende Abfrage verwendet CreateLineString zum Erstellen einer LineString mithilfe von drei Punkten. Der erste Punkt wird aus Streamingeingabedaten erstellt, während die anderen beiden manuell erstellt werden.

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

Eingabebeispiel

latitude longitude
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] ]}

Weitere Informationen finden Sie in der Referenz zu CreateLineString.

CreatePoint

Die CreatePoint-Funktion nimmt einen Breiten- und einen Längengrad entgegen und gibt einen GeoJSON-Punkt zurück, der auf einer Karte gezeichnet werden kann. Die Breiten- und Längengrade müssen den Datentyp float aufweisen.

Die folgende Beispielabfrage verwendet CreatePoint zum Erstellen eines Punkts mit Breiten- und Längengraden aus Streamingeingabedaten.

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

Eingabebeispiel

latitude longitude
3.0 -10.2
-87.33 20.2321

Ausgabebeispiel

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

{"type" : "Point", "coordinates" : [20.2321, -87.33]}

Weitere Informationen finden Sie in der Referenz zu CreatePoint.

CreatePolygon

Die CreatePolygon-Funktion nimmt Punkte entgegen und gibt einen GeoJSON-Polygondatensatz zurück. Die Reihenfolge der Punkte muss der Rechten-Hand-Ringausrichtung folgen bzw. entgegen dem Uhrzeigersinn verlaufen. Das Prinzip entspricht dem Gehen von einem Punkt zu einem anderen in der Reihenfolge, in die sie deklariert wurden. Die Mitte des Polygons befindet sich dabei durchgehend auf der linken Seite.

Die folgende Beispielabfrage verwendet CreatePolygon zum Erstellen eines Polygons aus drei Punkten. Die ersten beiden Punkte werden manuell erstellt, und der letzte Punkt wird aus Daten erstellt.

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 longitude
3.0 -10.2
-87.33 20.2321

Ausgabebeispiel

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

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

Weitere Informationen finden Sie in der Referenz zu CreatePolygon.

ST_DISTANCE

Die ST_DISTANCE-Funktion gibt den Abstand zwischen zwei Geometrien in Metern zurück.

Die folgende Abfrage verwendet ST_DISTANCE zum Generieren eines Ereignisses, wenn sich eine Tankstelle näher als 10 km vom Auto befindet.

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

Weitere Informationen finden Sie in der Referenz zu ST_DISTANCE.

ST_OVERLAPS

Die ST_OVERLAPS-Funktion vergleicht zwei Geometrien. Wenn sich die Geometrien überschneiden, gibt die Funktion 1 zurück. Die Funktion gibt 0 zurück, wenn sich die Geometrien nicht überschneiden.

Die folgende Abfrage verwendet ST_OVERLAPS zum Generieren eines Ereignisses, wenn ein Gebäude sich in einer Zone mit Überflutungsrisiko befindet.

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

Die folgende Beispielabfrage generiert ein Ereignis, wenn sich ein Sturm auf ein Auto zubewegt.

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

Weitere Informationen finden Sie in der Referenz zu ST_OVERLAPS.

ST_INTERSECTS

Die ST_INTERSECTS-Funktion vergleicht zwei Geometrien. Wenn sich die Geometrien überschneiden, gibt die Funktion 1 zurück. Die Funktion gibt 0 zurück, wenn die Geometrien sich nicht überschneiden.

Die folgende Beispielabfrage verwendet ST_INTERSECTS, um zu ermitteln, ob eine asphaltierte Straße eine unbefestigte Straße kreuzt.

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

Eingabebeispiel

datacenterArea stormArea
{"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 Referenz zu ST_INTERSECTS.

ST_WITHIN

Die ST_WITHIN-Funktion ermittelt, ob sich eine Geometrie innerhalb einer anderen Geometrie befindet. Wenn die erste Geometrie in der letzten enthalten ist, gibt die Funktion 1 zurück. Die Funktion gibt 0 zurück, wenn sich die erste Geometrie nicht innerhalb der letzten Geometrie befindet.

Die folgende Beispielabfrage verwendet ST_WITHIN, um zu ermitteln, ob sich der Zielpunkt für eine Lieferung im Polygon des angegebenen Lagers befindet.

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

Eingabebeispiel

deliveryDestination 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 Referenz zu ST_WITHIN.

Nächste Schritte