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.

Tworzenie geofencingów

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.

Dane wyjściowe wyników na pulpicie nawigacyjnym usługi Power BI

Następne kroki