Db2地理空間分析
シリーズ
当記事は「4. SHAPEファイルのインポート」です。
- Db2の地理空間分析機能
- 地理空間分析機能を有効にする
- JGD2011座標系の設定
- SHAPEファイルのインポート
- 緯度・経度情報をインポート
- DBeaverでDb2の地理空間情報を表示してみる
- 空間処理変数を使ってみる
前提
「3. JGD2011座標系の設定」が実施済みとします。
未実施の場合は、実施の上、進んでください。
0. 前準備 Docker版Db2 の導入
現状、Db2サーバーpodにしかないコマンドdb2se import_shape
でしかSHAPEファイルがインポートできません。
尚、このコマンドはDb2 on Cloudに対してはエラーになりますので、実行できません。
こちらの
Db2 docker から Db2 on CloudのDBに接続
を参考に、無料のDocker版Db2 Community Editionをどこかに導入して使えるようにしておいてください。
またはお手持ちのDb2サーバーがあれば、そこで実行でもOKです。
1. 国土交通省国土数値情報ダウンロードサービスの東京都の行政区域データ
なんと(?)、 国土交通省が行政区域などのSHAPEファイルを作成して公開しています。
これを利用すると、例えば中央区の境界SHAPEデータ(Polygonデータ)などを入手することができます。
当記事ではこの国土交通省国土数値情報ダウンロードサービスの東京都の行政区域データをDb2にインポートする方法を説明します。
これを使うと、緯度・経度と中央区の境界を組み合わせて、中央区内の「何かの」一覧などをビジュアルに表示できるようになります(ただしビュジュアルに表示するには別ツールが必要です).
ただそのまま使えると思いきや、DB2のコマンドのせいかもしれませんが、事前にJGD2011座標系を設定したり、文字コードをUTF8に変換したりの処理が必要です。当記事では変換部分はpythonで行います。
変換後、CLPPlusのIDA LOADGEOSPATIALDATA
コマンドでSHAPEファイルの内容をインポートします。
2. 国土交通省国土数値情報ダウンロードサービスから東京都の行政区域データをダウンロード
この内容はこちらのjupyter notebookの2.1から2.3の内容です。
2-1. 国土交通省国土数値情報ダウンロードサービスにアクセスします
国土交通省国土数値情報ダウンロードサービス
https://nlftp.mlit.go.jp/ksj/index.html
2-2. ダウンロード
「2.政策地域」の中の「行政区域(ポリゴン) 」をクリック
「ダウンロードするデータの選択」 から 東京都をクリック
東京で一番新しいものをダウンロードしたいところですが、令和4年版はなぜかうまく動かなかったので、令和3年版をダウンロードしてください。
東京 世界測地系 令和3年 14.27MB N03-20210101_13_GML.zip
ダウンロードしたら、zipファイルを解凍してください。
3. SHAPEファイルの文字コード変換
この内容はこちらのjupyter notebookの2.4から2.9の内容です。
SHAPEファイル内の文字コードはSJISです。
DbをUTF-8で作成している場合(Db2 Warehouse on CloudのデフォルトはUTF-8)は、文字コードを変換しておきます。
SJISのDbを使用する場合はこのステップは省略できます(おそらく、未確認)。
変換はpythonのgeopandasライブラリで行います。
geopandasのライブラリがない場合は導入してから実施してください。
pip install geopandas
以下のコードをpythonで実行
file_path
にSHAPEファイル名をパス付きでセット
out_path
に変換後のSHAPEファイル名をパス付きでセット
してから実行してください。
import pandas as pd
import geopandas as gpd
file_path = r"./N03-20220101_13_GML/N03-21_13_210101.shp" #SHAPEファイル名をパス付きでセット
geo_df =gpd.read_file(file_path, encoding='shift-jis')
out_path = r"./N03-20220101_13_GML/tokyo.shp" #UTF-8変換後のSHAPEファイル名をパス付きでセット
geo_df.to_file(out_path, encoding='utf-8')
上記を実行すると、以下の5つのファイルが作成されます:
tokyo.cpg
tokyo.dbf
tokyo.prj
tokyo.shp
tokyo.shx
これをまとめて1つのファイルにzipします:
zip -r tokyo.zip tokyo.*
4. SHAPEファイルのインポート
「0. 前準備 Docker版Db2 の導入」で準備したDocker版Db2 を使います。またはDb2サーバー上の実行でもよいです。
4.1 docker コンテナに#3で作成したtokyo.zipをdb2inst1が読める場所にコピー
(Db2サーバー上でも可)
以下mydb2
というコンテナで動作しているとします:
/にコピー
docker cp tokyo.zip mydb2:/
コンテナに入って、
docker exec -ti mydb2 bash
解凍と誰でも読めるように設定
cd /
mkdir tokyo
cd tokyo
unzip ../tokyo.zip
cd ..
chmod o+rx tokyo
chmod o+r tokyo/*.*
exit
4.2 docker コンテナ内で、nodeとdbを登録
(Db2サーバー上でも可)
mydb2コンテナにdb2inst1でログイン
docker exec -ti mydb2 bash -c "su - db2inst1"
コマンド:
db2 catalog tcpip node <任意のnode名> remote <ホスト名> server <ポート番号> security ssl
db2 catalog db <データベース名> as <任意のDB別名> at node <任意のnode名>
コマンド例
db2 catalog tcpip node BLUNODE remote xxxxx.yyyyy.databases.appdomain.cloud server 50001 security ssl
db2 catalog db bludb as bludb at node BLUNODE
最後にキャッシュをリフレッシュするため、以下のコマンドを実行します。
db2 terminate
Db2に接続して接続に問題がないことを確認します
db2 connect to <DB別名> user <userid> using <password>
例:
db2 connect to bludb user nishito using xxxxxxx
4.3 docker コンテナ内でShapeファイルをインポートします
db2se import_shape
コマンドを使います
使い方
パラメータ詳細はこちらを参照ください:
db2se import_shape <DB別名> -userId <userid> -pw <password> -sa 1 -fileName <shapeファイルのパスと名前> -createTableFlag 1 -srsName GCS_JGD_2011 -tableSchema <テーブルのスキーマ名> -tableName <テーブルの名前> -spatialColumn <空間情報列名> -idColumn OBJECTID -idColumnIsIdentity 1 -commitScope 200 -client 1
コマンド例:
以下は
db2se import_shape bludb -userId bluadmin -pw xxxxxxx -sa 1 -fileName /tokyo/tokyo.shp -createTableFlag 1 -srsName GCS_JGD_2011 -tableSchema bluadmin -tableName CITY_SHAPE -spatialColumn geo -idColumn OBJECTID -idColumnIsIdentity 1 -commitScope 200 -client 1
出力例:
GSE0000I The operation was completed successfully.
これでロードできました!
上記コマンド例でロードされたテーブルはスキーマ名bluadmin、テーブル名はCITY_SHAPE
です。
中身を確認するSQLサンプルは以下になります :
SELECT N03_001, N03_002, N03_004, N03_007, OBJECTID, CAST( ST_AsText(GEO) AS VARCHAR(50) ) AS GEO from CITY_SHAPE FETCH FIRST 10 ROWS ONLY
地図での出力は「6. DBeaverで地理空間情報を表示してみる」で説明します。
以上です。