Oracle MapBuilderによるシェープファイル の取り込み

今回は、Oracle MapBuilderを使ってシェープファイルを取り込むお話です。
シェープファイルの文字コードがUTF8であれば苦労はないのですが、多くのシェープファイルの文字コードはシフトJIS(SJIS)であるケースが多いので、困っている方には参考になると思います。

今回は、”力技で切り抜けた”という感じですので、もっとスマートな方法があるのかもしれません。

事の始まり

こちらから国勢調査小地域のシェープファイルをダウンロードして、先日構築したOracle11XEにOracle Map Builderを使ってインポートしたところ、日本語が文字化けしていました。
シェープファイルの文字コード(SJIS)が原因と思いクライアント側の環境変数NLS_LANGをSJISやUTF8に設定してみたのですが、状況は変わりません。

前回の記事で紹介したサーバー側のキャラクタセットをSJISに変更しても文字化けは変わりません。
さて、困りました。。

困ったときのQGIS

こんな時は、データそのものをUTF8にしてしまえばいいんだ、そう、様々なフォーマット変換ができるQGISならば、SJIS→UTF8くらい朝飯前のはずだ。。と思うに至りました。早速作業します。

まずは、データソースマネージャからエンコーディングに”Shift_JIS”を指定してシェープファイルを開きます。

エンジーディングにShift_JISを指定

次に、開いたシェープファイルレイヤの右クリックメニューから[エクスポート]→[地物の保存]を選択します。

地物の保存を選択

表示されたダイアログに、エクスポートの条件を指定します。
形式を”ESRI Shapefile”、エンコーディングに”UTF-8″を指定して”OK”ボタンを押下すると、属性データ(.dbf)がUTF8に変換されたシェープファイル が完成します。

エンコーディングにUTF-8を指定

Oracle MapBuilderでインポート

先ほど作成したシェープファイルをオラクルにインポートします。
ツールバー上の一番左のアイコン(接続の追加)をクリックすると、接続の追加ダイアログ(キャプチャは”接続の編集”です)が表示されますので、必要な情報を入力して”接続のテスト”ボタンを押下します。

接続テスト成功の表示

ツールバーの下にあるリストボックスから”ロード/追加/削除”を選択し、表示されたダイアログから先ほど作成した接続名を選択して”ロード”ボタンを押下します。
少し時間がかかりますが、1分以内には接続が完了すると思います。

データベース接続中の画面

接続が完了したらメニューから[ツール]→[シェープファイルのインポート]を指定します。

シェープファイルのインポートを指定

“シェープファイルのインポート”ダイアログが表示されますので、”次”をクリックします。

表示されたインポートウィザード

今回は、新規テーブルでジオメトリカラムも1つ(カラム名はデフォルトのgeometryのまま)ですので、シェープファイルとテーブル名を指定して”次”ボタンをクリックします。

ああ

次にSRIDを指定します。今回はJGD2000ですので、”4612″と入力して”次”をクリックします。

SRIDの指定

次はテーマの指定ですが、変更せずに”次”ボタンを押下してください。(よくわかりません)

テーマの指定

最後に確認画面が表示されますので、”終了”ボタンをクリックすると変換が始まります。

確認画面

今回のデータは、2017年度の東京都の国勢調査小地域のデータで、6,010件のポリゴンデータが収容されています。
変換時間は、2分ほどです。

文字化け確認

sqlplusにて表示を確認すると、文字化けはないようです。

SQL> select substr(pref_name,1,4),substr(city_name,1,4),substr(s_name,1,8),jinko from area where rownum <20;
SUBSTR(PREF_ SUBSTR(CITY_ SUBSTR(S_NAME,1,8) JINKO
———— ———— ———————— ———-
東京都       青ヶ島村                                       0
東京都       青ヶ島村                                       0
東京都       青ヶ島村                                       0
東京都       神津島村                                       0
東京都       千代田区     丸の内1丁目                      4
東京都       千代田区     丸の内2丁目                      1
東京都       千代田区     丸の内3丁目                      3
東京都       千代田区     大手町1丁目                      3
東京都       千代田区     永田町1丁目                     12
東京都       千代田区     永田町2丁目                    514
東京都       千代田区     隼町                            471
東京都       千代田区     平河町1丁目                    832
東京都       千代田区     平河町2丁目                    933
東京都       千代田区     麹町1丁目                      695
東京都       千代田区     麹町2丁目                      627
東京都       千代田区     麹町3丁目                      307
東京都       千代田区     麹町4丁目                      605
東京都       千代田区     麹町5丁目                      127
東京都       千代田区     麹町6丁目                       78
19行が選択されました。

また、OpenJUMPのdbqueryにておオラクルデータベースに直接SQLを発行して地図と属性を表示すると、以下のようになります。

OpenJUMPにて地図と属性を表示

まとめ

今回は文字コードの問題で困り果てましたが、簡単な方法で回避できました。
QGISは頼りになるなと感じました。