Introduktion till Geospatiala funktioner i Stream Analytics
Geospatiala funktioner i Azure Stream Analytics möjliggör realtidsanalys för strömmande geospatiala data. Med bara några få kodrader kan du utveckla en lösning i produktionsklass för komplexa scenarier. Dessa funktioner stöder alla WKT-typer och GeoJSON Point, Polygon och LineString.
Exempel på scenarier som kan dra nytta av geospatiala funktioner är:
- Samåkning
- Hantering av vagnpark
- Tillgångar
- Geo-fäktning
- Telefonspårning mellan mobilwebbplatser
Stream Analytics Query Language har sju inbyggda geospatiala funktioner: CreateLineString, CreatePoint, CreatePolygon, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS och ST_WITHIN.
CreateLineString
Funktionen CreateLineString
accepterar punkter och returnerar en GeoJSON LineString, som kan ritas som en rad på en karta. Du måste ha minst två punkter för att skapa en LineString. LineString-punkterna ansluts i ordning.
Följande fråga använder CreateLineString
för att skapa en LineString med tre punkter. Den första punkten skapas från strömmande indata, medan de andra två skapas manuellt.
SELECT
CreateLineString(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5))
FROM input
Indataexempel
latitude | Longitud |
---|---|
3.0 | -10.2 |
-87.33 | 20.2321 |
Utdataexempel
{"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] ]}
Mer information finns i CreateLineString-referensen .
CreatePoint
Funktionen CreatePoint
accepterar en latitud och longitud och returnerar en GeoJSON-punkt som kan ritas på en karta. Dina latitud och longitud måste vara en flyttaldatatyp .
Följande exempelfråga använder CreatePoint
för att skapa en punkt med hjälp av latitud och longitud från strömmande indata.
SELECT
CreatePoint(input.latitude, input.longitude)
FROM input
Indataexempel
latitude | Longitud |
---|---|
3.0 | -10.2 |
-87.33 | 20.2321 |
Utdataexempel
{"type" : "Point", "coordinates" : [-10.2, 3.0]}
{"type" : "Point", "coordinates" : [20.2321, -87.33]}
Mer information finns i CreatePoint-referensen .
CreatePolygon
Funktionen CreatePolygon
accepterar punkter och returnerar en GeoJSON-polygonpost. Poängordningen måste följa höger ringorientering eller motsols. Tänk dig att gå från en punkt till en annan i den ordning de förklarades. Mitten av polygonen skulle vara till vänster hela tiden.
Följande exempelfråga använder CreatePolygon
för att skapa en polygon från tre punkter. De första två punkterna skapas manuellt och den sista punkten skapas från indata.
SELECT
CreatePolygon(CreatePoint(input.latitude, input.longitude), CreatePoint(10.0, 10.0), CreatePoint(10.5, 10.5), CreatePoint(input.latitude, input.longitude))
FROM input
Indataexempel
latitude | Longitud |
---|---|
3.0 | -10.2 |
-87.33 | 20.2321 |
Utdataexempel
{"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] ]]}
Mer information finns i CreatePolygon-referensen .
ST_DISTANCE
Funktionen ST_DISTANCE
returnerar avståndet mellan två geometrier i meter.
Följande fråga används ST_DISTANCE
för att generera en händelse när en bensinstation ligger mindre än 10 km från bilen.
SELECT Cars.Location, Station.Location
FROM Cars c
JOIN Station s ON ST_DISTANCE(c.Location, s.Location) < 10 * 1000
Mer information finns i referensen för ST_DISTANCE .
ST_OVERLAPS
Funktionen ST_OVERLAPS
jämför två geometrier. Om geometrierna överlappar returnerar funktionen 1. Funktionen returnerar 0 om geometrierna inte överlappar varandra.
Följande fråga använder ST_OVERLAPS
för att generera en händelse när en byggnad ligger inom en möjlig översvämningszon.
SELECT Building.Polygon, Building.Polygon
FROM Building b
JOIN Flooding f ON ST_OVERLAPS(b.Polygon, b.Polygon)
Följande exempelfråga genererar en händelse när en storm är på väg mot en bil.
SELECT Cars.Location, Storm.Course
FROM Cars c, Storm s
JOIN Storm s ON ST_OVERLAPS(c.Location, s.Course)
Mer information finns i referensen för ST_OVERLAPS .
ST_INTERSECTS
Funktionen ST_INTERSECTS
jämför två geometrier. Om geometrierna korsar varandra returnerar funktionen 1. Funktionen returnerar 0 om geometrierna inte korsar varandra.
I följande exempelfråga används ST_INTERSECTS
för att avgöra om en asfalterad väg korsar en grusväg.
SELECT
ST_INTERSECTS(input.pavedRoad, input.dirtRoad)
FROM input
Indataexempel
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] ]} |
Utdataexempel
1
0
Mer information finns i referensen för ST_INTERSECTS .
ST_WITHIN
Funktionen ST_WITHIN
avgör om en geometri finns inom en annan geometri. Om den första finns i den sista returnerar funktionen 1. Funktionen returnerar 0 om den första geometrin inte finns inom den sista.
I följande exempelfråga används ST_WITHIN
för att avgöra om leveransmålpunkten ligger inom den angivna lagerpolygonen.
SELECT
ST_WITHIN(input.deliveryDestination, input.warehouse)
FROM input
Indataexempel
deliveryDestination | Lager |
---|---|
{"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] ]} |
Utdataexempel
0
1
Mer information finns i referensen för ST_WITHIN .