Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Благодаря встроенным геопространственным функциям вы можете использовать Azure Stream Analytics для создания приложений для таких сценариев, как управление транспортным парком, общий доступ к маршрутам, подключенные автомобили и отслеживание ресурсов.
Геозоны
Azure Stream Analytics поддерживает вычисления геозон в режиме реального времени с малой задержкой в облаке и в среде выполнения IoT Edge.
Сценарий геозон
Производственной компании необходимо отслеживать ресурсы в своих зданиях. Ее работники оборудовали каждое устройство службой GPS и хотят получать уведомления, если устройство покидает определенную область.
Справочные данные, используемые в этом примере, содержат информацию о геозонах для зданий и устройств, разрешенных в каждом из зданий. Помните, что эталонные данные могут быть либо статичными, либо медленно меняющимися. Для этого сценария используются статические эталонные данные. Поток данных постоянно выдает идентификатор устройства и его текущую позицию.
Определение геозон в эталонных данных
Геозоны можно определить с помощью объекта GeoJSON. Для заданий с версией совместимости 1.2 и более поздних геозоны также можно определить с помощью значения в формате WKT, например NVARCHAR(MAX). WKT — это стандарт Открытого геопространственного консорциума (OGC), который используется для представления пространственных данных в текстовом формате.
Встроенные геопространственные функции могут использовать определенные геозоны, чтобы выяснить, находится ли элемент внутри или вне определенного многоугольника геозоны.
В указанной ниже таблице приведен пример эталонных данных геозоны, которые могут храниться в хранилище BLOB-объектов Azure или в таблице Azure SQL. Каждый участок представлен геопространственным многоугольником, а каждое устройство связано с идентификатором разрешенного участка.
| SiteID | SiteName | Геозона | 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.63758544698554,-122.13635263687564 47.6374083293018,-122.13622389084293 47.63733603619712,-122.13622389084293 47.63717699101473,-122.13581619507266 47.63692757827657,-122.13559625393344 47.637046862778135,-122.13569281345798 47.637144458985965,-122.13570890671207 47.637314348246214,-122.13611660248233 47.63758544698554))" | "C" |
Создание оповещений с помощью геозоны
Устройства могут выдавать свои идентификаторы и расположения каждую минуту через поток с именем DeviceStreamInput. Приведенная ниже таблица представляет собой поток входных данных.
| DeviceID | GeoPosition |
|---|---|
| "A" | "POINT(-122.13292341559497 47.636318374032726)" |
| "B" | "POINT(-122.13338475554553 47.63743531308874)" |
| "C" | "POINT(-122.13354001095752 47.63627622505007)" |
Вы можете написать запрос, который объединяет поток устройства с эталонными данными геозоны и создает предупреждение каждый раз, когда устройство находится за пределами разрешенного здания.
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
На следующем изображении представлены геозоны. Вы можете увидеть, где находятся устройства в соответствии с потоком входных данных.
Устройство "C" находится внутри здания ID 2, что не разрешено в соответствии с эталонными данными. Это устройство должно находиться внутри здания ID 3. При выполнении этого задания будет создано оповещение для этого конкретного нарушения.
Участок с несколькими разрешенными устройствами
Если на участке разрешено использование нескольких устройств, в AllowedDeviceID можно определить массив идентификаторов устройств, а в предложении WHERE можно использовать определяемую пользователем функцию, чтобы проверить, соответствует ли идентификатор потокового устройства идентификатору устройства в этом списке. Дополнительные сведения см. в руководстве по JavaScript UDF для облачных заданий и в руководстве по C# UDF для заданий Edge.
Геопространственное агрегирование
Azure Stream Analytics поддерживает геопространственное агрегирование в режиме реального времени с малой задержкой в облаке и в среде выполнения IoT Edge.
Сценарий геопространственной агрегации
Таксомоторная компания хочет создать приложение, работающее в режиме реального времени, чтобы направлять своих таксистов в районы городов с повышенный спросом.
Логические регионы города хранятся в компании в качестве эталонных данных. Каждый регион определяется с помощью RegionID, RegionName и геозоны.
Определение геозон
В указанной ниже таблице приведен пример эталонных данных геозоны, которые могут храниться в хранилище BLOB-объектов Azure или в таблице Azure SQL. Каждый регион представлен геопространственным многоугольником, который используется для сопоставления с запросами, поступающими из потоковых данных.
Эти многоугольники предназначены только для справки и не представляют фактическое логическое или физическое сегментирование города.
| RegionID | RegionName | Геозона |
|---|---|---|
| 1 | "SoHo" | "POLYGON((-74.00279525078275 40.72833625216264,-74.00547745979765 40.721929158663244,-74.00125029839018 40.71893680218994,-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.01338405044578 40.71436586362705,-74.01370591552757 40.713617702123415,-74.00862044723533 40.711308107057235,-74.00194711120628 40.7194238654018,-74.01091641815208 40.72583120006787))" |
Агрегирование данных за период времени
В следующей таблице содержатся потоковые данные "вызовов":
| 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" |
Следующий запрос объединяет поток устройства с эталонными данными геозоны и вычисляет количество запросов на регион во временном окне длительностью 15 минут каждую минуту.
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)
Этот запрос выводит количество запросов каждую минуту за последние 15 минут по каждому региону в городе. Эти сведения можно легко отобразить на панели мониторинга Power BI или передать всем водителям в виде текстовых SMS-сообщений благодаря интеграции с такими службами, как Функции Azure.
На изображении ниже показан вывод запроса на панель мониторинга Power BI.