Azure Maps を使用してジオフェンスを設定するSet up a geofence by using Azure Maps

このチュートリアルでは、Azure Maps を使用してジオフェンスを設定する基本的な手順について説明します。This tutorial walks you through the basics steps to set up geofence by using Azure Maps. 建設現場の管理者は、危険を伴うおそれのある機材が、指定された建設領域から出ないよう監視します。このチュートリアルでは、そうした管理者を支援するシナリオについて取り上げます。The scenario we address in this tutorial is help construction site managers monitor potential hazardous equipment moving beyond the designated construction areas. 建設現場には高価な機材が存在し、規制も伴います。A construction site involves expensive equipment and regulations. そのような機材は通常、建設現場内に留め、許可なく持ち出されることのないようにする必要があります。It typically requires that the equipment stays inside the construction site and does not leave without permission.

Azure Maps Data Upload API を使用してジオフェンスを保存し、Azure Maps の Geofence API を使用して、ジオフェンスを基準とした機材の位置をチェックします。We will use Azure Maps Data Upload API to store a geofence, and use Azure maps Geofence API to check the equipment location relative to the geofence. Azure Event Grid を使用してジオフェンスの結果をストリーム配信し、ジオフェンスの結果に基づく通知を設定します。We will use Azure Event Grid to stream the geofence results and set up a notification based on the geofence results. Event Grid の詳細については、Azure Event Grid に関するページを参照してください。To learn more about Event Grid, see Azure Event Grid. このチュートリアルでは、次の方法を学習します。In this tutorial you will learn, how to:

  • Data Upload API を使用して Azure Maps のデータ サービスにジオフェンス領域をアップロードする。Upload geofence area in the Azure Maps, Data service using the Data Upload API.
  • ジオフェンス イベントを処理する Event Grid を設定する。Set up an Event Grid to handle geofence events.
  • ジオフェンス イベントのハンドラーを設定する。Setup geofence events handler.
  • ジオフェンス イベントに反応するアラートを Logic Apps を使用して設定する。Set up alerts in response to geofence events using Logic Apps.
  • Azure Maps のジオフェンス サービス API シリーズを使用して、建設用資産が建設現場内に存在するかどうかを追跡する。Use Azure Maps geofence service APIs to track whether a construction asset is within the construction site or not.

前提条件Prerequisites

Azure Maps アカウントを作成するCreate an Azure Maps account

このチュートリアルの手順を実行する前に、アカウントとキーの管理に関するページを参照して、S1 価格レベルのアカウント サブスクリプションを作成、管理する必要があります。To complete the steps in this tutorial, you first need to see manage account and keys to create and manage your account subscription with S1 pricing tier.

ジオフェンスのアップロードUpload geofences

Data Upload API を使用して建設現場のジオフェンスをアップロードするには、postman アプリケーションを使用します。To upload the geofence for the construction site using the Data Upload API, we will use the postman application. このチュートリアルの目的上、建設現場の全体的な領域が存在することを前提としており、この領域は、建設機材が確実に遵守すべきパラメーターです。For the sake of this tutorial, we assume there is an overall construction site area, which is a hard parameter that the construction equipment should not violate. このフェンスを越えることは重大な違反であり、Operations Manager にレポートされます。Violations of this fence are a serious offense and are reported to the Operations Manager. 最適化した一連のフェンスを追加で使用すれば、全体的な建設領域内の異なる建設領域をスケジュールに従って追跡することができます。An optimized set of additional fences can be used that track different construction areas within the overall construction area as per schedule. メインのジオフェンスにはサブサイト 1 があるものとします。サブサイト 1 には設定された有効期限があり、それを過ぎると期限切れになります。We can assume that the main geofence has a subsite1, which has a set expiration time and will expire after that time. 実際の要件に従って、入れ子になったジオフェンスをさらに作成することができます。You can create more nested geofences as per your requirements. たとえば、サブサイト 1 はスケジュールの第 1 週から第 4 週にかけて作業が発生し、サブサイト 2 は第 5 週から第 7 週にかけて作業が発生するという具合です。For example, subsite1 could be where work is taking place during week 1 to 4 of the schedule and subsite 2 is where work takes place during week 5 to 7. そのすべてのフェンスを単一のデータセットとしてプロジェクトの最初に読み込んでおき、時間と空間に基づくルールの追跡に使用することができます。All such fences can be loaded as a single dataset at the beginning of the project and used to track rules based on time and space. ジオフェンスのデータ形式の詳細については、ジオフェンスの GeoJSON データに関するページを参照してください。For more information on geofence data format, see Geofence GeoJSON data. Azure Maps サービスへのデータのアップロードの詳細については、Data Upload API のドキュメントを参照してください。For more information on uploading data to the Azure Maps service, see Data Upload API documentation .

Azure Maps の Data Upload API を使用して建設現場のジオフェンスをアップロードするには、Postman アプリを開いて次の手順に従います。Open the Postman app and follow the following steps to upload the construction site geofence using the Azure Maps, Data Upload API.

  1. Postman アプリを開き、[new](新規)、[Create new](新規作成) の順にクリックして、[Request](要求) を選択します。Open the Postman app and click new | Create new, and select Request. ジオフェンス データのアップロードに対する要求名を入力して、これを保存するコレクションまたはフォルダーを選択し、[Save](保存) をクリックします。Enter a Request name for Upload geofence data, select a collection or folder to save it to, and click Save.

    Postman を使用してジオフェンスをアップロードする

  2. [builder](ビルダー) タブで POST HTTP メソッドを選択し、POST 要求を行うための次の URL を入力します。Select POST HTTP method on the builder tab and enter the following URL to make a POST request.

    https://atlas.microsoft.com/mapData/upload?subscription-key={subscription-key}&api-version=1.0&dataFormat=geojson
    

    URL パス内の GEOJSON パラメーターは、アップロードするデータの形式を表します。The GEOJSON parameter in the URL path represents the data format of the data being uploaded.

  3. [Params](パラメーター) をクリックして、POST 要求の URL に使用する次のキーと値のペアを入力します。Click Params, and enter the following Key/Value pairs to be used for the POST request URL. subscription-key の値は、実際の Azure Maps のサブスクリプション キーに置き換えてください。Replace subscription-key value with your Azure Maps subscription key.

    Postman のキーと値のペアから成るパラメーター

  4. [Body](本文) をクリックして未加工入力形式を選択し、入力形式として JSON をドロップダウン リストから選択します。Click Body then select raw input format and choose JSON as the input format from the dropdown list. アップロードするデータとして次の JSON を入力します。Provide the following JSON as data to be uploaded:

    {
       "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": "2019-01-15T00:00:00",
               "validityPeriod": [
                 {
                   "startTime": "2019-01-08T01:00:00",
                   "endTime": "2019-01-08T17:00:00",
                   "recurrenceType": "Daily",
                   "recurrenceFrequency": 1,
                   "businessDayOnly": true
                 }
               ]
             }
           }
         }
       ]
    }
    
  5. [send](送信) をクリックして、応答ヘッダーを確認します。Click send and review the response header. 今後使用するためにデータをダウンロードしたりデータにアクセスしたりするための URI は、location ヘッダーに格納されます。The location header contains the URI to access or download the data for future use. また、アップロードされたデータの一意の udId もそこに格納されます。It also contains a unique udId for the uploaded data.

    https://atlas.microsoft.com/mapData/{udId}/status?api-version=1.0&subscription-key={Subscription-key}
    

イベント ハンドラーの設定Set up an event handler

Operations Manager に enter イベントと exit イベントを通知するには、通知を受け取るイベント ハンドラーを作成する必要があります。To notify the Operations Manager regarding enter and exit events, we should create an event handler that receives the notifications.

ここでは、enter イベントと exit イベントを処理するための 2 つの Logic Apps サービスを作成します。We will create two Logic Apps services to handle, enter, and exit events. さらに、これらのイベントによってトリガーされるイベント トリガーを Logic Apps 内に作成します。We will also create event triggers within the Logic Apps that get triggered by these events. 建設現場に対して機材が出し入れされたときに Operations Manager にアラート (この場合はメール) を送信することがそのねらいです。The idea is to send alerts, in this case emails to the Operations Manager whenever equipment enters or exits the construction site. 次の図は、ジオフェンスの enter イベントに使用するロジック アプリの作成を示します。The following figure illustrates creation of a Logic App for geofence enter event. 同様に、exit イベント用にもう 1 つ作成できます。Similarly, you can create another one for exit event. 詳細については、サポートされているすべてのイベント ハンドラーに関するページを参照してください。You can see all supported event handlers for more info.

  1. Azure portal でロジック アプリを作成します。Create a Logic App in Azure portal

    ロジック アプリを作成する

  2. HTTP 要求トリガーを選択し、Outlook Connector のアクションとして [電子メールの送信] を選択しますSelect an HTTP request trigger and then select "send an email" as an action in the outlook connector

    Logic Apps スキーマ

  3. ロジック アプリを保存して HTTP URL エンドポイントを生成し、HTTP URL をコピーします。Save the logic app to generate the HTTP URL endpoint and copy the HTTP URL.

    Logic Apps エンドポイント

Azure Maps イベントのサブスクリプションの作成Create an Azure Maps Events subscription

Azure Maps では、3 種類のイベントがサポートされています。Azure Maps supports three event types. Azure Maps でサポートされるイベントの種類は、こちらで確認できます。You can have a look at the Azure Maps supported event types here. ここでは、サブスクリプションを 2 つ作成します。1 つは enter イベント用で、もう 1 つは exit イベント用です。We will create two different subscriptions, one for enter and the other for exit events.

以下の手順に従って、ジオフェンスの enter イベント用にサブスクリプションを作成します。Follow the steps below to create an event subscription for the geofence enter events. ジオフェンスの exit イベントも同様の方法でサブスクライブできます。You can subscribe to geofence exit events in a similar manner.

  1. こちらのポータル リンクから Azure Maps アカウントに移動し、[イベント] タブを選択します。Navigate to your Azure Maps account via this portal link and select the events Tab.

    Azure Maps の [イベント]

  2. イベント サブスクリプションを作成するには、[イベント] ページの [イベント サブスクリプション] を選択します。To create an event subscription, select Event Subscription from the events page.

    Azure Maps のイベント サブスクリプション

  3. イベント サブスクリプションに名前を付け、イベントの種類として Enter をサブスクライブします。Name the events subscription, and subscribe to the Enter event type. 次に、[エンドポイントのタイプ] として [Web hook] を選択し、ロジック アプリの HTTP URL エンドポイントを [エンドポイント] にコピーします。Now, select Web Hook as "Endpoint Type" and copy your Logic App HTTP URL endpoint into "Endpoint"

    イベント サブスクリプション

Geofence API の使用Use Geofence API

Geofence API を使用すると、デバイス (機材は状態の一部) がジオフェンスの内側にあるのか外側にあるのかを確認することができます。You can use the Geofence API to check whether a device (equipment is part of status) is inside or outside a geofence. ジオフェンスの GET API に対する理解を深めるために、To better understand the geofence GET API. 特定の機材が時間の経過に伴って移動される状況下で、さまざまな場所を照会します。We query it against different locations where a particular equipment has moved over time. 次の図は、一意のデバイス ID を持つ特定の建設機材が時系列で観察された 5 つの場所を示したものです。The following figure illustrates five locations of a particular construction equipment with a unique device id as observed in chronological order. 5 つの場所はそれぞれ、フェンスに対する enter と exit の状態の変化を評価する目的で使用されます。Each of these five locations is used to assess the geofence enter and exit status change against the fence. 状態の変化が生じた場合、ジオフェンス サービスからイベントがトリガーされ、そのイベントが Event Grid によってロジック アプリに送信されます。If a state change occurs, the geofence service triggers an event, which is sent to the Logic App by the Event Grid. その結果、対応する enter または exit の通知が、作業の管理者にメールで送信されます。As a result the operation's manager will receive the corresponding enter or exit notification via an email.

注意

前述のシナリオと動作は、同じデバイス ID に基づくものです。以下の図にある 5 つの場所が、この ID で示されます。The above scenario and behavior is based on the same device id so that it reflects the five different locations as in the figure below.

ジオフェンス マップ

Postman アプリで、先ほど作成したコレクションの新しいタブを開きます。In the Postman app, open a new tab in the same collection you created above. [builder](ビルダー) タブで GET HTTP メソッドを選択します。Select GET HTTP method on the builder tab:

以下は、5 つの HTTP GET Geofencing API 要求です。それぞれ、機材が時系列で観察された場所の対応する座標を指定しています。Following are five HTTP GET Geofencing API requests, with different corresponding location coordinates of the equipment as observed in chronological order. それぞれの要求に続けて応答本文を示しています。Each request is followed by the response body.

  1. 場所 1:Location 1:

    https://atlas.microsoft.com/spatial/geofence/json?subscription-key={subscription-key}&api-version=1.0&deviceId=device_01&udId={udId}&lat=47.638237&lon=-122.1324831&searchBuffer=5&isAsync=True&mode=EnterAndExit
    

    ジオフェンス クエリ 1

    上の応答を見ると、メイン ジオフェンスからの距離が負数になっていますが、これは機材がメイン ジオフェンス内にあることを意味します。サブサイトのジオフェンスからの距離は正数になっていることから、サブサイトのジオフェンスの外にあることがわかります。If you look at the response above, the negative distance from the main geofence means that the equipment is inside the geofence and the positive from the subsite geofence means that it is outside the subsite geofence.

  2. 場所 2:Location 2:

    https://atlas.microsoft.com/spatial/geofence/json?subscription-key={subscription-key}&api-version=1.0&deviceId=device_01&udId={udId}&lat=47.63800&lon=-122.132531&searchBuffer=5&isAsync=True&mode=EnterAndExit
    

    ジオフェンス クエリ 2

    前の JSON 応答をよく見ると、機材がサブサイトの外側、かつメイン フェンスの内側にあります。If you look at the preceding JSON response carefully the equipment is outside the subsite, but is inside the main fence. この場合は、イベントがトリガーされず、メールは送信されません。It does not trigger an event and no email is sent.

  3. 場所 3:Location 3:

    https://atlas.microsoft.com/spatial/geofence/json?subscription-key={subscription-key}&api-version=1.0&deviceId=device_01&udId={udId}&lat=47.63810783315048&lon=-122.13336020708084&searchBuffer=5&isAsync=True&mode=EnterAndExit
    

    ジオフェンス クエリ 3

    状態の変化が発生しました。機材はメイン ジオフェンスの内側、かつサブサイト ジオフェンスの内側にあります。A state change has occurred and now the equipment is within both the main and subsite geofences. これによりイベントが発行され、Operations Manager には通知メールが送信されます。This publishes an event and a notification email will be sent to the Operations Manager.

  4. 場所 4:Location 4:

    https://atlas.microsoft.com/spatial/geofence/json?subscription-key={subscription-key}&api-version=1.0&deviceId=device_01&udId={udId}&lat=47.637988&lon=-122.1338344&searchBuffer=5&isAsync=True&mode=EnterAndExit
    

    ジオフェンス クエリ 4

    対応する応答をよく観察すると、機材がサブサイト ジオフェンスから出たにもかかわらず、イベントが発行されていません。By observing the corresponding response carefully, you can note that no event gets published here even though the equipment has exited the subsite geofence. ユーザーが GET 要求で指定した時刻を見てみると、この時刻に対して、サブサイト ジオフェンスは有効期限が切れており、また、機材は依然としてメイン ジオフェンス内に存在することがわかります。If you look at the user's specified time in the GET request, you can see that the subsite geofence has expired relative to this time and the equipment is still in the main geofence. また、サブサイト ジオフェンスのジオメトリ ID は応答本文の expiredGeofenceGeometryId で確認できます。You can also see the geometry ID of the subsite geofence under expiredGeofenceGeometryId in the response body.

  5. 場所 5:Location 5:

    https://atlas.microsoft.com/spatial/geofence/json?subscription-key={subscription-key}&api-version=1.0&deviceId=device_01&udId={udId}&lat=47.63799&lon=-122.134505&userTime=2019-01-16&searchBuffer=5&isAsync=True&mode=EnterAndExit
    

    ジオフェンス クエリ 5

    建設現場のメイン ジオフェンスから機材が移動されたことが確認できます。You can see that the equipment has left the main construction site geofence. これによってイベントが発行されます。これは重大な違反であるため、Operations Manager には、重要なアラート メールが送信されます。It publishes an event, it is a serious violation, and a critical alert email is sent to the Operations Manager.

次の手順Next steps

このチュートリアルでは、Data Upload API を使用して Azure Maps のデータ サービスにジオフェンスをアップロードすることで、ジオフェンスを設定する方法を学習しました。In this tutorial you learned, how to set up geofence by uploading it in the Azure Maps, Data service using the Data Upload API. また、Azure Maps の Event Grid を使用してジオフェンス イベントをサブスクライブし、処理する方法も学習しました。You also learned how to use Azure Maps Events Grid to subscribe to and handle geofence events.