●シェイプデータからPostGISに投入するまとめ
Windows環境でShiftJISの文字列が含まれるシェイプデータからPostGISにデータ投入するときに注意するところの自分用まとめ。
前提:
・shpファイルがShiftJISになっている事
わからない時
-> dbfをExcel等で開いて化けてなければShiftJIS
・Perlがインストールされている事
- PostgreSQL+PostGISのインストール
- shpからsqlを作成
- 変換
- sqlを投入
8.1を利用する場合はインストール時にPostGISを選択する
8.2はインストール時以外にも、PostGISのサイトからインストーラーでインストールも可能
今回は8.2で行う。
shpファイルがShift-JISだと、できるSQLもShift-JIS
cd \"Program Files"\PostgreSQL\8.2\bin
shp2pgsql -s 4326 C:\gis\data\xxx.shp x_table x_db > C:\gis\sql\xxx.sql
shp2pgsqlでかけるとShiftJISコード5Cを含むものをエスケープしてしまい\を付加してしまう。
例:北十二条 -> 北十\二条
文字化けしてる訳ではないが、\マークを除去する必要がある
それと、カラム名が日本語になっていてトラブル回避の為、英数に変更。
ただし、カラム名のみ文字化けが発生。
規則性を確認できず原因不明。
データ自体では発生は確認できないのでカラム名のみの問題と判断。
確認している化け文字
郡(8C53)->茎(8C73)
コ(2533)->ビ(2553)
======= Perlサンプル =========
#!C:\Perl\bin\Perl.exe
use encoding "shiftjis";
binmode STDERR, ":encoding(shiftjis)";
use Encode 'decode', 'encode';
$inPath = "C:\\gis\\sql\\";
$outPath = "C:\\gis\\convert\\";
@file = (
"xxx.sql"
);
@convList = (
["\"カラム名\"", "c_name"]
);
for($i=0;$i<=$#file;$i++){
print $file[$i]."\n";
open(IN, "< ".$inPath.$file[$i] );
open(OUT, "> ".$outPath.$file[$i]);
@lines =
foreach ( @lines ) {
$lineOne = decode('shiftjis', $_);
$lineOne =~ s/\\\\/\t\tYEN\t\t/g;
$lineOne =~ s/\\//g;
$lineOne =~ s/\t\tYEN\t\t/\\\\/g;
for($j=0;$j<=$#convList;$j++){
$lineOne =~ s/$convList[$j][0]/$convList[$j][1]/g;
}
print OUT encode('shiftjis', $lineOne);
}
close( IN );
close( OUT );
}
====================
cd \"Program Files"\PostgreSQL\8.2\bin
psql -f C:\gis\convert\xxx.sql -U PGUSER x_db