5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

全国1000箇所にARシーンを展開する

5
Last updated at Posted at 2025-12-13

ARシーンを全国1000カ所に展開する

STYLY Advent Calendar 2025 の13日目の記事です。

本記事では、STYLYを使って全国1000カ所にARシーンを展開する手法をご紹介したいと思います。

この手法を用いることで、例えば全国の○○飲食店全店舗の屋上に広告を出すとか、ご飯の3Dモデルを表示することが出来ます。

もくじ

  • 位置を決める
    • 住所から緯度経度へ変換
    • 高度を取得する
    • 配置場所を決める
    • 高度を再計算する
  • 配置する
    • STYLYシーンを1000個作る
    • コンテンツを置き換える

使ったツールなど

Google Spreadsheet
Google Apps Script
Google Geocoding API
国土地理院 標高API

AWS EventBridge Scheduler
AWS Lambda

Unity
Cesium for Unity

STYLY

位置を決める

大まかな流れとしては次の通りです。
1.ざっくりとした配置場所をリスト化
2.Cesium for Unityでリスト内要素を1カ所ずつ読み込み
3.Unity上で具体的な配置場所(緯度,経度,高さ)を指定し保存

住所から緯度経度へ変換

Google Geocoding APIを使って住所から緯度経度を求める

配置場所の住所は事前にわかっていると思うので、GoogleGeocodingAPIから緯度経度を取得します。
ただただ住所を渡して緯度経度へ変換するだけのシンプルな処理です。

ただし、該当箇所が大型商業施設内の一角だったり、棟が別だったり、そもそも全然違うところを返されたりなど、1/50くらいの確率で正しくない地点を示されてしまうので、ここは後々手作業で修正が必要です。

住所だけではなく店舗名などの情報もある場合には、Google Places APIも有効です。
店舗名からPlacesAPI使って同様に緯度経度を取得し、住所から取得した緯度経度情報との差を比べることで、明らかに誤りのある地点を効率よく探すこともできます。
(どっちみち最終的に人間が見ないといけないことに変わりはない...)

ここが間違っていると後々手戻りが発生して面倒くさいので、めちゃめちゃ確認しましょう!!

これらの値は後々Unityに読み込ませて使うため、csv形式で次のように保存しました。

緯度,経度,郵便番号,住所

緯度経度地点の高度を取得

前のステップで求めた緯度経度をCesiumで読み込む際には楕円体高が必要です。
ジオイド高 + 標高で楕円体高を求めていきます。

国土地理院の標高APIとGeoidHeightsDotNetを使って求めました。

国土地理院APIの対応外地域(海外)では、Google Elevation APIが有効です。

ここまでの準備を経てようやくCesiumに読み込ませることが出来ます。

この時点でのcsvは↓のような感じ。
緯度,経度,楕円体高,郵便番号,住所

配置場所を決める

この辺のガイドに従ってセットアップをします。

10カ所くらいならコピペ読み込みでいいのですが、今回は1000カ所もあります。
効率的に作業するために、次のような仕組みを作りました。

A/Dキーで読み込むindexの切り替え, indexの手入力, クリックで配置場所指定, W/Sキーでの高さ調整などなど

image.png

実際に何を置くか決まっていなくても、大きささえ合っていればいいのでCylinderを配置オブジェクトに見立てて位置調整を行っていきます。
場所の調整はGameViewでのクリックで、高さ調整はキーボードで行うことにしました。
場所調整と高さ調整を別々で行うことで、キーボード<-->マウス間での手の移動を最大限抑えることが出来ます!

写真右下らへんにある高さ調整用カメラは、ニアクリップをいい感じに設定すると地面とオブジェクトとの隙間が確認しやすいです!

このような仕組みと集中力さえあれば、「1か所5秒くらい」で配置場所と高さを決められます!

1000カ所やっても5000秒ですね!効率的!!!!!

高度を再計算する

上記で設定した設置地点をGeospatialシーンの原点とします。
そのため、設置地点の高度を再度求め、Unity上で設定した高度のオフセットを適用する必要があります。
例 : 店舗位置高度 = 50m, 設置位置高度 = 45m, 高さオフセット = 3m のとき
高さオフセットを変えないと、店舗位置高度の時の設置高さは53mになりますが、設置位置高度の時の設置高さは48mになってしまいます。

そのため、全ての地点で新たに設置位置高度を求め、高さオフセットには、

高さオフセット+(店舗位置高度-設置位置高度)

の値を上書きしてあげる必要があります。

これでSTYLYのGeospatialに設定する項目が揃いました!

STYLYシーンを1000カ所分用意する

この辺は内部向けAPIからの操作になります。
シーンを1000個作ったら、シーン内容の書き換えを行っていきます。
STYLYシーンはXMLで出来ているので、編集用テンプレートXMLを用意しました。
XML内の座標入力部分には文字列を入れ、スクリプトから書き換えて更新するようにしました。

コンテンツを置き換える

途中でコンテンツを変えたくなったらどうしたらいいでしょうか?
前述したテンプレートXMLを使ってコンテンツIDに当たる部分を書き換えればいいのですが、いかんせん数が多いです。
GASで試したところ余裕で10分以上かかりました。(最大実行時間って6分では???)
なので、AWS Lambdaを使って書き換え処理を行うことにしました。
DBへの影響を考慮し、大体3分くらいで全件の書き換えを終えるようにしました。
事前に指定した日時にこの処理を実行したいときはAWS EventBridge Schedulerが有効です。
cron式の癖がちょっと強いですが、aiに聞けば何とかなるでしょう!

以上!!

個人の方が莫大な数のSTYLYシーンを作るのは想定していませんが、Cesiumを使ってたくさんの地点に物を置く!みたいな需要(あるのか?)には役立ちそうかと思います!

5
0
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
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?