
攻略法
Cesium.js × PLATEAU 3D Tiles 〜Webブラウザで京都の3D建物を表示しよう〜
はじめに:このガイドを読む前に
「Webで3D地図を表示したいけど、Unityは難しそう...」
「Cesium.jsって聞いたことあるけど、何から始めればいいかわからない...」
そんな不安を抱えていませんか?大丈夫です。このガイドを読み終える頃には、きっと「これなら自分にもできそう」と思えるはず。
このガイドでわかること:
- Cesium.jsとは何か、なぜハッカソンで使いやすいのか
- 京都市のPLATEAUデータを30分で表示する方法
- 「現在地周辺の3D建物」を表示するアプリの作り方
- GitHub Pagesへのデプロイ手順
- よくあるエラーと解決法
それでは、一緒に見ていきましょう!
そもそもCesium.jsって何?
Cesium.js は、Webブラウザ上で3D地図を表示するためのJavaScriptライブラリです。
もっと簡単に言うと、Google Earthのような3D地球儀を、自分のWebサイトに埋め込めるツール。しかも無料で使えます。
UnityとCesium.js、どっちを選ぶ?
比較項目
Unity
Cesium.js
環境構築
30分〜1時間
5分(CDNで即使える)
必要なスキル
C#、Unity操作
HTML/JavaScript
デプロイ
ビルドが必要
HTMLファイルを置くだけ
向いている用途
ゲーム、AR/VR
Webアプリ、可視化
おすすめ度(初心者)
★★★☆☆
★★★★★
💡 初心者向けポイント: Web開発の経験があるなら、Cesium.jsが断然おすすめ。環境構築でつまずくリスクが低く、2日間のハッカソンで「動くもの」を作りやすいです。
Cesium ionって何?(よく出てくる用語)
Cesium.jsを使うときによく出てくる「Cesium ion」という言葉。これは、Cesium社が提供するクラウドサービスのことです。
- 3Dデータのホスティング(置き場所を提供)
- 地形データの配信
- PLATEAUを含む日本全国の3D建物データ
無料枠: 5GBストレージ、15GB/月ストリーミング、1,000セッション/月
ハッカソン用途なら十分すぎる容量です。
🗾 京都市のPLATEAUデータを使う
最も簡単な方法:Cesium ion統合データ
実は、Cesium社がPLATEAU全国データを統合した「Japan 3D Buildings」というアセットを公開しています。
項目
内容
Asset ID
2602291
カバー範囲
日本全国 2,300万棟
京都市対応
✅ 含まれている
料金
無料(Cesium ionアカウント必要)
たった2行で京都市の3D建物を表示できます:
const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(2602291);
viewer.scene.primitives.add(tileset);
💡 初心者向けポイント: このAsset IDを覚えておけば、京都市だけでなく日本全国どこでも3D建物を表示できます。東京、大阪、福岡...どこでもOK!
京都市データの詳細
項目
内容
市区町村コード
26100(京都府京都市)
利用可能LOD
LOD0, 1, 2, 3.3(全国トップクラス)
最新年度
2024年度
ライセンス
CC BY 4.0(商用利用可)
必須クレジット表記:
出典:国土交通省 PLATEAUウェブサイト(https://www.mlit.go.jp/plateau/) (外部リンク)
⚠️ 注意: クレジット表記は必須です。発表スライドやアプリ内に忘れずに入れましょう。
30分で動くアプリを作る
ここからが本番。以下の手順で、30分で「現在地周辺の3D建物」を表示するアプリを作ります。
Step 1:Cesium ionアカウント作成(5分)
- https://ion.cesium.com/signup/ (外部リンク) にアクセス
- メールアドレスで無料アカウント作成
- https://ion.cesium.com/tokens/ (外部リンク) でアクセストークンを生成
- トークンをコピーして保存(後で使います)
Step 2:HTMLファイル作成(10分)
以下のコードを index.html として保存してください。
YOUR_ACCESS_TOKEN_HERE の部分を、Step 1で取得したトークンに置き換えます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>京都3Dマップ</title>
<script src="https://cesium.com/downloads/cesiumjs/releases/1.136/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.136/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
<style>
html, body, #cesiumContainer {
width: 100%; height: 100%; margin: 0; padding: 0;
}
#locationBtn {
position: absolute; top: 10px; left: 10px; z-index: 999;
padding: 12px 20px; font-size: 16px; cursor: pointer;
background: #4CAF50; color: white;
border: none; border-radius: 8px;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<button id="locationBtn">📍 現在地へ移動</button>
<script type="module">
// ↓ここにトークンを入れる
Cesium.Ion.defaultAccessToken = "YOUR_ACCESS_TOKEN_HERE";
const viewer = new Cesium.Viewer("cesiumContainer", {
terrain: Cesium.Terrain.fromWorldTerrain(),
timeline: false, animation: false
});
// 日本の3D建物を追加
const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(2602291);
viewer.scene.primitives.add(tileset);
// 初期位置:京都市役所
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(135.7681, 35.0116, 800),
orientation: {
heading: 0, pitch: Cesium.Math.toRadians(-45), roll: 0
}
});
// 現在地ボタン
document.getElementById("locationBtn").addEventListener("click", () => {
navigator.geolocation.getCurrentPosition((pos) => {
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(
pos.coords.longitude, pos.coords.latitude, 500
),
duration: 2
});
});
});
</script>
</body>
</html>
Step 3:ローカルで動作確認(5分)
HTMLファイルをダブルクリックして開くだけでは動きません。ローカルサーバーが必要です。
方法A:VS Code Live Server(おすすめ)
- VS Codeで index.html を開く
- 右下の「Go Live」をクリック
- ブラウザが自動で開く
方法B:Python(すでに入っている人向け)
python -m http.server 8000
# ブラウザで http://localhost:8000 を開く
Step 4:GitHub Pagesにデプロイ(10分)
- GitHubでリポジトリを作成
- index.html をプッシュ
- Settings → Pages → Source: main branch → Save
- https://username.github.io/repo/ (外部リンク) でアクセス可能に
⚠️ 注意: ルートに空の
.nojekyllファイルを作成してください。これがないとCesiumの一部ファイルが読み込めません。
❌ よくあるエラーと解決法
ハッカソンでよく遭遇するエラーをまとめました。困ったときはここを確認してください。
エラー1:「Cesium is not defined」
原因: Cesium.jsの読み込み順序が間違っている
解決: <script>タグをアプリのコードより前に配置
❌ 間違い:
<script>/* アプリのコード */</script>
<script src="Cesium.js"></script> <!-- 後になっている -->
✅ 正解:
<script src="Cesium.js"></script> <!-- 先に読み込む -->
<script>/* アプリのコード */</script>
エラー2:「401 Unauthorized」
原因: Cesium ionのアクセストークンが無効
解決: ion.cesium.com でトークンを再確認・再生成
エラー3:3D建物が表示されない
原因: カメラが建物から遠すぎる
解決: 以下のコードでカメラを移動
viewer.zoomTo(tileset);
エラー4:位置情報が取得できない
原因: HTTPSでないとGeolocation APIが動かない
環境
対応
localhost
例外扱い、そのまま動作
GitHub Pages
自動でHTTPS、問題なし
Vercel / Netlify
自動でHTTPS、問題なし
💡 初心者向けポイント: スマホで位置情報が取れない場合:設定 → サイトの設定 → 位置情報 → 許可 を確認してください。
さらに発展させるアイデア
基本ができたら、ここからがアイデア勝負。いくつかの方向性を紹介します。
パターン1:建物クリックで情報表示
PLATEAUの建物データには「築年数」「用途」「高さ」などの属性情報が含まれています。
const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction((click) => {
const picked = viewer.scene.pick(click.position);
if (picked instanceof Cesium.Cesium3DTileFeature) {
const props = picked.getPropertyIds();
props.forEach(p => console.log(p, picked.getProperty(p)));
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
パターン2:混雑可視化
- 人流データと組み合わせて混雑度を色分け
- 時間帯別の変化をアニメーション
- 「今混んでいるからこっちへ」と誘導
パターン3:防災シミュレーション
- 浸水想定区域を3Dで可視化
- 避難経路をルート表示
- 「この建物は垂直避難可能」を地図上に表示
パターン4:AI連携
- LLMで「この地域の特徴は?」と質問できるチャット
- 画像認識で建物を特定
- AIによる最適ルート提案
💡 初心者向けポイント: PLATEAU × 生成AIの領域はまだ未開拓。新しいアプローチを見せられれば、審査員の印象に残りやすいです。
##まとめ:30分で完成させる手順
最短ルートをおさらいします:
- Cesium ionで無料アカウント作成(5分)
- アクセストークンを取得
- サンプルHTMLをコピペ、トークンを置換(5分)
- ローカルサーバーで動作確認(5分)
- GitHub Pagesにデプロイ(10分)
- スマホでアクセス → 現在地ボタンをタップ
覚えておくべき数字:
- Cesium.js最新版:1.136(2025年12月時点)
- 日本3D建物 Asset ID:2602291
- 京都市役所座標:(135.7681, 35.0116)
参考リンク
- Cesium公式:https://cesium.com/learn/cesiumjs-learn/ (外部リンク)
- PLATEAUストリーミング:https://github.com/Project-PLATEAU/plateau-streaming-tutorial (外部リンク)
- PLATEAU Learning:https://www.mlit.go.jp/plateau/learning/tpc06-1/ (外部リンク)
- 京都市2024データ:https://www.geospatial.jp/ckan/dataset/plateau-26100-kyoto-shi-2024 (外部リンク)

Shin Yamamoto
関連する記事 - 攻略法
攻略法
オープンデータの探し方&使い方ガイド
攻略法
Streamlit 3時間デプロイガイド
攻略法
スプレッドシート + Looker Studio ノーコードダッシュボード入門
攻略法
Google Colab + pandasデータ分析入門 〜コピペで動く、はじめてのデータ分析〜
攻略法
審査基準攻略&PowerPoint提出ガイド
攻略法
3日間タイムマネジメント戦略
攻略法
チーム発表〜本番前日までの事前準備チェックリスト
攻略法
「データ分析」スタートガイド|DDASH Hacks 2025
攻略法
Unity MCP×PLATEAU SDKで加速するAI駆動開発ガイド
攻略法
PLATEAU×Unity 2日間サバイバルガイド 〜ハッカソン〜
攻略法
PLATEAUの過去受賞作品をまとめてみた「アイデア→実装パターン集」
攻略法
京都市の都市課題とは?〜PLATEAU HACK 2025 初心者向けガイド〜
攻略法
GitHubでチーム開発の流れを体験してみよう! - ハンズオンガイド
攻略法
AIコーディング支援ツールの概要と活用法
攻略法
2025年版 GitHub Education 申請手順
攻略法
「Supabase」の概要と環境構築。初心者向けガイド
攻略法
実写型デモ動画の制作ガイド
攻略法
ngrokの使い方 - デプロイが間に合わなかった時の最終手段
攻略法
スクリーンショット型デモ動画の制作ガイド
攻略法
Craft Stadiumの評価制度〜動画を提出する理由〜