Úvod do geoprostorových funkcí Stream Analytics

Geoprostorové funkce v Azure Stream Analytics umožňují analytiku v reálném čase na streamování geoprostorových dat pro scénáře jako sdílená jízda, správa flotily, sledování majetku, geo-fence a sledování telefonních hovorů napříč mobilními stanicemi. Pomocí několika řádků kódu dotazu můžete vytvářet řešení, která využívají sedm vestavěných funkcí jazyka Stream Analytics Query Language (CreateLineString, CreatePolygon, CreatePoint, ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS a ST_WITHIN), které podporují všechny typy WKT a typy GeoJSON point, polygon a LineString. Tento článek popisuje každou funkci a ukazuje ukázkové dotazy, abyste je mohli aplikovat na svá vlastní streamovaná data.

Typy geometrie a pořadí souřadnic

Geoprostorové funkce pracují se třemi typy geometrie GeoJSON. Bod je jedno místo definované délkou a šířkou. LineString je uspořádaná množina dvou nebo více bodů, která tvoří souvislou linii, například trasu nebo silnici. Mnohoúhelník je uzavřený tvar, jehož hranice se uzavírá v počátečním bodě, například půdorys budovy nebo geografická hranice.

Funkce se dělí do dvou skupin. Konstruktorové funkce (CreatePoint, CreateLineString, a ) CreatePolygonvytvářejí geometrie z hodnot souřadnic ve vašich datech událostí. Relační funkce (ST_DISTANCE, ST_OVERLAPS, ST_INTERSECTS, a ST_WITHIN) porovnávají dvě geometrie a popisují, jak spolu souvisejí v prostoru.

V GeoJSONu jsou souřadnice uspořádány tak, že nejprve je uvedena zeměpisná délka a poté zeměpisná šířka, takže vstupní zeměpisná šířka a délka jsou ve výsledné geometrii uvedeny v opačném pořadí. Pochopení tohoto uspořádání spolu s orientací kruhu proti směru hodinových ručiček, kterou polygony vyžadují, vám pomůže předpovědět výstup každé funkce.

CreateLineString

CreateLineString je konstruktorová funkce, která vrací GeoJSON LineString, geometrii, která reprezentuje souvislou řadu bodů jako přímku na mapě. Přijímá dva nebo více bodů a spojuje je v pořadí, v jakém je uvádíte, což z něj činí přirozený způsob modelování tras, cest a úseků silnic ze streamovaných dat.

Následující příklad ilustruje toto chování kombinací tří bodů do LineStringu. První bod vychází ze streamování vstupních dat a ty ostatní dva definujete ručně.

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

Příklad vstupu

zeměpisná šířka zeměpisná délka
3.0 -10.2
-87.33 20,2321

Příklad výstupu

{"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] ]}

Další informace naleznete v referenčních informacích k CreateLineString.

CreatePoint

CreatePoint je konstruktorová funkce, která vrací bod GeoJSON z zeměpisné šířky a délky. Bod je nejzákladnější geometrie a představuje jedno místo na mapě, například aktuální polohu vozidla nebo majetku. Hodnoty zeměpisné šířky a délky musí být float datovým typem.

Následující příklad ilustruje toto chování vytvořením bodu z hodnot zeměpisné šířky a délky ve streamovaných vstupních datech.

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

Příklad vstupu

zeměpisná šířka zeměpisná délka
3.0 -10.2
-87.33 20,2321

Příklad výstupu

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

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

Pro více informací viz odkaz na CreatePoint .

CreatePolygon

CreatePolygon je konstruktorová funkce, která vrací GeoJSON polygon z množiny bodů. Polygon znázorňuje uzavřenou oblast na mapě, například půdorys budovy, obrys skladu nebo geografickou zónu. Pořadí bodů odpovídá pravotočivé orientaci kruhu, tedy proti směru hodinových ručiček: pokud si představíte, že přecházíte z jednoho bodu do druhého v pořadí, v jakém jste je deklarovali, střed mnohoúhelníku zůstává po celou dobu vlevo.

Následující příklad ilustruje toto chování vytvořením mnohoúhelníku ze tří bodů. První dva body definujete ručně a poslední bod vychází ze vstupních dat.

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

Příklad vstupu

zeměpisná šířka zeměpisná délka
3.0 -10.2
-87.33 20,2321

Příklad výstupu

{"type" : "Mnohoúhelník", "souřadnice" : [[ [-10.2, 3.0], [10.0, 10.0], [10.5, 10.5], [-10.2, 3.0] ]]}

{"type" : "Mnohoúhelník", "souřadnice" : [[ [20.2321, -87.33], [10.0, 10.0], [10.5, 10.5], [20.2321, -87.33] ]]}

Další informace najdete v referenci CreatePolygon.

ST_DISTANCE

ST_DISTANCE je relační funkce, která vrací vzdálenost mezi dvěma geometriemi v metrech. Pomáhá vám pochopit, jak blízko nebo daleko jsou dvě místa, což je užitečné pro situace blízkosti, jako jsou upozornění na blízká vozidla a výpočty servisní oblasti.

Následující příklad ukazuje, jak tuto funkci použít k identifikaci, kdy je čerpací stanice méně než 10 km od auta.

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

Pro více informací viz odkaz ST_DISTANCE .

ST_OVERLAPS

ST_OVERLAPS je relační funkce, která porovnává dvě geometrie a uvádí, zda sdílejí společnou oblast. Vrátí 1, když se geometrie překrývají, a 0, když se nepřekrývají. Tato funkce je užitečná pro detekci prostorových konfliktů, například když se nebezpečná zóna dotýká oblasti zájmu.

Následující příklad ukazuje, jak tuto funkci použít k identifikaci, kdy se budova nachází v možné zóně zaplavení.

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

Další příklad také používá ST_OVERLAPS k detekci, kdy bouře míří k autu.

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

Pro více informací viz odkaz ST_OVERLAPS .

ST_INTERSECTS

ST_INTERSECTS je relační funkce, která porovnává dvě geometrie a hlásí, zda se kříží nebo dotýkají. Vrátí 1, když se geometrie protínají, a 0, když se neprotínají. Tato funkce vám pomáhá zjistit, kde se cesty nebo oblasti setkávají.

Následující příklad ukazuje, jak tuto funkci použít k určení, zda asfaltová cesta protíná šotolinovou cestu.

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

Příklad vstupu

zpevněná silnice 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] ]}

Příklad výstupu

1

0

Další informace najdete v ST_INTERSECTS referenčních informacích.

ST_WITHIN

ST_WITHIN je relační funkce, která hlásí, zda je jedna geometrie plně obsažena v jiné. Vrací hodnotu 1, když se první geometrie nachází uvnitř druhé, a 0, když tomu tak není, což tvoří základ pro scénáře určování, zda se objekt nachází uvnitř oblasti, například pro geofencing a ověřování doručovacích zón.

Následující příklad ilustruje toto chování tím, že určuje, zda se cílový bod doručení nachází uvnitř daného skladového polygonu.

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

Příklad vstupu

cíl doručení warehouse
{"type":"Point", "coordinates": [76.6, 10.1]} {"type":"Mnohoúhelník", "souřadnice": [ [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":"Mnohoúhelník", "souřadnice": [ [10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0] ]}

Příklad výstupu

0

1

Další informace najdete v ST_WITHIN referenčních informacích.