Scenariusze agregacji geoprzestrzennych i geoprzestrzennych za pomocą usługi Azure Stream Analytics
Dzięki wbudowanym funkcjom geoprzestrzennym możesz użyć usługi Azure Stream Analytics do tworzenia aplikacji dla scenariuszy, takich jak zarządzanie flotą, udostępnianie przejazdów, połączone samochody i śledzenie zasobów.
Geofencing
Usługa Azure Stream Analytics obsługuje obliczenia geofencingu w czasie rzeczywistym w czasie rzeczywistym w chmurze i w środowisku uruchomieniowym IoT Edge.
Scenariusz geofencingu
Firma produkcyjna musi śledzić aktywa w swoich budynkach. Wyposażyli każde urządzenie z GPS i chcą otrzymywać powiadomienia, jeśli urządzenie opuści określony obszar.
Dane referencyjne używane w tym przykładzie zawierają informacje o geofencingu dla budynków i urządzeń, które są dozwolone w każdym z budynków. Należy pamiętać, że dane referencyjne mogą być statyczne lub powolne. Statyczne dane referencyjne są używane w tym scenariuszu. Strumień danych stale emituje identyfikator urządzenia i jego bieżące położenie.
Definiowanie geofencingów w danych referencyjnych
Geofencing można zdefiniować przy użyciu obiektu GeoJSON. W przypadku zadań ze zgodnością w wersji 1.2 lub nowszej można również zdefiniować geofencingi przy użyciu dobrze znanego tekstu (WKT) jako NVARCHAR(MAX)
. WKT to standard Open Geospatial Consortium (OGC), który służy do reprezentowania danych przestrzennych w formacie tekstowym.
Wbudowane funkcje geoprzestrzenne mogą używać zdefiniowanych geofencingów, aby dowiedzieć się, czy element znajduje się w określonym wielokącie geofencingu.
W poniższej tabeli przedstawiono przykład danych referencyjnych geofencingu, które mogą być przechowywane w usłudze Azure Blob Storage lub w tabeli Azure SQL. Każda witryna jest reprezentowana przez wielokąt geoprzestrzenny, a każde urządzenie jest skojarzone z dozwolonym identyfikatorem witryny.
Identyfikator witryny | Nazwa witryny | Geofence | AllowedDeviceID |
---|---|---|---|
1 | "Budynek Redmond 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 | "Budynek Redmond 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 | "Budynek Redmond 22" | "POLYGON(-122.1361660248233 47.63758544698554,-122.13635263687564 47.6374083293018,-122.13622389084293 47.6373603619712,-122.13622389084293 47.63717699101473,-122.13581619507266 147.63692757827657,-122.13559625393344 47.637046862778135,-122.13569281345798 47.63714458985965,-122.13570890671207 47.637314348246214,-122.1361660248233 47.6375854468554)" | "C" |
Generowanie alertów za pomocą geofencingu
Urządzenia mogą emitować swój identyfikator i lokalizację co minutę za pośrednictwem strumienia o nazwie DeviceStreamInput
. Poniższa tabela jest strumieniem danych wejściowych.
Deviceid | Położenie geograficzne |
---|---|
"A" | "POINT(-122.13292341559497 47.636318374032726)" |
"B" | "POINT(-122.13338475554553 47.63743531308874)" |
"C" | "POINT(-122.13354001095752 47.63627622505007)" |
Możesz napisać zapytanie, które łączy strumień urządzenia z danymi referencyjnymi geofencingu i generuje alert za każdym razem, gdy urządzenie znajduje się poza dozwolonym budynkiem.
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
Na poniższej ilustracji przedstawiono geofencingi. Możesz zobaczyć, gdzie urządzenia są zgodne z danymi wejściowymi strumienia.
Urządzenie "C" znajduje się wewnątrz budynku o identyfikatorze 2, który nie jest dozwolony zgodnie z danymi referencyjnymi. To urządzenie powinno znajdować się wewnątrz budynku o identyfikatorze 3. Uruchomienie tego zadania spowoduje wygenerowanie alertu dotyczącego tego konkretnego naruszenia.
Witryna z wieloma dozwolonymi urządzeniami
Jeśli witryna zezwala na wiele urządzeń, w klauzuli można zdefiniować AllowedDeviceID
tablicę identyfikatorów urządzeń, a w klauzuli można użyć WHERE
funkcji User-Defined w celu sprawdzenia, czy identyfikator urządzenia strumienia jest zgodny z dowolnym identyfikatorem urządzenia na tej liście. Aby uzyskać więcej informacji, zobacz samouczek funkcji zdefiniowanej przez użytkownika języka JavaScript dla zadań w chmurze i samouczek funkcji zdefiniowanej przez użytkownika języka C# dla zadań brzegowych.
Agregacja geoprzestrzenna
Usługa Azure Stream Analytics obsługuje agregację geoprzestrzenną w czasie rzeczywistym z małym opóźnieniem w chmurze i w środowisku uruchomieniowym IoT Edge.
Scenariusz agregacji geoprzestrzennych
Firma taksówkowa chce utworzyć aplikację w czasie rzeczywistym, aby poprowadzić kierowców taksówkarzy poszukujących jazdy w kierunku obszarów miast, w których obecnie występuje wyższe zapotrzebowanie.
Firma przechowuje logiczne regiony miasta jako dane referencyjne. Każdy region jest definiowany przez regionID, RegionName i Geofence.
Definiowanie geofencingów
W poniższej tabeli przedstawiono przykład danych referencyjnych geofencingu, które mogą być przechowywane w usłudze Azure Blob Storage lub w tabeli Azure SQL. Każdy region jest reprezentowany przez wielokąt geoprzestrzenny, który służy do korelowania żądań pochodzących z danych przesyłanych strumieniowo.
Te wielokąty są przeznaczone tylko do celów referencyjnych i nie reprezentują rzeczywistych separacji logicznych lub fizycznych miast.
Identyfikator regionu | Regionname | Geofence |
---|---|---|
1 | "SoHo" | "POLYGON(-74.00279525078275 40.72833625216264,-74.005477459797 40.72192915863244,-74.00125029839018 40.71893680218994,-73.9957785919998 40.72521409075776,-73.9972377137039 40.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.72583120006787,-74.013384050445578 40.71436586362705,-74.01370591552757 40.713617702123415,-74.00862044723533 40.711308107057235,-74.0019471120628 40.7194238654018,-74.01091641815208 40.72583120006787))" |
Agregowanie danych w przedziale czasu
Poniższa tabela zawiera dane przesyłane strumieniowo "rides".
UserID | Zlokalizacja | Lokalizacja do lokalizacji | TripRequestedTime |
---|---|---|---|
"A" | "POINT(-74.00726861389182 40.71610611981975)" | "POINT(-73.9861509591779 40.703107386025835)" | "2019-03-12T07:00:00Z" |
"B" | "POINT(-74.00249841021645 40.72382723895666)" | "POINT(-74.01160699942085 40.7137884930115)" | "2019-03-12T07:01:00Z" |
"C" | "POINT(-73.99680120565864 40.7164398986244024)" | "POINT(-73.98289663412544 40.72582343969828)" | "2019-03-12T07:02:00Z" |
„D” | "POINT(-74.00741090068288 40.71615626755086)" | "POINT(-73.97999843120539 40.7347895807408)" | "2019-03-12T07:03:00Z" |
Poniższe zapytanie łączy strumień urządzenia z danymi referencyjnymi geofencingu i oblicza liczbę żądań na region w przedziale czasu 15 minut co 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)
To zapytanie generuje liczbę żądań co minutę przez ostatnie 15 minut według każdego regionu w mieście. Te informacje można łatwo wyświetlać za pomocą pulpitu nawigacyjnego usługi Power BI lub mogą być emitowane do wszystkich sterowników jako wiadomości SMS za pośrednictwem integracji z usługami, takimi jak funkcje platformy Azure.
Na poniższej ilustracji przedstawiono dane wyjściowe zapytania do pulpitu nawigacyjnego usługi Power BI.