Руководство по настройке геозоны с помощью Azure Карты

В этом руководстве показано, как создавать и использовать службы геозон в Azure Maps.

Рассмотрим следующий сценарий:

Руководителю строительного объекта нужно отслеживать оборудование, которое пересекает периметр строительной зоны в любую сторону. Каждый раз, когда часть оборудования выходит или вводит эти периметры, уведомление по электронной почте отправляется в Operations Manager.

Azure Карты предоставляет услуги для поддержки отслеживания оборудования ввода и выхода из строительной области. При работе с этим руководством вы сделаете следующее:

  • Отправка данных о геозонах в формате GeoJSON, которые определяют отслеживаемый строительный объект. Вы отправите геозоны в качестве координат многоугольников в учетную запись хранения Azure, а затем используйте службу реестра данных для регистрации данных в учетной записи Azure Карты.
  • Настройка двух активируемых приложений логики, которые отправляют по электронной почте уведомления руководителю строительного объекта при пересечении оборудованием границ геозоны.
  • Применение Сетки событий Azure для подписки на события входа в геозону Azure Maps и выхода из нее. Вы настроите две подписки для событий веб-перехватчиков, которые вызывают конечные точки HTTP, определенные в этих двух приложениях логики. После этого Logic Apps будет отправлять уведомления по электронной почте о входе оборудования в геозону и выходе из нее.
  • Применение API поиска по геозоне для получения уведомлений о пересечении оборудованием границ геозоны.

Необходимые компоненты

В этом руководстве используется приложение Postman, но вы можете выбрать другую среду разработки API.

Важно!

В примерах URL-адресов замените {Your-Azure-Maps-Subscription-key} ключ подписки azure Карты.

Отправка данных о геозоне в формате GeoJSON

В этом руководстве показано, как отправить данные geofencing GeoJSON, содержащие данные FeatureCollection. FeatureCollection определяет две геозоны в виде многоугольников на строительном объекте. Для первой геозоны какие-либо ограничения, включая временные, отсутствуют. Вторую можно запрашивать только в рабочее время (с 9:00 до 17:00 по тихоокеанскому времени), и с 1 января 2022 года она будет недействительна. См. сведения о формате данных GeoJSON.

Создайте JSON-файл геозоны с помощью следующих данных геозоны. Этот файл будет отправлен в учетную запись хранения Azure далее.

{
   "type": "FeatureCollection",
   "features": [
     {
       "type": "Feature",
       "geometry": {
         "type": "Polygon",
         "coordinates": [
           [
             [
               -122.13393688201903,
               47.63829579223815
             ],
             [
               -122.13389128446579,
               47.63782047131512
             ],
             [
               -122.13240802288054,
               47.63783312249837
             ],
             [
               -122.13238388299942,
               47.63829037035086
             ],
             [
               -122.13393688201903,
               47.63829579223815
             ]
           ]
         ]
       },
       "properties": {
         "geometryId": "1"
       }
     },
     {
       "type": "Feature",
       "geometry": {
         "type": "Polygon",
         "coordinates": [
           [
             [
               -122.13374376296996,
               47.63784758098976
             ],
             [
               -122.13277012109755,
               47.63784577367854
             ],
             [
               -122.13314831256866,
               47.6382813338708
             ],
             [
               -122.1334782242775,
               47.63827591198201
             ],
             [
               -122.13374376296996,
               47.63784758098976
             ]
           ]
         ]
       },
       "properties": {
         "geometryId": "2",
         "validityTime": {
         "expiredTime": "2022-01-01T00:00:00",
         "validityPeriod": [
             {
               "startTime": "2020-07-15T16:00:00",
               "endTime": "2020-07-15T24:00:00",
               "recurrenceType": "Daily",
               "recurrenceFrequency": 1,
               "businessDayOnly": true
             }
           ]
         }
       }
     }
   ]
}

Выполните действия, описанные в статье "Создание реестра данных", чтобы отправить JSON-файл геозоны в учетную запись хранения Azure и зарегистрировать его в учетной записи Карты Azure.

Важно!

Обязательно запишите уникальное значение идентификатора (udid) вам потребуется. Вот udid как вы ссылаетесь на геозону, отправленную в учетную запись хранения Azure из исходного кода и HTTP-запросов.

Создание рабочих процессов в Azure Logic Apps

Затем создайте две конечные точки приложения логики, которые активируют уведомление по электронной почте.

Чтобы создать приложения логики, сделайте следующее.

  1. Войдите на портал Azure.

  2. В верхнем левом углу окна портала Azure щелкните Создать ресурс.

  3. В поле служба и Marketplace введите приложение логики.

  4. Из списка результатов выберите Приложение логики. Затем выберите Создать.

  5. На странице Приложение логики укажите следующее:

    • Подписка для этого приложения логики.
    • Группа ресурсов для этого приложения логики. Вы можете создать новую или использовать существующую группу ресурсов.
    • Имя приложения логики. В этом примере используется имя Equipment-Enter.
    • Выберите "Потребление " в качестве типа плана. Дополнительные сведения см. в разделе "Модели выставления счетов и ценообразования" в документации по приложению логики.

    Для работы с этим руководством оставьте значения по умолчанию для всех остальных параметров.

    Screenshot of create a logic app.

  6. По завершении нажмите кнопку "Просмотр и создание". После того, как Azure проверит сведения о ресурсе приложения логики, выберите Создать.

  7. Когда развертывание успешно завершится, щелкните Перейти к ресурсу.

  8. Выберите конструктор приложений логики в разделе "Средства разработки" в меню слева, прокрутите вниз до раздела "Пуск" с общим разделом триггера. Выберите При получении HTTP-запроса.

    Screenshot of create a logic app HTTP trigger.

  9. В правом верхнем углу конструктора приложений логики выберите Сохранить. Будет автоматически создан URL-адрес HTTP-запроса POST. Сохраните URL-адрес — Он понадобится для создания конечной точки события в следующем разделе.

    Screenshot of Logic App HTTP Request URL and JSON.

  10. Выберите + Создать шаг.

  11. В поле поиска введите outlook.com email. Прокрутите список Действия вниз и щелкните Отправка электронной почты (V2).

    Screenshot of create a logic app designer.

  12. Войдите в учетную запись Outlook. Выберите Да, чтобы разрешить приложению логики доступ к этой учетной записи. Заполните поля для отправки сообщения электронной почты.

    Screenshot of create a logic app send email step.

    Совет

    В уведомлениях по электронной почте можно получить данные ответов GeoJSON, например geometryId или deviceId. В Logic Apps можно настроить чтение данных, отправляемых службой "Сетка событий". Сведения о настройке Logic Apps для использования и передачи данных событий в Уведомления по электронной почте см. в руководстве по отправке Уведомления по электронной почте о событиях Центр Интернета вещей Azure с помощью Сетки событий и Logic Apps.

  13. В левом верхнем углу конструктора приложений логики выберите Сохранить.

  14. Чтобы создать второе приложение логики для информирования руководителя о выходе оборудования из строительной зоны, повторите приведенную выше процедуру. Присвойте этому приложению логики имя Equipment-Exit.

Создание подписок на события Azure Maps

Azure Maps поддерживает три типа событий. В этом руководстве показано, как создать подписки на следующие два события:

  • события входа в геозону;
  • события выхода из геозоны.

Создайте выход из геозоны и введите подписки на события:

  1. В учетной записи Azure Maps выберите Подписки.

  2. Выберите имя своей подписки.

  3. В меню "Параметры" выберите События.

    Screenshot of go to Azure Maps account events.

  4. На странице "События" щелкните +Подписка на события.

    Screenshot of create an Azure Maps events subscription.

  5. На странице Создание подписки на события укажите следующее:

    • Имя для этой подписки на события.
    • В поле Схема события выберите Схема Сетки событий.
    • Имя системного раздела для этой подписки на события (в данном случае это Contoso-Construction).
    • В фильтре по типам событий выберите тип события Geofence Entered.
    • В поле Тип конечной точки выберите Web Hook.
    • В поле Конечная точка вставьте URL-адрес созданной на предыдущем шаге конечной точки HTTP-запроса POST из приложения логики для событий входа, который вы получили ранее. Если вы забыли сохранить это значение, просто переключитесь в окно конструктора приложений логики и скопируйте адрес из шага создания триггера HTTP.

    Screenshot of Azure Maps events subscription details.

  6. Нажмите кнопку создания.

  7. Повторите эту процедуру для события выхода из геозоны. На шаге 3 обязательно выберите тип события Geofence Exited.

Использование API определения пространственной геозоны

Затем мы используем API получения пространственной геозоны для отправки Уведомления по электронной почте в Operations Manager, когда часть оборудования входит или выходит из геозоны.

Каждый элемент оборудования имеет deviceId. В этом примере будет отслеживаться только один элемент оборудования с уникальным идентификатором device_1.

На следующей схеме представлены пять расположений этого элемента оборудования с течением времени, начиная с позиции Начало, которая не входит в пределы наших геозон. В целях этого руководства расположение "Пуск" не определено, так как устройство не запрашивается в этом расположении.

При запросе API получения пространственной геозоны с расположением оборудования, которое указывает на начальную запись геозоны или выход, Сетка событий вызывает соответствующую конечную точку приложения логики для отправки уведомления электронной почты в Operations Manager.

Каждая из следующих секций выполняет запрос к API с разными координатами расположения оборудования.

Diagram of geofence map in Azure Maps

Расположение оборудования 1 (47,638237,-122,132483)

  1. В приложении Postman выберите New (Создать).

  2. В окне Create New (Создание) выберите HTTP Request (HTTP-запрос).

  3. Введите имя запроса, например Location 1.

  4. Выберите метод HTTP GET.

  5. Введите следующий URL-адрес: Запрос должен выглядеть следующим URL-адресом (замените {udid}udid сохраненным в разделе данных Upload GeoJSON геофенсинг).

    https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.638237&lon=-122.1324831&searchBuffer=5&isAsync=True&mode=EnterAndExit
    

    Примечание.

    Замените {geography} географическим область. Дополнительные сведения см. в статье azure Карты географические область и API получения пространственной геозоны.

  6. Выберите Отправить.

  7. Ответ должен выглядеть как приведенный ниже фрагмент GeoJSON:

    {
      "geometries": [
        {
          "deviceId": "device_1",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "1",
          "distance": -999.0,
          "nearestLat": 47.638291,
          "nearestLon": -122.132483
        },
        {
          "deviceId": "device_1",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "2",
          "distance": 999.0,
          "nearestLat": 47.638053,
          "nearestLon": -122.13295
        }
      ],
      "expiredGeofenceGeometryId": [],
      "invalidPeriodGeofenceGeometryId": [],
      "isEventPublished": true
    }
    

В предыдущем ответе GeoJSON отрицательное значение расстояния от основной геозоны объекта означает, что оборудование находится в этой геозоне. Положительное значение расстояния от дочерней геозоны означает, что оборудование находится за пределами этой геозоны. Так как это устройство впервые оказалось внутри главного сайта геозоны, для параметра isEventPublished задано значение true. Operations Manager получает уведомление по электронной почте о том, что оборудование ввело геозону.

Расположение 2 (47,63800,-122,132531)

  1. В приложении Postman выберите New (Создать).

  2. В окне Create New (Создание) выберите HTTP Request (HTTP-запрос).

  3. Введите имя запроса, например Location 2.

  4. Выберите метод HTTP GET.

  5. Введите следующий URL-адрес: Запрос должен выглядеть следующим URL-адресом (замените {udid}udid сохраненным в разделе данных Upload GeoJSON геофенсинг).

    https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udId={udId}&lat=47.63800&lon=-122.132531&searchBuffer=5&isAsync=True&mode=EnterAndExit
    
  6. Выберите Отправить.

  7. Ответ должен выглядеть как приведенный ниже фрагмент GeoJSON:

    {
      "geometries": [
        {
          "deviceId": "device_01",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "1",
          "distance": -999.0,
          "nearestLat": 47.637997,
          "nearestLon": -122.132399
        },
        {
          "deviceId": "device_01",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "2",
          "distance": 999.0,
          "nearestLat": 47.63789,
          "nearestLon": -122.132809
        }
      ],
      "expiredGeofenceGeometryId": [],
      "invalidPeriodGeofenceGeometryId": [],
      "isEventPublished": false
    }
    

В предыдущем ответе GeoJSON видно, что оборудование оставалось в основной геозоне объекта и не входило в дополнительную геозону. В результате isEventPublished параметр имеет falseзначение , и Operations Manager не получает никаких Уведомления по электронной почте.

Расположение 3 (47,63810783315048,-122,13336020708084)

  1. В приложении Postman выберите New (Создать).

  2. В окне Create New (Создание) выберите HTTP Request (HTTP-запрос).

  3. Введите имя запроса, например Location 3.

  4. Выберите метод HTTP GET.

  5. Введите следующий URL-адрес: Запрос должен выглядеть следующим URL-адресом (замените {udid}udid сохраненным в разделе данных Upload GeoJSON геофенсинг).

      https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.63810783315048&lon=-122.13336020708084&searchBuffer=5&isAsync=True&mode=EnterAndExit
    
  6. Выберите Отправить.

  7. Ответ должен выглядеть как приведенный ниже фрагмент GeoJSON:

    {
      "geometries": [
        {
          "deviceId": "device_01",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "1",
          "distance": -999.0,
          "nearestLat": 47.638294,
          "nearestLon": -122.133359
        },
        {
          "deviceId": "device_01",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "2",
          "distance": -999.0,
          "nearestLat": 47.638161,
          "nearestLon": -122.133549
        }
      ],
      "expiredGeofenceGeometryId": [],
      "invalidPeriodGeofenceGeometryId": [],
      "isEventPublished": true
    }
    

В предыдущем ответе GeoJSON видно, что оборудование оставалось в основной геозоне объекта, но вошло в дополнительную геозону. В результате для параметра isEventPublished будет задано значение true. Operations Manager получает уведомление по электронной почте, указывающее, что оборудование ввело геозону.

Примечание.

Если оборудование переходит в дополнительную геозону в нерабочее время, событие не публикуется и руководитель не получает уведомлений.

Расположение 4 (47,637988,-122,1338344)

  1. В приложении Postman выберите New (Создать).

  2. В окне Create New (Создание) выберите HTTP Request (HTTP-запрос).

  3. Введите имя запроса, например Location 4.

  4. Выберите метод HTTP GET.

  5. Введите следующий URL-адрес: Запрос должен выглядеть следующим URL-адресом (замените {udid}udid сохраненным в разделе данных Upload GeoJSON геофенсинг).

    https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.637988&userTime=2023-01-16&lon=-122.1338344&searchBuffer=5&isAsync=True&mode=EnterAndExit
    
  6. Выберите Отправить.

  7. Ответ должен выглядеть как приведенный ниже фрагмент GeoJSON:

    {
      "geometries": [
        {
          "deviceId": "device_01",
          "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
          "geometryId": "1",
          "distance": -999.0,
          "nearestLat": 47.637985,
          "nearestLon": -122.133907
        }
      ],
      "expiredGeofenceGeometryId": [
        "2"
      ],
      "invalidPeriodGeofenceGeometryId": [],
      "isEventPublished": false
    }
    

В предыдущем ответе GeoJSON видно, что оборудование оставалось в основной геозоне объекта, но вышло из дополнительной геозоны. Однако обратите внимание, что значение userTime превышает значение expiredTime, определенное в данных о геозоне. В результате isEventPublished для параметра задано falseзначение , и Operations Manager не получает уведомление по электронной почте.

Расположение 5(47,63799,-122,134505)

  1. В приложении Postman выберите New (Создать).

  2. В окне Create New (Создание) выберите HTTP Request (HTTP-запрос).

  3. Введите имя запроса, например Location 5.

  4. Выберите метод HTTP GET.

  5. Введите следующий URL-адрес: Запрос должен выглядеть следующим URL-адресом (замените {udid}udid сохраненным в разделе данных Upload GeoJSON геофенсинг).

    https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.63799&lon=-122.134505&searchBuffer=5&isAsync=True&mode=EnterAndExit
    
  6. Выберите Отправить.

  7. Ответ должен выглядеть как приведенный ниже фрагмент GeoJSON:

    {
      "geometries": [
      {
        "deviceId": "device_01",
        "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
        "geometryId": "1",
        "distance": -999.0,
        "nearestLat": 47.637985,
        "nearestLon": -122.133907
      },
      {
        "deviceId": "device_01",
        "udId": "64f71aa5-bbee-942d-e351-651a6679a7da",
        "geometryId": "2",
        "distance": 999.0,
        "nearestLat": 47.637945,
        "nearestLon": -122.133683
      }
      ],
      "expiredGeofenceGeometryId": [],
      "invalidPeriodGeofenceGeometryId": [],
      "isEventPublished": true
    }
    

В предыдущем ответе GeoJSON видно, что оборудование покинуло основную геозону объекта. В результате параметр имеет trueзначение , и Operations Manager получает уведомление по электронной почте, isEventPublished указывающее, что оборудование завершило геозону.

Вы также можете отправлять Уведомления по электронной почте с помощью сетки событий и Logic Apps. Дополнительные сведения см. в Сетка событий Azure обработчиков событий.

Очистка ресурсов

Нет ресурсов, требующих очистки.

Следующие шаги