Oracle Spatial Studio で駅データを表示してみた

# はじめに

Oracle Spatial Studio (Spatial Studioとも呼ばれます)は、Oracle Database のSpatial機能によって保存および管理されている地理空間データに対して接続、視覚化、調査および分析を行うためのフリー・ツールです。Spatial Studioは従来、Spatial and Graphとして有償オプションでしたが、現在はOracle Databaseの標準機能として追加費用なくご利用いただけます。
本記事では Spatial機能を用いた地理空間データの活用の方法をご紹介します。

**前提条件**
+ ADBインスタンスが構成済みであること
<br>※ADBインタンスの作成方法については、<a href="https://oracle-japan.github.io/ocitutorials/database/adb101-provisioning/" target="_blank" rel="noopener noreferrer">ADBインスタンスを作成してみよう</a>を参照ください。

# 1. Oracle Spatial Studioのクラウド上での構築
まず、Spatial Studioのメタデータを格納するリポジトリとなるデータベース・スキーマを作成します。これは、データセット、分析、プロジェクトの定義など、Spatial Studioで行う作業を格納するスキーマです。

## 1-1. リポジトリ用にスキーマを作成する
1. OCIコンソールからDatabase ActionsでADMINユーザーとしてSpatial Studioリポジトリに使用するADBに接続します。

1. 以下のコマンドでリポジトリ・スキーマを作成します。スキーマには任意の名前を付けることができます。ここではstudio_repoという名前で作成します。後の手順で使用するため、設定したパスワードをメモしておきます。
    ```sql
    CREATE USER studio_repo IDENTIFIED BY <password>;
    ```

## 1-2. 表領域クオータを割り当てる
1. デフォルトの表領域dataをstudio_repoに割り当てます。
    ```sql
    ALTER USER studio_repo DEFAULT TABLESPACE data;
    ```

1. 表領域クォータをstudio_repoに割り当てます。今回は250Mで設定しますが、他のデータセットを試す場合は、無制限(UNLIMITED)に設定することもできます。
    ```sql
    ALTER USER studio_repo QUOTA 250M ON data;
    ```

## 1-3. 権限の付与
作成したstudio_repoに権限を付与します。
```sql
    GRANT CONNECT,
          CREATE SESSION,
          CREATE TABLE,
          CREATE VIEW,
          CREATE SEQUENCE,
          CREATE PROCEDURE,
          CREATE SYNONYM,
          CREATE TYPE,
          CREATE TRIGGER
    TO studio_repo;
```

これで、studio_repoスキーマをSpatial Studioのリポジトリとして使用する準備が整いました。

## 1-4. ウォレットのダウンロード
Spatial Studioが、作成したADBリポジトリ用スキーマに接続するには、ウォレットが必要です。
<a href="https://oracle-japan.github.io/ocitutorials/database/adb104-connect-using-wallet/" target="_blank" rel="noopener noreferrer">クレデンシャル・ウォレットを利用して接続してみよう</a> を参考に、ウォレットをダウンロードします。

## 1-5. マーケットプレイスからSpatial Studioを選択する
1. 左上のハンバーガーメニューをクリックして、[マーケットプレイス]を選択します。
![marketplace.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/ead11b16-a534-1e7a-d409-19cd79a9382d.jpeg)

1. 『Spatial Studio』と検索し、Oracle Spatial Studio をクリックします。
![search_spatial_studio.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/fbd618fe-659f-ee7d-c590-5efc0fdc192c.jpeg)

1. 利用規約に同意して、[スタックの起動]をクリックします。
![launch_stack.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/afd0486b-f554-30ec-ade9-1dfd8c6f8f9b.jpeg)

## 1-6. スタックウィザードの作成
1. スタックに任意の名前と説明を追加し、コンパートメントを選択します。
![stack_information.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/4ba5d5d1-9f1a-c04a-9a55-dac772ced747.jpeg)

1. 可用性ドメインとインスタンスのシェイプを選択します。Compute Shapeの詳細は<a href="https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm" target="_blank" rel="noopener noreferrer">こちら</a>です。

1. HTTPSポートとSpatial Studio Adminのユーザー名をデフォルトから変更することができます。Spatial Studio Adminの認証には、OCI Vault またはパスワードを使用できます。下の画像は、パスワードを使った例です。なお、本番環境では、OCI Vault を使用することをお勧めします。
設定ができたらスクロールダウンして、「ネットワークの設定」のセクションに進みます。
![advanced_config.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/0fb5c7cf-3894-3538-a7f5-7d24aee83524.jpeg)

    > （補足）
    > デフォルトでは、Spatial Studio の 管理ユーザー名は admin です。これはSpatial Studioのアプリケーション・ユーザーであり、『1. Spatial Studioリポジトリのデータベースユーザー作成』で作成したリポジトリ・スキーマ用のデータベース・ユーザー名（studio_repo）とは異なります。

1. ネットワークについては、新しいVCNを自動的に作成する、もしくは既存のVCNを作成します。  
下の図は、新たにVCNの作成した例です。既存のVCNを使用するには、上記ステップ2で選択したのと同じ可用性ドメイン内にある必要があります。他に既存のVCNがない場合は、残りの項目はデフォルトのままで構いません。既存のVCNがある場合は、競合を避けるためにCIDR値を変更してください。
![config_network.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/9b91a3c2-b41f-5850-4732-a2cf5eae0abe.jpeg)

1. ssh公開鍵をロードします。
![add_sshkeys.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/48f9367d-2f1f-b15c-7cf8-c9933884fe26.jpeg)

1. 入力した内容を確認します。修正が必要な場合は、[前]をクリックします。問題ない場合は、[作成]をクリックします。
![create_stack.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/fbfb9e86-f640-04e0-90c7-a4159216879f.jpeg)

## 1-7. 初回ログイン
1. 作成したスタックの情報を確認します。ハンバーガーメニューから[開発者サービス]→[スタック]を選択します。
![to_stack_page.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/c198983b-ba33-c0fa-0c4b-e9103fac7497.jpeg)

1. 以下のようにOracle Spatial Studioというスタックが作成されています。合わせてジョブが作成されるので、ジョブの名前をクリックします。
![stack_detail.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/50f1268f-1498-8ed3-e231-16365826e784.jpeg)

1. 正しく作成されていれば、以下のようにログが表示されます。
![job_detail.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/7be933ba-cf4d-590b-f094-e09b5e1a7f03.jpeg)

1. ログセクションの一番下までスクロールダウンします。完了すると、「Apply Complete！」と表示され、続いてインスタンスの詳細が表示されます。最後に表示されているのは、Spatial StudioのパブリックURLです。このURLをコピーして、ブラウザに貼り付けます。
![log.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/6e4029cd-77b6-2ee6-fce6-230ca79d0c32.jpeg)

1. Spatial Studioの公開URLを初めて開くと、プライバシーとセキュリティに関するブラウザの警告が表示されます。具体的な警告内容は、お使いのプラットフォームやブラウザによって異なります。  
これはSpatial Studioの問題ではなく、署名付きのHTTPS証明書を持たないWebサイトへのアクセスに共通するものです。署名された証明書をロードして構成すると、この警告は解除されます。  
リンクをクリックすると、ウェブサイトに移動します。
![access_warning.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/e17e0222-1724-5ca1-367e-3b3afe4c70f8.jpeg)

1. Spatial Studio の 管理ユーザー名（デフォルトはadmin）と、『1-6.スタックウィザードの作成』で入力したパスワードを入力します。そして、[Sign In]をクリックします。
![sign_in.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/ca669ad0-e041-bc0f-2f74-60ecd4350c30.jpeg)

1. Spatial Studioインスタンスへの最初のログイン時に、メタデータ・リポジトリとして使用するデータベース・スキーマの接続情報の入力が求められます。『1-1. リポジトリ用にスキーマを作成する』で作成したスキーマを使用するので、[Oracle Autonomous Database]を選択し、[Next]をクリックします。
![choose_connection.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/cd3d90fd-6ff2-dfb3-c8cd-b79114fc1c96.jpeg)

1. 『1-4. ウォレットのダウンロード』で保存したウォレットファイルを選択（またはドラッグ＆ドロップ）します。読み込み後、[OK]をクリックします。
![upload_wallet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/08bc4920-0fac-2e2e-f71f-087e20256bf9.jpeg)

1. 『1-1. リポジトリ用にスキーマを作成する』で作成したユーザー名（studio_repo）とパスワード、およびサービスを入力します。今回は、サービスレベルはmediumに設定しておきます。接続サービスについては、<a href="https://oracle-japan.github.io/ocitutorials/database/adb201-service-names/" target="_blank" rel="noopener noreferrer">こちら</a>もご参照ください。以下の画像のように入力し、[OK]をクリックします。
![specify_metadata_schema.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/531f249b-8900-3762-1b5d-12f3e50ce3a9.jpeg)

1. Spatial Studioがスキーマへの初期接続を行い、いくつかのメタデータ・テーブルを作成します。完了すると、Getting Started情報とともにSpatial Studioが開きます。以下の画像のように表示されれば、ログイン成功です。
![getting_started.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/05eb7f92-1828-0b74-5997-3558de93c9ec.jpeg)

# 2. 地理空間データを含むCSV形式ファイルのデータベースへのロード
## 2-1. 駅の場所データのダウンロード
日本の全駅データを<a href="https://ekidata.jp/" target="_blank" rel="noopener noreferrer">こちら</a>からダウンロードします。なお、会員登録（無料）が必要です。  
以下の画像のように、最新の駅データのcsvファイルをダウンロードします。
![station_data.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/9f568fd4-5f02-a5a6-71fa-de3cb2b5b1ed.jpeg)

## 2-2. 駅データのロード
1. Getting Started画面の[Create Dataset]をクリックします。
![create_dataset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/2295a4f3-610c-56ec-d88e-0992d3cc35b8.png)

1. [Import File]をクリックし、先ほどダウンロードした駅データのcsvファイルをインポートします。
![import_file1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/94a37463-5b9d-8a9e-4415-cc6cfcf0a970.jpeg)

1. 駅データのデータセットが作成されます。Table Name と Dataset nameを**STATION** に変更し、Upload to connection:をSPATIAL_STUDIOに設定します。また、**station_cd**と**station_g_cd**のデータ型がDATEになっているので、NUMERICに変更してSubmitします。
![from_csvfile.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/d52689a1-e77c-fc51-a929-16cbf4b94b58.jpeg)

1. データセットが作成されましたが、アイコンに注意表示が出ているので修正します。
![issue1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/6b6e4c35-e7ad-1ead-5528-4fb80a123437.jpeg)

1. [Go To Dataset Columns]をクリックし、主キー列を設定します。
![issue2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/e89bf8d6-8163-2344-ad44-20e923f3b753.jpeg)
以下のように**STATION_CD**列のトグルスイッチ『Use As Key』をONにし、[Validate key]をクリックします。
![key_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/a0eb5d3d-f2e5-d3d1-1e07-f57fc06ab9f9.jpeg)
主キーを有効化したら、[Apply]をクリックします。

1. [Create Latitude/Longitude Index]をクリックし、住所を地図表示用の座標位置に変換します。
![issue3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/fc0ae26a-930f-615f-2866-360eba390bea.jpeg)
元々LAT列とLON列が入力されているので、そのまま[OK]をクリックします。
![lat&lon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/5e7ae040-f708-0a11-bb6e-8c6afebf3f54.jpeg)
上記を正しく設定できたら、左のアイコンがピンマークに変わります。
![dataset_success.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/2cdae4a2-9d1e-017f-2e9c-df654f741070.jpeg)

## 2-3. プロジェクトの作成
データセットの作成が終わったら、駅データを地図に反映させてみます。
データセットの右のLaunch Menuから[Create Project]をクリックします。
![create_project.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/cdd5d5ec-a2a6-40d4-c604-7681e3f4e2cb.jpeg)
データセットをドラッグして、任意の場所にドロップします。
![drag&drop.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/ace5b77f-9fb6-1417-0b2d-b7e05aa187ae.jpeg)
日本の全駅データが地図上に表示されました。
![station_visual.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1930162/3e5607f2-f320-093b-4cb6-70b36c238722.jpeg)