HoloLens2で位置情報(WiFi)を取得する


はじめに

HoloLens2で位置情報(WiFi)を取得してみました。

UWPの公式ドキュメントはこちら
Get the user's location

ドキュメントに書いてあるサンプルのMapControlは参考にならない
MapControl

ドキュメントのコードが書かれているのはこっち↓↓↓
Geolocation

参考までに
WindowsでGPS(みちびき含む)から現在の座標を調べてみる

PowerAppsでも取得できる
PowerAppsの信号(Signals)を試してみた

開発環境

  • Windows10 PC
  • Unity 2019.4.1f1
  • MRTK 2.7.0(Microsoft.MixedReality.Toolkit.Unity.Foundation.2.7.0.unitypackage)

導入

1.Unityで新規プロジェクト作成。MRTKの設定、MapControlオブジェクト作成。位置情報を表示するため、MainCameraの下にTextMeshProのテキストを配置。

2.MapControlオブジェクトでAddComponent、MapController.csを作成。TextMeshProのテキストをMapControlのDebugTextにアタッチ。

MapController.cs
using System.Collections;
using System.Collections.Generic;
using System;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
#if UNITY_WSA && !UNITY_EDITOR
using Windows.Devices.Geolocation;
#endif
using TMPro;

public class MapController : MonoBehaviour
{
    public TextMeshProUGUI debugText;
    private uint _desireAccuracyInMetersValue = 0;

    // Start is called before the first frame update
    async void Start()
    {
        debugText.text = "Initialization.";

#if UNITY_WSA && !UNITY_EDITOR
        var accessStatus = await Geolocator.RequestAccessAsync();
        switch (accessStatus)
        {
            case GeolocationAccessStatus.Allowed:
                debugText.text = "Waiting for update...";
                Geolocator geolocator = new Geolocator { DesiredAccuracyInMeters = _desireAccuracyInMetersValue };
                Geoposition pos = await geolocator.GetGeopositionAsync();
                UpdateLocationData(pos);
                break;

            case GeolocationAccessStatus.Denied:
                debugText.text = "Access to location is denied.";
                break;

            case GeolocationAccessStatus.Unspecified:
                debugText.text = "Unspecified error.";
                UpdateLocationData(null);
                break;
        }
#endif
    }

#if UNITY_WSA && !UNITY_EDITOR
    private void UpdateLocationData(Geoposition position)
    {
        if (position == null)
        {
            debugText.text = "No data";
        }
        else
        {
            debugText.text = position.Coordinate.Point.Position.Latitude.ToString() + "\n" + position.Coordinate.Point.Position.Longitude.ToString();
        }
    }
#endif
}

3.Player SettingsのLocationにチェックを入れるのを忘れずに。HoloLens2のプライバシーの設定からアプリの位置情報をオンにする。

実行

お疲れ様でした。