Geospatial APIがアップデート。高度の設定が可能に!

2022年8月19日、Geospatial APIのアップデートが発表されました。

今回のアップデートにより緯度と経度を指定するだけで指定場所の高さを考慮し、任意の高さにオブジェクトを出現させることが可能となりました。

これまではGeospatial API単体で高度を取得する方法がありませんでした。
そのため緯度軽度を用いて他のサービスをから高度を割り出すか、スマートフォンの高さを基準にするなどの作業が必要であり、起伏のある場所でのAR表示には工夫が必要でした。
ここが改善され、より使いやすくなった形です。

どのように改善されたのか、早速見ていきましょう!

高度の設定

Geospatial APIの基本的なセットアップ・使い方はこちらの記事を参考にしてください。
また、公式ドキュメントはこちらになります。

高度の設定に関する手順はとても簡単です。
今まで座標を決めていたAddAnchorをResolveAnchorOnTerrainに変更、atitudeAboveTerrainの部分には地面からの高さ(m)を入力します。

      var anchor =
            AnchorManager.ResolveAnchorOnTerrain(
                latitude,
                longitude,
                1,  //地面からの高さ、1だと地面から1mの高さに表示される
                quaternion);

これだけで設定は完了です!

実際に試してみる

サンプル

サンプルもアップデートされており、「SET TERRAIN ANCHORS」のボタンが増えています。こちらを押すと、地面の高さにアンカーが設定されます。
Set ANCHOR(スマホの高さに設置)と比べると、違いがよくわかります。

任意の場所に設定してみる

高度の設定では1mの高さに設定しました。
スマホを地面スレスレにしたり、近くの建物の2階から起動したりしてみましたが、高さはほぼ変わらず、1m程度の場所に出現しました。

cubeの大きさは1m四方

こちらは下記のスクリプトで設置しています。

 public GameObject GeospatialAssetPrefab;
 public ARAnchorManager AnchorManager;
 public AREarthManager EarthManager;
 public double latitude;
 public double longitude;
 public Quaternion quaternion;


public void SetCube()
     {
         var cameraGeospatialPose = EarthManager.CameraGeospatialPose;
         var earthTrackingState = EarthManager.EarthTrackingState;
         if (earthTrackingState == TrackingState.Tracking)
         {
            var anchor =
              AnchorManager.ResolveAnchorOnTerrain(
              latitude, 
              longitude,
              1,    //地面からの高さ
              quaternion);
         var anchoredAsset = Instantiate(GeospatialAssetPrefab, anchor.transform);
    }
}

まとめ

ますます使い勝手がよくなったGeospatial API、今後予定されている機能として「3D Building Geometry」(建物に対してのオクルージョン)もあり、目が離せませんね。