7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft FormsとArcGIS for PowerBIで地理空間分析

Last updated at Posted at 2024-12-17

この記事はNTTテクノクロスアドベントカレンダー2024、シリーズ 1 の18日目の記事です。

こんにちは、NTTテクノクロスの中島進也(なかしょ)と申します。
普段はAndroid, iOSのモバイルアプリ開発を担当しています。

本記事ではモバイルアプリとMicrosoft FormsとArcGIS for PowerBIを連携して害獣報告マップを作製してみたいと思います。

まずはMicrosoft Formsでアンケート作成

Microsoft Formsの項目作成については割愛いたします。
以下のようなアンケートを作成しました。

Forms.png

緯度経度の入力はどうする?

このアンケートのURLに単純に飛んだだけだと、緯度経度の入力に困ります。
Microsoft Formsには事前入力済みURL(Pre-filled URL)という機能があります。
この機能は特定の値を事前に入力しておくものなのですが、ちょっと工夫することで動的にデータを入力することができます。

事前入力済みURLの取得.png

編集画面のメニューから「事前入力済みURLの取得」を選択し、

有効にする.png

表示された画面で「事前入力済みの回答を有効にする」のスイッチを有効にし、緯度、経度、日付に事前入力を実施したのちに、生成されたリンクをコピーします。

URLコピー.png

取得できたURLは以下となります。

https://forms.office.com/Pages/ResponsePage.aspx
?id=xxxxxxxxxxxxxxxxxxxxxxxxxxx
&rcde153e75e314b0e8e0e7c17cce1ace8=%222024-10-26%22     <<日付
&rd6cfb194b7ac41b283ad9f62df18e661=35.69816   <<緯度
&ref1e612319e640af82c27781219b52a7=139.762689  <<経度

パラメータ名は16進数の文字列で分かりづらいですが、自分で入力した値でどのパラメータか判別可能です。
事前入力しなかった場合はパラメータとして付与されないのでご注意ください。

この事前パラメータを使用してモバイルアプリからMicrosoft Formsのページへ飛ばすようにします。

モバイルアプリ(Android)

MapLibre というOSSのライブラリを活用して地図を表示し、地図上で選択した緯度経度をFormsに送るようにします。
MapLibreにはaddOnMapLongClickListenerというロングタップ時にその地点の緯度経度を取得してイベントを起こす機能があります。
以下のようにロングタップのイベントから受け取った緯度経度をダイアログ画面に渡します。

map.addOnMapLongClickListener { latLng ->
    val fragment = supportFragmentManager.fragmentFactory.instantiate(
        ClassLoader.getSystemClassLoader(),
        OpenFormsFragment::class.java.name
    ) as BottomSheetDialogFragment
    fragment.arguments = Bundle().apply {
        putDouble("latitude", latLng.latitude)
        putDouble("longitude", latLng.longitude)
    }
    fragment.show(supportFragmentManager, null)

    true
}


渡された画面で渡された緯度経度と、現在時刻を埋め込んだMicrosoft Formsの事前入力済みURLを作成します。

private fun openForms(latitude: Double, longitude: Double) {
    val dateString = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        DateTimeFormatter.ofPattern("uuuu-MM-dd").format(ZonedDateTime.now())
    } else {
        ""
    }
    val url = "https://forms.office.com/Pages/ResponsePage.aspx?" +
            "id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
            "&rcde153e75e314b0e8e0e7c17cce1ace8=%22$dateString%22" +
            "&rd6cfb194b7ac41b283ad9f62df18e661=$latitude" +
            "&ref1e612319e640af82c27781219b52a7=$longitude"
    val intent = Intent().apply {
        action = Intent.ACTION_VIEW
        data = Uri.parse(url)
    }
    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
    requireContext().startActivity(intent)
}

作成したアプリでは地図をタップすると以下のようなダイアログが開き、「報告する」ボタンを押すことで、緯度経度と現在時刻をパラメータに含めたURLでMicrosoft Formsが開きます。

Screenshot_1734279483.png

緯度経度と現在時刻を埋め込んで表示されたMicrosoft Formsの画面は以下です。

FormsMobile.png

こうやって、たくさんの報告が集まるとします。

集まった害獣報告

緯度経度と関連付けられた報告の一覧です。

報告一覧.png

ArcGIS for PowerBI で報告を可視化

ArcGIS for PowerBIはPowerBIに標準で搭載されており、ArcGIS Onlineのアカウントでログインして使用できます。
ArcGIS Onlineは無料で使うこともできます。

PowerBIの管理画面で、Microsoft Formsで入力されたデータが保存されたExcelファイルを読み込んで、地図の緯度経度等を関連付けます。
すると登録された報告情報が地図上に点で表示されます。

PowerBI関連付け.png

表示された点をマウスでロールオーバーするとツールチップとして登録した内容が表示されます。

ツールチップ.png

簡単ですが害獣報告を分析できる地図ができました。

最後に

今回は獣害報告を例にしましたが、ユーザに何かを報告してもらって地図上に表示して分析することは色々と応用が利きそうです。
皆さんも何か試してみてはいかがでしょうか?

明日は @teru-y さんの「【AWS】StepFunctions+EMR構成のメリットとおススメ設定」です。
引き続き、NTTテクノクロスアドベントカレンダーをお楽しみください。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?