本日はMapSDK の勉強枠です。
とても簡単なことでしたが30分ほど沼にハマってしまったので記事にします。
〇任意のスクリプトで現在のマップの座標を取得する
MapSDKでは[MapRenderer]コンポーネントのLocationに任意の座標を入力することでその場所のマップデータを表示してくれます。
スクリプトで実行中に座標を代入する場合は以下のようにMapScene()を使用することでマップの座標を更新することができます。
MapRenderer _rendere.MapScene(new MapSceneOfLocationAndZoomLevel(LatLon latlon,float ZoomLevel));
今回は逆に現在表示している座標を取得します。
〇スクリプト
今回は以下のようなスクリプトを作成しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.Maps.Unity;
using Microsoft.Geospatial;
using Microsoft.MixedReality.Toolkit.Rendering;
public class WeatherDataGeter : MonoBehaviour
{
LatLon latLon;
MapRendererBase renderer;
// Start is called before the first frame update
void Start()
{
renderer = this.GetComponent<MapRendererBase>();
latLon = renderer.Center;
Debug.Log(latLon);
}
}
[MapRenderer]コンポーネントでは[Location]というブロックの中に[Latitude],[Longitude]を入力しますが、このLatLon(緯度経度)データは以下のように取り出します。
LatLon MapRenderer.Center

これによってLatLon型で現在の緯度経度が返されます。

〇応用
LatLon型は緯度経度の二つの引数をもった型ですが、その値はFloat型ではなくdouble型になっています。
そのため取得した緯度経度をvector2などで扱う場合変換が必要になります。
型を変換する際は以下のように処理を行います。
float _number = (float)_doubleNumber
これでvector2型としても座標を取り出すことができました。
public vector2 Locationなどでinspector上で見れるようにすることでも確認することができます。

以上でMapSDK for Unityで任意のスクリプトで現在の地図の座標を取得することができました。