以下の記事を読んで、Stockholmでできるなら東京でもできるのでは?と思ったのがきっかけです。
Mapping Stockholm: From Shapefiles to APEX Maps
以下のAPEXアプリケーションを作ります。
東京都のオープンデータカタログサイトより避難場所(SHPファイル)をダウンロードします。
避難場所のShapefileはhinan02_01.zipというファイル名でダウンロードされます。
ZIPファイルを解凍します。01_第9回避難場所と02_第9回地区割当の2セットのShapefileが含まれています。今回は01_第9回避難場所をデータベースに読み込みます。
Oracle Spatial Studioに接続します。ユーザーadminでサインインします。
ShapfileはOracle APEXのワークスペースで扱えるように、ワークスペースのスキーマにロードします。そのため、APEXのワークスペース・スキーマへの接続を作成します。
左のメニューから接続を選択し、接続の作成をクリックします。
接続タイプを選択します。今回はローカルのコンテナとして動作しているOracle Database 23ai Freeを接続先にするため、Oracle Databaseを選択します。
次へ進みます。
接続のNameはワークスペース名に合わせてAPEXDEVとしました。ConnectionにServiceを選択しService/SIDにOracle Database 23ai Freeでデフォルトで作成されるPDBのFREEPDB1を指定します。Userにワークスペース・スキーマ名のWKSP_APEXDEV、Passwordにワークスペース・スキーマのパスワードを指定します。podmanのコンテナでOracle Spatial Studioを実行している場合は、接続先のデータベースのHostはhost.containers.internal、Portは1521になります。
APEXのワークペース・スキーマにはパスワードが割り当たっていないことがあります。外部からのワークスペース・スキーマへの接続を許可する場合は、alter user ... identified byコマンドを実行し、スキーマにパスワードを割り当てておく必要があります。
以上でOKをクリックします。
接続が作成されます。
Shapefileのロードを行います。
データセットを開き、データセットの作成をクリックします。
ドロワーが開きます。
ローカル・ファイルを選択し、アップロードするファイルとして、第9回避難場所.prj、第9回避難場所.shp、第9回避難場所.dbf、第9回避難場所.shxを選択します。
以上で作成をクリックします。
Oracle Spatial Studioのサーバーのログを見ると、例外が上がっています。内容からは、どうも日本語ファイル名が扱えていないようです。
Spatial Studioの起動スクリプト内のjavaコマンドに引数として-Dfile.encoding=UTF8が付いているし、Spatial Studio自体では日本語を扱えているので、ファイル名の方に何か問題がありそうです。
英数字だけのファイル名に変更します。
mv 第9回避難場所.dbf dai9kaihinanbasyo.dbf
mv 第9回避難場所.prj dai9kaihinanbasyo.prj
mv 第9回避難場所.shp dai9kaihinanbasyo.shp
mv 第9回避難場所.shx dai9kaihinanbasyo.shx
01_第9回避難場所 % mv 第9回避難場所.dbf dai9kaihinanbasyo.dbf
01_第9回避難場所 % mv 第9回避難場所.prj dai9kaihinanbasyo.prj
01_第9回避難場所 % mv 第9回避難場所.shp dai9kaihinanbasyo.shp
01_第9回避難場所 % mv 第9回避難場所.shx dai9kaihinanbasyo.shx
再度、データセットの作成を行います。アップロードするファイルは、上記の名前を変更したファイルです。
フィールド名の日本語を正しく認識できていません。このまま送信すると、データセットの作成に失敗します。
dbfファイルのバックアップを取得し、バイナリエディタでフィールド名を直接編集することにしました。dbfファイルのフォーマットについては、色々とネットの情報を参考にしています。
cp dai9kaihinanbasyo.dbf dai9kaihinanbasyo.dbf.bak
最初の10バイトはC0に変更します。
43300000 00000000 0000
次の10バイトはC1に変更します。
43310000 00000000 0000
修正したファイルをアップロード対象に含めて、データセットの作成を行います。
フィールド名がC0、C1として認識されるようになりました。
接続にアップロードに先ほど作成したAPEXDEVを選択します。表名はTOKYO_HINANBASHO、データセット名はTOKYO_HINANとします。
送信をクリックします。
データセットTOKYO_HINANが作成されます。警告が表示されているので、右の3点メニューからプロパティを開き、警告の内容を確認します。
データセットのプロパティの列タブを開きます。
列C0は一意の数値を保持しています。そのため、キーとして使用をオンに変更し、キーの検証をクリックします。
キーが有効であることが確認できたら、適用をクリックしてプロパティの画面を閉じます。
警告がとれたことを確認して、データセットTOKYO_HINANからプロジェクトを作成します。
データセットTOKYO_HINANが追加済みのプロジェクトが作成され、アクティブ・プロジェクトになります。プロジェクト名はUntitledですが、保存されているデータセットを確認するだけの作業なので、そのままにします。
データセットにあるTOKYO_HIKANを地図にドラッグ&ドロップします。
地図上に避難場所のShapefileに含まれていたポリゴンが表示されます。
以上でOracle Spatial Studioを使った、Shapefileのデータベースへのインポートは完了です。
Oracle APEXの作業に移ります。
Shapefileをロードしたスキーマがパーシング・スキーマに設定されているAPEXのワークスペースにサインインし、アプケーション作成ウィザードを起動します。
作成するアプリケーションの名前は東京都避難場所とします。
ページの追加をクリックします。
マップを選択します。
追加するページの名前は避難場所とします。表にTOKYO_HINANBASHOを選択します。ポリゴンを選択し、ジオメトリ列はGEOM、ツールチップ列にC1を選択します。
以上でページの追加をクリックします。
作成されるアプリケーションにページ避難場所が追加されました。
アプリケーションの作成をクリックします。
アプリケーションが作成されました。アプリケーションを実行して、マップの表示を確認します。
今回の記事は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完