教學課程:藉由使用 Azure 地圖服務執行 IoT 空間分析

IoT 案例通常會捕捉及追蹤在空間和時間中發生的相關事件。 範例包括車隊管理、資產追蹤、行動和智慧城市應用程式。 本教學課程會引導您了解使用 Azure 地圖服務 API 追蹤二手車租賃動向的解決方案。

在本教學課程中,您將:

  • 建立 Azure 儲存體帳戶記錄車輛以追蹤資料。
  • 將上傳地理柵欄至 Azure 儲存體帳戶。
  • 在 Azure IoT 中樞中建立中樞,然後註冊裝置。
  • 在 Azure Functions 中建立函式,並根據 Azure 地圖服務空間分析來實作商務邏輯。
  • 透過 Azure 事件方格從 Azure 函式訂閱 IoT 裝置遙測事件。
  • 使用 IoT 中樞訊息路由來篩選遙測事件。

必要條件

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

提示

您可以從 GitHub 下載整個 rentalCarSimulation C# 專案,方法是移至範例 的根目錄,然後選取綠色的 <> Code 按鈕,然後下載 ZIP

本教學課程使用 Postman 應用程式,但您可以選擇不同的 API 開發環境。

重要

在 URL 範例中,以您的 Azure 地圖服務訂用帳戶金鑰取代 {Your-Azure-Maps-Subscription-key}

使用案例:出租車追蹤

假設汽車出租公司想要記錄其車輛的位置資訊、行駛距離和發動狀態。 若車輛離開正確的授權地理區域時,公司也會希望儲存此資訊。

出租車輛配備了 IoT 裝置,會定期將遙測資料傳送至 IoT 中樞。 這些遙測資料包括目前的位置,且會指出車輛的引擎是否運轉中。 裝置位置結構描述會符合地理空間資料的 IoT 隨插即用結構描述。 出租車輛的裝置遙測結構描述顯示為如下的 JSON 程式碼:

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

在本教學課程中,您只會追蹤一台車輛。 設定 Azure 服務之後,您必須下載 rentalCarSimulation C# 專案,才能執行車輛模擬器。 下列步驟摘要說明從事件到函式執行的整個程序:

  1. 車輛內裝置會將遙測資料傳送至 IoT 中樞。

  2. 如果車輛引擎狀態為發動中,中樞會將遙測資料發佈到事件方格。

  3. 由於 Azure 函式的事件訂用帳戶屬於裝置遙測事件,因此會觸發 Azure 函式。

  4. 函式會記錄車輛裝置位置座標、事件時間和裝置識別碼。 然後會使用 Spatial Geofence Get API 來判斷車輛是否已行駛到地理柵欄之外。 如果已超出地理柵欄界限,函式會將從事件接收的位置資料儲存到 Blob 容器中。 函式也會查詢反向位址搜尋,將座標位置轉譯為街道位址,並連同其他裝置位置資料加以儲存。

下圖顯示系統的高階概觀。

系統概觀的圖表。

下圖以藍色標示的是地理柵欄區域。 出租車輛的路線會以綠色線表示。

顯示地理柵欄路由的圖。

建立 Azure 儲存體帳戶

為了儲存車輛違規追蹤資料,我們將在您的資源群組中建立一個一般用途 v2 儲存體帳戶。 如果您尚未建立資源群組,請依照建立資源群組中的指示進行。 將資源群組命名為 ContosoRental

若要建立儲存體帳戶,請依照建立儲存體帳戶中的指示進行。 在本教學課程中,將儲存體帳戶命名為 contosorentalstorage,但是一般而言您可以隨意使用任何您喜歡的名稱。

成功建立儲存體帳戶之後,您必須建立容器來儲存記錄資料。

  1. 移至您新建立的儲存體帳戶。 在 [基本資訊] 區段中,選取 [容器] 連結。

    Blob 記憶體容器的螢幕快照。

  2. 選取左上角的 [容器]。 面板就會顯示在瀏覽器右側。 將您的容器命名為 contoso-rental-logs 然後選取 [建立]

    建立 Blob 容器的螢幕快照。

  3. 在您的儲存體帳戶中移至 [存取金鑰] 窗格,並複製儲存體帳戶名稱和 [key1] 區段中的金鑰值。 您在建立函式並新增事件方格訂用帳戶區段中會需要這兩個值。

    複製記憶體帳戶名稱和金鑰的螢幕快照。

將上傳地理柵欄至 Azure 儲存體帳戶

地理柵欄會定義出租車輛的授權地理區域。 在 Azure 函式中使用地理柵欄,以判斷車輛是否已行駛到地理柵欄區域外。

請遵循如何建立資料登錄一文所述的步驟,將地理柵欄 JSON 資料檔案上傳至您的 Azure 儲存體帳戶,然後在 Azure 地圖服務帳戶中註冊。 請務必記下唯一識別碼 (udid) 值,之後的作業需要用到這個值。 udid 是您從原始程式碼參考上傳至 Azure 記憶體帳戶的地理柵欄的方式。 如需關於地理柵欄資料檔案的詳細資訊,請參閱地理柵欄 GeoJSON 資料

建立 IoT 中樞

IoT 中樞可保障 IoT 應用程式和其所管理裝置之間雙向通訊的安全性及可靠性。 針對本教學課程,您想要從車輛內裝置取得資訊,以判斷出租車輛的位置。 在本節中,您會在 ContosoRental 資源群組中建立 IoT 中樞。 此中樞繪負責發佈我們的裝置遙測事件。

若要在 ContosoRental 資源群組中建立 IoT 中樞,請依照建立 IoT 中樞中的步驟進行。

在 IoT 中樞註冊您的裝置

請先在 IoT 中樞身分識別登錄中註冊裝置,否則無法連線到 IoT 中樞。 建立名稱為 InVehicleDevice 的單一裝置。 若要在 IoT 中樞內建立和註冊裝置,請依照在 IoT 中樞中註冊新裝置中的步驟進行。 請務必複製您裝置的主要連接字串。 稍後您將需要此資訊。

建立函式並新增事件方格訂用帳戶

Azure Functions 是無伺服器計算服務,可讓您執行一小段程式碼 (稱為「函式」),而無須明確佈建或管理計算基礎結構。 若要深入了解,請參閱 Azure Functions

函式會由特定事件觸發。 建立由事件方格觸發程序觸發的函式。 建立 IoT 中樞裝置遙測事件的事件訂用帳戶,以建立觸發程序和功能之間的關聯性。 發生裝置遙測事件時,系統會將您的函式呼叫為端點,此端點會接收先前在 IoT 中樞中所註冊裝置的相關資料。

這裡是您的函式中包含的 C# 指令碼程式碼

現在,請設定您的 Azure 函式。

  1. 在 Azure 入口網站儀表板中,選取 [建立資源]。 在 [搜尋] 文字方塊中輸入函式應用程式。 選取 [函數應用程式]> [建立]

  2. 在 [函式應用程式建立] 頁面上,為您的函式應用程式命名。 在 [資源群組] 下的下拉式清單中選取 ContosoRental。 選取 .NET 作為執行階段堆疊。 選取頁面底部的 [下一步:儲存體]>

    建立函式應用程式的螢幕快照。

  3. 儲存體帳戶中,選取您在建立 Azure 儲存體帳戶中建立的儲存體帳戶。 選取 [檢閱 + 建立]。

  4. 檢閱函數應用程式詳細資料,然後選取 [建立]

  5. 建立應用程式後,您要為其新增函式。 返回函數應用程式。 選取 [在 Azure 入口網站中建立] 按鈕。

    重要

    Azure 事件中樞觸發程序Azure 事件方格觸發程序範本的名稱十分類似。 請確定您選取了 Azure 事件方格觸發程序範本。

    在 Azure 入口網站中建立函式的螢幕快照。

  6. [建立函式] 面板會隨即出現。 向下捲動 [選取範本] 面板,然後選取 [Azure 事件方格觸發程式],然後選取 [建立] 按鈕。

    建立函式的螢幕快照。

  7. 為函式命名。 在本教學課程中,使用名稱 GetGeoFunction,但是一般而言您可以使用任何您喜歡的名稱。 選取 [建立函式]

  8. 在左側功能表中,選取 [程式碼 + 測試] 窗格。 複製 C# 指令碼 並貼入程式碼視窗。

    將程式代碼貼到函式視窗中的複製/螢幕快照。

  9. 在 C# 程式碼中,取代下列參數:

    • SUBSCRIPTION_KEY 取代為您的 Azure 地圖服務帳戶訂用帳戶金鑰。
    • 以您在上傳地理柵欄中上傳的地理柵欄至 Azure 儲存體帳戶 udid 取代 UDID
    • 指令碼中的 CreateBlobAsync 函式會在資料儲存體帳戶中為每個事件建立一個 Blob。 將 ACCESS_KEYACCOUNT_NAMESTORAGE_CONTAINER_NAME 取代為您儲存體帳戶的存取金鑰、帳戶名稱和資料儲存體容器。 當您在建立 Azure 儲存體帳戶中建立儲存體帳戶時,會產生這些值 。
  10. 在左側功能表中,選取 [整合] 窗格。 選取圖表中的 [事件方格觸發程序]。 輸入觸發程序的名稱 eventGridEvent,然後選取 [建立事件方格訂用帳戶]

    新增事件訂用帳戶的螢幕快照。

  11. 填妥訂用帳戶詳細資料。 為事件訂用帳戶命名。 針對「事件結構描述」,選取 [事件方格結構描述]。 針對主題類型,請選取 [Azure IoT 中樞帳戶]。 針對資源群組,選取您一開始為此教學課程建立的資源群組。 針對資源,請選取您在「建立 Azure IoT 中樞」中所建立的 IoT 中樞。針對事件種類篩選,選取 [裝置遙測]

    選擇這些選項後,您會看到主題類型自動變更為「IoT 中樞」。 針對系統主題名稱,您可以使用與資源相同的名稱。 最後,在 [端點詳細資料] 區段中選取 [選取端點]。 接受所有設定,然後選取 [確認選取]

    建立事件訂用帳戶的螢幕快照。

  12. 檢閱您的設定。 請確定端點指定您在本節開頭所建立的函式。 選取 建立

    建立事件訂閱確認的螢幕快照。

  13. 現在您已經回到編輯觸發程序面板。 選取 [儲存]。

使用 IoT 中樞訊息路由來篩選事件

當您將事件方格訂用帳戶新增至 Azure 函式時,系統會在指定的 IoT 中樞內自動建立訊息路由。 訊息路由可讓您將不同的資料類型路由至不同的端點。 例如,您可以路由裝置遙測訊息、裝置生命週期事件和裝置對應項變更事件。 如需詳細資訊,請參閱使用 IoT 中樞訊息路由

IoT 中樞訊息路由的螢幕快照。

在範例案例中,您只想要在出租車輛移動時收到訊息。 建立路由查詢,篩選在 Engine 屬性等於 「ON」的事件。 若要建立路由查詢,請選取 RouteToEventGrid 路由,並將路由查詢取代為 "Engine='ON'"。 然後選取儲存。 IoT 中樞現在只會發佈引擎已開啟的裝置遙測。

篩選路由訊息的螢幕快照。

提示

有各種方式可查詢 IoT 裝置到雲端的訊息。 若要深入了解訊息路由語法,請參閱 IoT 中樞訊息路由

將遙測資料傳送至 IoT 中樞

當 Azure 函式執行後,您即可把遙測資料傳送至 IoT 中樞,這會將其路由至事件方格。 使用 C# 應用程式為出租車輛的載具內裝置模擬位置資料。 若要執行此應用程式,您的開發電腦上必須有 .NET SDK 6.0。 請依照下列步驟,將模擬的遙測資料傳送至 IoT 中樞:

  1. 如果您尚未這麼做,請下載 rentalCarSimulation C# 專案。

  2. 在您選擇的文字編輯器中開啟 simulatedCar.cs 檔案,並將 connectionString 的值取代為您在註冊裝置時所儲存的值。 儲存檔案的變更。

  3. 確定您已在電腦上安裝 ASP.NET Core 執行階段。 在您的本機終端機視窗中,移至 C# 專案的根目錄,並執行下列命令以安裝模擬裝置應用程式所需的套件:

    dotnet restore
    
  4. 在相同的終端機中執行下列命令,以建置並執行出租車輛的模擬應用程式:

    dotnet run
    

您的本地終端應該如以下的螢幕擷取畫面。

終端機輸出的螢幕快照。

如果您現在開啟 Blob 儲存體容器,應該可以看到四個位置 Blob,分別顯示車輛已超出地理柵欄範圍。

檢視容器內 Blob 的螢幕快照。

下圖顯示位於地理柵欄之外的四部車輛位置點。 每個位置都是以固定時間間隔記錄。

違規地圖的螢幕快照。

探索 Azure 地圖服務和 IoT

若要探索本教學課程中使用的 Azure 地圖服務 API,請參閱:

如需 Azure 地圖服務 REST API 的完整清單,請參閱:

若要取得 Azure 認證的 IoT 裝置清單,請造訪:

清除資源

沒有任何資源需要清除。

下一步

若要深入了解如何將裝置傳送至雲端遙測或執行反向作業,請參閱: