Oracle MapBuilderによるシェープファイル の取り込み
今回は、Oracle MapBuilderを使ってシェープファイルを取り込むお話です。
シェープファイルの文字コードがUTF8であれば苦労はないのですが、多くのシェープファイルの文字コードはシフトJIS(SJIS)であるケースが多いので、困っている方には参考になると思います。
今回は、”力技で切り抜けた”という感じですので、もっとスマートな方法があるのかもしれません。
事の始まり
こちらから国勢調査小地域のシェープファイルをダウンロードして、先日構築したOracle11XEにOracle Map Builderを使ってインポートしたところ、日本語が文字化けしていました。
シェープファイルの文字コード(SJIS)が原因と思いクライアント側の環境変数NLS_LANGをSJISやUTF8に設定してみたのですが、状況は変わりません。
前回の記事で紹介したサーバー側のキャラクタセットをSJISに変更しても文字化けは変わりません。
さて、困りました。。
困ったときのQGIS
こんな時は、データそのものをUTF8にしてしまえばいいんだ、そう、様々なフォーマット変換ができるQGISならば、SJIS→UTF8くらい朝飯前のはずだ。。と思うに至りました。早速作業します。
まずは、データソースマネージャからエンコーディングに”Shift_JIS”を指定してシェープファイルを開きます。
次に、開いたシェープファイルレイヤの右クリックメニューから[エクスポート]→[地物の保存]を選択します。
表示されたダイアログに、エクスポートの条件を指定します。
形式を”ESRI Shapefile”、エンコーディングに”UTF-8″を指定して”OK”ボタンを押下すると、属性データ(.dbf)がUTF8に変換されたシェープファイル が完成します。
Oracle MapBuilderでインポート
先ほど作成したシェープファイルをオラクルにインポートします。
ツールバー上の一番左のアイコン(接続の追加)をクリックすると、接続の追加ダイアログ(キャプチャは”接続の編集”です)が表示されますので、必要な情報を入力して”接続のテスト”ボタンを押下します。
ツールバーの下にあるリストボックスから”ロード/追加/削除”を選択し、表示されたダイアログから先ほど作成した接続名を選択して”ロード”ボタンを押下します。
少し時間がかかりますが、1分以内には接続が完了すると思います。
接続が完了したらメニューから[ツール]→[シェープファイルのインポート]を指定します。
“シェープファイルのインポート”ダイアログが表示されますので、”次”をクリックします。
今回は、新規テーブルでジオメトリカラムも1つ(カラム名はデフォルトのgeometryのまま)ですので、シェープファイルとテーブル名を指定して”次”ボタンをクリックします。
次にSRIDを指定します。今回はJGD2000ですので、”4612″と入力して”次”をクリックします。
次はテーマの指定ですが、変更せずに”次”ボタンを押下してください。(よくわかりません)
最後に確認画面が表示されますので、”終了”ボタンをクリックすると変換が始まります。
今回のデータは、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を発行して地図と属性を表示すると、以下のようになります。
まとめ
今回は文字コードの問題で困り果てましたが、簡単な方法で回避できました。
QGISは頼りになるなと感じました。