Dela via


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 .

Nästa steg