Scenarier för geofencing och geospatial aggregering med Azure Stream Analytics

Med inbyggda geospatiala funktioner kan du använda Azure Stream Analytics för att skapa program för scenarier som vagnparkshantering, samåkning, anslutna bilar och tillgångsspårning.

Geofencing

Azure Stream Analytics stöder geofencing-beräkningar med låg fördröjning i realtid i molnet och IoT Edge körning.

Geofencing-scenario

Ett tillverkningsföretag måste spåra tillgångar på sina byggnader. De utrustade varje enhet med en GPS och vill få meddelanden om en enhet lämnar ett visst område.

Referensdata som används i det här exemplet har geofence-information för byggnaderna och de enheter som tillåts i var och en av byggnaderna. Kom ihåg att referensdata antingen kan vara statiska eller ändras långsamt. Statiska referensdata används för det här scenariot. En dataström genererar kontinuerligt enhets-ID:t och dess aktuella position.

Definiera geofences i referensdata

En geofence kan definieras med hjälp av ett GeoJSON-objekt. För jobb med kompatibilitetsversion 1.2 och senare kan geofences också definieras med hjälp av välkänd text (WKT) som NVARCHAR(MAX). WKT är en OGC-standard (Open Geospatial Consortium) som används för att representera rumsliga data i ett textformat.

De inbyggda geospatiala funktionerna kan använda definierade geofences för att ta reda på om ett element finns i eller från en specifik geofence-polygon.

Följande tabell är ett exempel på geofence-referensdata som kan lagras i Azure Blob Storage eller en Azure SQL tabell. Varje webbplats representeras av en geospatial polygon och varje enhet är associerad med ett tillåtet plats-ID.

SiteID SiteName Geofence AllowedDeviceID
1 "Redmond Byggnad 41" "POLYGON((-122.1337357922017 47.63782998329432,-122.13373042778369 47.637634793257305,-122.13346757130023 47.637642022530954,-122.13348902897235 47.637508280806806,-122.13361777500506 47.637508280806806,-122.13361241058703 47.63732393354484,-122.13265754417773 47.63730947490855,-122.13266290859576 47.637519124743164,-122.13302232460376 47.637515510097955,-122.13301696018573 47.63764925180358,-122.13272728161212 47.63764925180358,-122.13274873928424 47.63784082716388,-122.13373579220172 47.63782998329432))" "B"
2 "Redmond Byggnad 40" "POLYGON((-122.1336154507967 47.6366745947009,-122.13361008637867 47.636483015064535,-122.13349206918201 47.636479400347675,-122.13349743360004 47.63636372927573,-122.13372810357532 47.63636372927573,-122.13373346799335 47.63617576323771,-122.13263912671528 47.63616491902258,-122.13264985555134 47.63635649982525,-122.13304682248554 47.636367344000604,-122.13305218690357 47.63650831807564,-122.13276250832996 47.636497473929516,-122.13277323716602 47.63668543881025,-122.1336154507967 47.6366745947009))" "A"
3 "Redmond Byggnad 22" "POLYGON((-122.13611660248233 47.63758544698554,-122.13635263687564 47.6374083293018,-122.13622389084293 47.63733603619712,-122.13622389084293 47.63717699101473,-122.13581619507266 47.63692757827657,-122.13559625393344 47.637046862778135,-122.13569281345798 47.63714458985965,-122.13570890671207 47.637314348246214,-122.13611660248233 47.63758544698554)" "C"

Generera aviseringar med geofence

Enheter kan skicka sitt ID och sin plats varje minut via en ström som heter DeviceStreamInput. Följande tabell är en ström med indata.

Deviceid GeoPosition
"A" "POINT(-122.13292341559497 47.636318374032726)"
"B" "POINT(-122.13338475554553 47.63743531308874)"
"C" "POINT(-122.13354001095752 47.63627622505007)"

Du kan skriva en fråga som kopplar enhetsströmmen till geofence-referensdata och genererar en avisering varje gång en enhet är utanför en tillåten byggnad.

SELECT DeviceStreamInput.DeviceID, SiteReferenceInput.SiteID, SiteReferenceInput.SiteName 
INTO Output
FROM DeviceStreamInput 
JOIN SiteReferenceInput
ON st_within(DeviceStreamInput.GeoPosition, SiteReferenceInput.Geofence) = 0
WHERE DeviceStreamInput.DeviceID = SiteReferenceInput.AllowedDeviceID

Följande bild representerar geofences. Du kan se var enheterna är i enlighet med dataströmmens indata.

Skapa geofences

Enheten "C" finns i byggnads-ID 2, vilket inte är tillåtet enligt referensdata. Den här enheten ska finnas i byggnads-ID 3. Om du kör det här jobbet genereras en avisering för den här specifika överträdelsen.

Webbplats med flera tillåtna enheter

Om en plats tillåter flera enheter kan en matris med enhets-ID:n definieras i AllowedDeviceID och en User-Defined-funktion kan användas i WHERE -satsen för att kontrollera om strömenhetens ID matchar något enhets-ID i listan. Mer information finns i självstudien om JavaScript UDF för molnjobb och självstudien C# UDF för edge-jobb.

Geospatial aggregering

Azure Stream Analytics har stöd för geospatial aggregering med låg fördröjning i realtid i molnet och på IoT Edge-körning.

Geospatialt aggregeringsscenario

Ett taxiföretag vill bygga en realtidsapplikation för att vägleda sina taxichaufförer som letar efter åktur mot de områden i städerna som för närvarande upplever högre efterfrågan.

Företaget lagrar logiska regioner i staden som referensdata. Varje region definieras av RegionID, RegionName och Geofence.

Definiera geofences

Följande tabell är ett exempel på geofence-referensdata som kan lagras i Azure Blob Storage eller en Azure SQL tabell. Varje region representeras av en geospatial polygon, som används för att korrelera med begäranden som kommer från strömmande data.

Dessa polygoner är endast till för referens och representerar inte faktiska logiska eller fysiska stadsavgränsningar.

RegionID RegionName Geofence
1 "SoHo" "POLYGON((-74.00279525078275 40.72833625216264,-74.0054774597977 65 40.721929158663244,-74.00125029839018 40.7189368021899 4,-73.9957785919998 40.72521409075776,-73.9972377137039 40.72557184584898,-74.00279525078275 40.72833625216264)"
2 "Chinatown" "POLYGON((-73.99712367114876 40.71281582267133,-73.9901070123658 40.71336881907936,-73.99023575839851 40.71452359088633,-73.98976368961189 40.71554823078944,-73.99551434573982 40.717337246783735,-73.99480624255989 40.718491949759304,-73.99652285632942 40.719109951574,-73.99776740131233 40.7168005470334,-73.99903340396736 40.71727219249899,-74.00193018970344 40.71938642421256,-74.00409741458748 40.71688186545551,-74.00051398334358 40.71517415773184,- 74.0004281526551 40.714377212470005,-73.99849696216438 40.713450141693166,-73.99748845157478 40.71405192594819,-73.99712367114876 40.71281582267133))"
3 "Tribeca" "POLYGON((-74.01091641815208 40.72583120006787,-74.013384050445 78 40.71436586362705,-74.01370591552757 40.713617702123415,-74.00862044723533 40.711308107057235,-74.00194711120628 40.7194238654018,-74.01091641815208 40.72583120006787)"

Aggregera data över en tidsperiod

Följande tabell innehåller strömmande data från "rides".

UserID FromLocation ToLocation TripRequestedTime
"A" "POINT(-74.00726861389182 40.71610611981975)" "POINT(-73.98615095917779 40.703107386025835)" "2019-03-12T07:00:00Z"
"B" "POINT(-74.00249841021645 40.723827238895666)" "POINT(-74.01160699942085 40.71378884930115)" "2019-03-12T07:01:00Z"
"C" "POINT(-73.99680120565864 40.716439898624024)" "POINT(-73.98289663412544 40.72582343969828)" "2019-03-12T07:02:00Z"
"D" "POINT(-74.00741090068288 40.71615626755086)" "POINT(-73.97999843120539 40.73477895807408)" "2019-03-12T07:03:00Z"

Följande fråga kopplar enhetsströmmen till geofence-referensdata och beräknar antalet begäranden per region under en tidsperiod på 15 minuter varje minut.

SELECT count(*) as NumberOfRequests, RegionsRefDataInput.RegionName 
FROM UserRequestStreamDataInput
JOIN RegionsRefDataInput 
ON st_within(UserRequestStreamDataInput.FromLocation, RegionsRefDataInput.Geofence) = 1
GROUP BY RegionsRefDataInput.RegionName, hoppingwindow(minute, 15, 1)

Den här frågan matar ut ett antal begäranden varje minut under de senaste 15 minuterna per region i staden. Den här informationen kan enkelt visas av Power BI-instrumentpanelen eller skickas till alla drivrutiner som SMS-meddelanden via integrering med tjänster som Azure Functions.

Bilden nedan visar utdata från frågan till Power BI-instrumentpanelen.

Resultatutdata på Power BI-instrumentpanelen

Nästa steg