Open7

PLATEAUの「Google Geospatial APIで位置情報による3D都市モデルのARを作成」を試してみた

KidoYutaKidoYuta

ARCore Geospatial APIを使ってみたかったので、PLATEAUの記事をそのまま試してみる
https://www.mlit.go.jp/plateau/learning/tpc14-3/

自分はiOSしか持っていな方のでiOSでの環境で進める。

記事を読み進めていて問題が起きたところや差異があったところだけ投稿する

KidoYutaKidoYuta

14.3.2 _ Unityプロジェクトの準備

記事内のUnityの想定バージョンはUnity 2021.3 LTSでしたが、
今回の環境はUnity 2022.3.39f1

■ Unityプロジェクトの作成

[2]ターゲットビルドプラットフォームを選択する

Unityのインストール環境によっては、AndroidやiOSの環境が入っていないのでインストールから始まる。
Androidは問題なくインストールできたが、iOSはCocoaPodsのインストールに問題が起きたので別途対処。

1. PATHの追加:

まず、警告メッセージに示されているパスをPATHに追加します。

echo 'export PATH="$PATH:/Users/xxxxxx/.gem/ruby/2.6.0/bin"' >> ~/.zshrc
source ~/.zshrc

私の環境では.zshrcですが、一般的には.bash_profileかもしれないですね

2. Rubyのバージョン確認:

ruby --version

古いバージョンの場合は、最新版にアップデートすることを検討してください。

3. RubyGemsのアップデート:

gem update --system

4. 指定されたdrbバージョンのインストール:

gem install drb -v 2.0.6

5. CocoaPodsの再インストール:

gem install cocoapods

permissionの問題があれば都度sudoを追記して実行すれば問題なくインストールされました。

KidoYutaKidoYuta

■ APIキーの適用とソースコードの修正

[2] ソースコードを修正する

画像では「GeospatialController.csの末尾」とあるが、実際には1416,1417行目をコメントアウトした。

記事内でのARCore Extensionsのバージョンは1.35.0でしたが、今回インストールしたサンプルARCore Extensionsのバージョンは1.45.0でしたので差異があった模様。

[3] ビルドの設定

「Geospatialシーンをビルドするように設定する」のが若干記事だとわかりづらかったですが、AssetsのScenesにあるGeospatialArf4.unityをSceneで開いておいて、Add Open Scenes押すことで登録された。

ただ、Buildするとエラーが起きる。

まず一つはCamera Usage Descriptionが空白になっていること。
BuildFailedException: ARKit requires a Camera Usage Description (Player Settings > iOS > Other Settings > Camera Usage Description)

以下に解決方法

  1. メニューから「Edit」→「Project Settings」を選択。
  2. 左側のメニューから「Player」を選択。
  3. 「Player」設定の中で、「iOS」タブを選択。
  4. 「Other Settings」セクションを展開。
  5. 「Camera Usage Description」フィールドを見つける。ない場合は、「Identification」セクションの下にある「+」ボタンをクリックして追加。
  6. 「Camera Usage Description」フィールドに、アプリがカメラを使用する理由を説明するテキストを入力します。例えば: "This app uses the camera for augmented reality features."
  7. 変更を保存し、再度ビルドを試みる。

他に「Microphone Usage Description」「Location Usage Description」という項目もあるので、これらもテキストを入力する必要があるかもしれません。

実際Location Usage Descriptionが空欄になっているとエラーが出たので以下を入力したところ、ビルドは成功しました。
"This app uses your location to provide location-based AR experiences."

KidoYutaKidoYuta

iOSの実機で見るためにXcodeでビルドしたアプリをデプロイしようとしたが「Framework 'ARCoreBase.xcframework' not found」のエラーで沼った。

原因としては、xxxxx.xcodeproj をXcodeで開いてデプロイしたのが間違いで、xxxxx.xcworkspace の方を開いてデプロイするのが正しいようでした。

デプロイ後、 iPhoneで確認しようとすると「信頼されていないデベロッパ」のダイアログが出る。
これはiPhoneの「設定 -> 一般 -> VPNとデバイス管理」から信頼するように設定できます。

これで実機確認までができました。

KidoYutaKidoYuta

その後の方法がこれまでのトピックでやってきたことのおさらいになるっぽいのでそれをやってきてからまたやり方とかまとめる

KidoYutaKidoYuta

地域メッシュと緯度経度と標高の調べ方

地域メッシュ

jSTAT MAP
https://jstatmap.e-stat.go.jp/trialstart.html
ダウンロードした土地のファイル名には「53394525」のような8桁の数値があります。
ファイル名だけではどの地域なのか不明ですが、jSTAT MAPを使用することでエリアを特定できます。

右上の表示設定から、「3次メッシュ」を選択

選択後、「ラベル」にチェック

するとエリアごとにラベルが左上に記載されます

緯度経度

平面直角座標への換算
https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/bl2xyf.html
数値入力がデフォルトですが、数値が分からなければ「地図上で選択」で下部の地図から目的地点にポイントを合わせて、「計算実行」すると、計算結果として緯度経度や平面直角座標なんかも取れる

標高

地理院地図 / GSI Maps | 国土地理院
https://maps.gsi.go.jp/#18/35.689826/139.693661/&base=std&ls=std&disp=1&vs=c1g1j0h0k0l1u0t0z0r0s0m0f1
真ん中のカーソルに目的地を合わせ、画面上左下末端に標高が表示される。

KidoYutaKidoYuta

PLATEAUのメッシュデータ

一般社団法人 社会基盤情報流通推進協議会$都市局$3D都市モデル(Project PLATEAU)
都市局 - 組織
https://www.geospatial.jp/ckan/organization/toshi

必要ファイル形式をダウンロードできる

UnityならSDKがあるのでこっちも使える
https://github.com/Project-PLATEAU/PLATEAU-SDK-for-Unity/releases
リリースの中の**.tgz**をダウンロードし、UnityのPackage Managerにインポートする。