OACのデータセットにジオメトリデータを含める

# はじめに
OAC（**Oracle Analytics Cloud**）のプレビュー機能で、WKTやOracle DBのSDO_GEOMETRYでのジオメトリデータがサポートされます。
前提条件として
- WKTはCSVに含めておく（Excelファイルはダメ）
- それぞれのWKTの最大サイズは128KB
などがあります。

※この前提条件は、OAC 2024 Novemberのものです。
その他の制限事項は、[こちら](https://docs.oracle.com/en/cloud/paas/analytics-cloud/actch/Geometry_Data_Type.pdf)のLimitationsを確認してください。

 - Well-known text（WKT）について

https://ja.wikipedia.org/wiki/Well-known_text

# プレビュー機能を有効化する
「コンソール」に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3237a296-2a56-5262-d042-14690fbb6e2a.png)

「システム設定」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/255f78d3-b639-3962-7359-e8174ec0fbde.png)

「Preview」の「Enable Geometry Data Type」を有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3d244ac5-fc18-421b-e250-bb8cca328285.png)

画面左上部の「Apply」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a29d3c98-af7d-5a4f-2f6a-c1893f7e6d36.png)

# サンプルデータ

https://docs.oracle.com/en/cloud/paas/analytics-cloud/tutorial-create-map-view-of-data/index.html

このチュートリアルのworld_cities_data.xlsxを使ってみます。

# WKT列の準備
Excelファイルをダウンロードして中身を確認します。
シート「world_cities_data」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/acb2fce2-6a6a-d4e8-48ba-bf5c867c9cc9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/288ddeca-af6e-48f8-efe2-a4fffe5f0baf.png)

F列の右に新しい列を追加します。
追加した列（G列）に計算式を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3dba3151-e896-f1ee-61e1-acd606173bfe.png)

```
="POINT (" & F2 & " " & E2 & ")"
```

これは、WKTで座標を表す場合の書式です。
このシートを**CSV形式で**保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3f81e0ef-630a-2eb3-274d-328196b5cfe5.png)

# OACのデータセットとしてアップロード
CSVをデータセットとしてアップロードします。
このとき、作成した列がOACによって [GEOMETRY] と自動的に認識されていることが重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/85a68208-8eec-e5ef-3b11-a940a0d43483.png)

ジオメトリ列として認識されていない場合は、書式が間違っていると思われます。
「ビジュアル化」をクリックします。

# マップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6df4bcc5-a256-5045-289d-1e23371ebb7d.png)
自動認識したジオメトリ列をキャンバスにドラッグ＆ドロップします。

マップが作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c526608a-e3b6-dbbb-51f9-096f91ff85dd.png)

# その他のサンプル
緯度・経度の情報をWKT形式に変換するのは簡単ですが、これだけだとあまりメリットを感じられません。
そもそも、緯度・経度の情報があるなら、それを使ってマップを作ったとしても手間は大きく変わらないためです。

以前、こういう記事を書きました。

https://qiita.com/tyo38/items/27b99c3b0bcd81289336

この記事では、QGISを使用して神奈川県の行政区域マップから各保健所の管轄地域を作成し、GeoJson形式で出力したものをOACのカスタム・マップ・レイヤーとして登録して使用しました。

ジオメトリ列を使用すれば、カスタム・マップ・レイヤーを作成せずに地図情報をCSVやOracle DBの表に埋め込んでしまえるため、柔軟性が増します。

そこで、こんなCSVデータを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3bcf7f3d-3d8c-c9fc-0045-5c5ceecf0ae0.png)

神奈川県の各保健所と、その管轄地域をWKTで表現したデータです。
前回作成したGeoJsonがあったので、WKT形式に変換して使用しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f751ea7d-293f-3b26-77ad-ed2bc6ce26bf.png)

GeoJsonからWKTへの変換は、オンラインの変換サービスが探せばすぐに見つかると思います。
また、Oracle DBのSDO_UTILパッケージでも変換できます。
こんな感じ。戻り値がCLOBになることに注意してください。

```SQL
select sdo_util.to_wktgeometry(sdo_util.from_geojson('{ "type": "MultiPolygon", "coordinates": [ [ [ [ 139.65819713, 35.55799195 ], [ 139.66345992, 35.55816441 ], [ 139.66417073, 35.55255859 ], [ 139.669122609999988, 35.55255259 ], [ 139.667150529999986, 35.56195025 ], [ 139.67006914000001, 35.56136497 ], [ 139.67383467, 35.55536997 ], [ 139.677770220000014, 35.55412441 ], [ 139.68462248, 35.55852605 ], [ 139.67640669, 35.56603831 ], [ 139.66930922, 35.58471884 ], [ 139.66441394, 35.589568 ], [ 139.65549642, 35.58997692 ], [ 139.64324392, 35.59815636 ], [ 139.637589170000012, 35.59261553 ], [ 139.63388973, 35.59543747 ], [ 139.6267708, 35.59453775 ], [ 139.6279772, 35.59233831 ], [ 139.62929713, 35.57957247 ], [ 139.634002939999988, 35.57163 ], [ 139.6396435, 35.56829833 ], [ 139.63969988, 35.56557111 ], [ 139.63674014, 35.56624889 ], [ 139.63333345, 35.56139861 ], [ 139.642934309999987, 35.55836139 ], [ 139.64833489, 35.55979333 ], [ 139.6582535, 35.55474278 ], [ 139.65819713, 35.55799195 ], [ 139.65819713, 35.55799195 ] ] ] ] }')) as wkt from dual;
```
SDO_UTILパッケージについては、こちらに記載があります。

https://docs.oracle.com/cd/F19136_01/spatl/SDO_UTIL-reference.html