Scenari di aggregazione geofencing e geospaziali con Analisi di flusso di Azure

Con funzioni geospaziali predefinite, è possibile usare Analisi di flusso di Azure per creare applicazioni per scenari come la gestione della flotta, la condivisione delle corse, le auto connesse e il rilevamento degli asset.

Geofencing

Analisi di flusso di Azure supporta calcoli geofencing in tempo reale a bassa latenza nel cloud e nel runtime di IoT Edge.

Scenario di geofencing

Un'azienda manifatturiera deve tenere traccia degli asset nei loro edifici. Hanno dotato ogni dispositivo con un GPS e vogliono ricevere notifiche se un dispositivo lascia una determinata area.

I dati di riferimento usati in questo esempio contengono le informazioni di geofence per gli edifici e i dispositivi consentiti in ognuno degli edifici. Tenere presente che i dati di riferimento potrebbero essere statici o lente. I dati di riferimento statici vengono usati per questo scenario. Un flusso di dati genera continuamente l'ID dispositivo e la relativa posizione corrente.

Definire geofences nei dati di riferimento

È possibile definire un geofence usando un oggetto GeoJSON. Per i processi con compatibilità versione 1.2 e versioni successive, è anche possibile definire geofences usando Il testo noto (WKT) come NVARCHAR(MAX). WKT è uno standard Open Geospatial Consortium (OGC) usato per rappresentare i dati spaziali in un formato testuale.

Le funzioni geospaziali predefinite possono usare geofences definite per scoprire se un elemento si trova o fuori da un poligono di geofence specifico.

La tabella seguente è un esempio di dati di riferimento di geofence che possono essere archiviati nell'archivio BLOB di Azure o in una tabella Azure SQL. Ogni sito è rappresentato da un poligono geospaziale e ogni dispositivo è associato a un ID sito consentito.

Siteid SiteName Recinto virtuale AllowedDeviceID
1 "Redmond Building 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 Building 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 Building 22" "POLYGON(-122.13611660248233 47.6375854698554,-122.1363526352687564 47.6374083293018,-122.136622389084293 47.6373603603619712,-122.13622389084293 47.63717699101473,-122.1358161950726 6 47.63692757827657,-122.1355962539344 47.63704662778135,-122.13569281345798 47.63714445558985965,-122.13570890671207 47.637314348246214,-122.1361660248233 47.6375854698554)) "C"

Generare avvisi con geofence

I dispositivi possono generare l'ID e la posizione ogni minuto tramite un flusso denominato DeviceStreamInput. La tabella seguente è un flusso di input.

DeviceID Geoposition
"A" "POINT(-122.13292341559497 47.636318374032726)"
"B" "POINT(-122.1333847555553 47.63743531308874)"
"C" "POINT(-122.13354001095752 47.63627622505007)"

È possibile scrivere una query che unisce il flusso del dispositivo ai dati di riferimento di geofence e genera un avviso ogni volta che un dispositivo non è all'esterno di un edificio consentito.

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

L'immagine seguente rappresenta i geofences. È possibile vedere dove i dispositivi sono conformi all'input dei dati di flusso.

Creazione di geofences

Il dispositivo "C" si trova all'interno dell'ID edificio 2, che non è consentito in base ai dati di riferimento. Questo dispositivo deve trovarsi all'interno dell'ID edificio 3. L'esecuzione di questo processo genererà un avviso per questa violazione specifica.

Sito con più dispositivi consentiti

Se un sito consente più dispositivi, è possibile definire AllowedDeviceID una matrice di ID dispositivo e una funzione User-Defined può essere usata nella clausola per verificare se l'ID WHERE dispositivo di flusso corrisponde a qualsiasi ID dispositivo in tale elenco. Per altre informazioni, visualizzare l'esercitazione sull'UDF JavaScript per i processi cloud e l'esercitazione sull'UDF C# per i processi perimetrali.

Aggregazione geospaziale

Analisi di flusso di Azure supporta l'aggregazione geospaziale in tempo reale a bassa latenza nel cloud e nel runtime di IoT Edge.

Scenario di aggregazione geospaziale

Un'azienda cab vuole creare un'applicazione in tempo reale per guidare i conducenti dei taxi che cercano di guidare verso le aree delle città che attualmente riscontrano una maggiore domanda.

L'azienda archivia le aree logiche della città come dati di riferimento. Ogni area viene definita da un RegionID, RegionName e Geofence.

Definire i geofences

La tabella seguente è un esempio di dati di riferimento di geofence che possono essere archiviati nell'archivio BLOB di Azure o in una tabella Azure SQL. Ogni area è rappresentata da un poligono geospaziale, usato per correlare con le richieste provenienti dai dati di streaming.

Questi poligoni sono solo per riferimento e non rappresentano le separazioni logiche o fisiche effettive della città.

RegionID RegionName Recinto virtuale
1 "SoHo" "POLYGON((-74.00279525078275 40.72833625216264,-74.00547459797777 40.721929158663244,-74.00125029839018 40.71893680218994,-73.9957785919998 40.72521409075776,-73.9972377137039 4 72557184584898,-74.00279525078275 40.7283362521626264))
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.7258312006787,-74.013384050445578 40.71436586362705,-74.01370591552757 40.713617702123415 -74.00862044723533 40.711308107057235,-74.00194711120628 40.7194238654018,-74.01091641815208 40.7258312006787))

Aggregare i dati in un intervallo di tempo

La tabella seguente contiene i dati di streaming di "ride".

UserID FromLocation ToLocation TripRequestedTime
"A" "POINT(-74.00726861389182 40.7161061981975)" "POINT(-73.98615095917779 40.703107386025835)" "2019-03-12T07:00:00Z"
"B" "POINT(-74.00249841021645 40.7238238238895666)" "POINT(-74.01160699942085 40.7137888884930115)" "2019-03-12T07:01:00Z"
"C" "POINT(-73.99680120565864 40.716439898624024)" "POINT(-73.9828963412544 40.72582343969828)" "2019-03-12T07:02:00Z"
"D" "POINT(-74.007410906828288 40.71615626755086)" "POINT(-73.979999843120539 40.73477895807408)" "2019-03-12T07:03:00Z"

La query seguente unisce il flusso del dispositivo ai dati di riferimento del recinto virtuale e calcola il numero di richieste per area in un intervallo di tempo di 15 minuti ogni minuto.

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)

Questa query restituisce un conteggio delle richieste ogni minuto per gli ultimi 15 minuti per ogni area all'interno della città. Queste informazioni possono essere visualizzate facilmente dal dashboard di Power BI o possono essere trasmesse a tutti i driver come sms tramite l'integrazione con servizi come funzioni di Azure.

L'immagine seguente illustra l'output della query nel dashboard di Power BI.

Output dei risultati nel dashboard di Power BI

Passaggi successivi