Cesium(セシウム）を基礎からマスターする　その1

Cesiumを始めて半年ほどたち、おぼろげながらようやくわかってきました。
最初は数々の疑問に遭遇し、おおいに悩んだのですが、ようやくアプリを作ってサーバーに展開する事が出来るようになりました
このコーナーでは最も基本的な悩みを紹介しながら解決方法を紹介します。

最初に「Cesium　Sandcastle」を自分の環境で実現することができない
という悩みです。

Cesium　Sandcastleとは下記のサイトで、色々なサンプルが収められています。
このサイトではコードを直接触って即座に反映されるため、あたかもそのままのコードをhtmlファイルに書けば同じものが表示されると勘違いを起こしてしまいます。
初心者にはわかりにくい構成になっていますので、私も随分と紆余曲折を繰り返しました。

そこでこの中から最も基本的な Hello world を選んで、同じものを自分の環境で表示させてみましょう。
下記URLから右の方に移動して選んでください。
https://sandcastle.cesium.com/?src=3D%20Models.html

![{B07763C7-15B1-4D86-B641-673F11E5E0F2}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376140/5008b986-1c55-07bd-5e35-a6007ecc8c3c.png)

Hello worldとは最も基本的なものを紹介するときに名前がつけられますが、これが表示できないとかなり落ち込むことになります。今回は、最も簡単な方法つまり、1つのhtmlファイルにコードをまとめて、そのファイルをクリックすることによって閲覧するという方法です。

解説のため、Hello worldからコードを引用させて頂きますと
Java scriptコードは
```javascript
const viewer = new Cesium.Viewer("cesiumContainer");
```
htmlとcssコードは
```html
<style>
      @import url(../templates/bucket.css);
    </style>
    <div id="cesiumContainer" class="fullSize"></div>
    <div id="loadingOverlay"><h1>Loading...</h1></div>
    <div id="toolbar"></div>
```
のようになっています。

これを1つのhtmlファイルにまとめて表示させたいのですが、例えば下記のように記述しても全く動きません
```html
const viewer = new Cesium.Viewer("cesiumContainer");
<style>
      @import url(../templates/bucket.css);
    </style>
    <div id="cesiumContainer" class="fullSize"></div>
    <div id="loadingOverlay"><h1>Loading...</h1></div>
    <div id="toolbar"></div>
```
ではどうすれば良いかということですが、結論から述べますと下記のようなコードになります。
```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cesium Viewer</title>
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.100/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.100/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
    <style>
        html, body, #cesiumContainer {
            width: 100%;
            height: 100%;
            margin: 0;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div id="cesiumContainer"></div>
    <script>
        Cesium.Ion.defaultAccessToken = '○○○○';
        const viewer = new Cesium.Viewer("cesiumContainer");
    </script>
    </body>
</html>
```
随分と記述が増えましたが、これを一箇所だけ書き換えてメモ帳で記述して、保存の際に test.html等の名前をつけて保存し、出来上がったhtmlファイルをクリックすれば実現します。

そこで、書き換える箇所ですが、
```html
Cesium.Ion.defaultAccessToken = '○○○○';
```
の○○○○です。
○○○○をあなたのアクセストークンの文字に書き換えてください。

アクセストークンは、cesium ionにユーザー登録することによって取得できる固有の暗号文字です。cesium ionは下記のサイトです。
https://ion.cesium.com/

下のAccess Tokensをクリックして取得してください。
![{970AC29A-AD39-41ED-B820-1591D4E79492}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376140/ee7f36b0-71b7-f403-2cb7-21512a835121.png)
なお、tokenには色々な制限を設けられるようでして、うまく設定しないと表示がされないようです。
下図の鉛筆マークをクリックすると現れるスコープ（範囲）の設定です。
詳しいところはマニュアルなどを参照してください。
![{B53705CB-AEEC-484C-AFB8-9EC36FE671A8}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376140/7eab218b-9b56-3a31-e7b9-b7bedd131a35.png)

![{DE9767BA-92D5-439A-8EB3-983C47C57BA7}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376140/062addbd-58aa-0f1c-426b-906a6d65378f.png)

これまでの記述を元にうまく行きますと、下記のような画像が見られるはずです。
![{47E499FB-9B26-493D-A16F-595C31DA13CD}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376140/2419f2ae-4400-20c1-6828-f1a69cdef439.png)

何か問題がある場合は下に白い文字でメッセージが表示されます。
また、F12キーを押して下記のような画面にしてコンソールに表示されるメッセージを読み解く方法もあります。

![{5A75BBAC-C89A-4391-ADD0-DD75DFE63DFB}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376140/f19fea7f-c859-9e61-a158-62fa22f839b2.png)

うまく行くことを祈っています。
次回は別のsandcastleに挑戦してみましょう。