2006年12月26日

●シェイプデータからPostGISに投入するまとめ

Windows環境でShiftJISの文字列が含まれるシェイプデータからPostGISにデータ投入するときに注意するところの自分用まとめ。

前提:
・shpファイルがShiftJISになっている事
わからない時
-> dbfをExcel等で開いて化けてなければShiftJIS
・Perlがインストールされている事


  1. PostgreSQL+PostGISのインストール

  2. 8.1を利用する場合はインストール時にPostGISを選択する
    8.2はインストール時以外にも、PostGISのサイトからインストーラーでインストールも可能
    今回は8.2で行う。
  3. shpからsqlを作成

  4. 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
  5. 変換

  6. 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 );
    }
    ====================

  7. sqlを投入

  8. cd \"Program Files"\PostgreSQL\8.2\bin
    psql -f C:\gis\convert\xxx.sql -U PGUSER x_db

2006年12月21日

●shp2pgsqlで変換すると十に\マークが付く件

シェイプファイルからPostGIS用にSQL書き出すために、作業してるのですがどうしても「十」の文字列の後ろに\マークが付きます。

作業的には間違ってないとは思うのですが

shp2pgsql -s 4326 C:\gis\data\xxxxx.shp x_table x_db > C:\gis\sql\xxxxx.sql

これをかけただけです。
そうするとできたsql開くとなぜか、住所の日本語が「北十\二条」とか\マークが入ってしまう。
ざっと見る限りでは十の文字には必ずついていて、それ以外は綺麗なもんです。
--追記
よくみたら能とかにも\ついてました。同考えても親切にSJISをエスケープしてくれてるようで・・・。

それの影響で、SQL流し込んだら変なところでエスケープされてて入らないよと起こられる始末。

で、原因が何かと無駄なあがきをしてみた。
・dbfファイルをExcelで開いてみても北十二条となってる。
・client_encodingをsjisにしたけど変わらない。
・北12条と書き換えたらもちろん\マークなんぞは付かない。
・PostgresSQL8.2+PostGIS1.2.0にしてみたが変わらない。

化けそうなところ見ても化けてないので、書き出されたSQLの\マークを置換しちゃえばいいのかなと悪魔のささやきがありますが、なんか実は他も化けてました。テヘ☆とか言われたら怖いので最後の手段で取っておこう。
なにせshp2pgsqlかけるとカラム名が"指定市郡名"になってるものは"指定市茎名"とおしゃれな名前に化けてるから・・・・。データに入ってる郡は茎にはなっていないオシャレさ。

うーむ。
何かはめられてるな。

p.s.
PostgreSQL8.2をインストールする時に実行するユーザをpostgresさんじゃなくインストールすると、インストール失敗し、C:\Program Files\PostgreSQL\に破壊されて消せもしない8.2というフォルダができてしまうのでお気をつけ下さい・・・。
消したかったらセーフモードでadministratorなら入って消せましたが。
消せなくて焦りました。

続きを読む "shp2pgsqlで変換すると十に\マークが付く件"

2006年12月20日

●MT不調によりMySQLに移行

ブログがずっと不調で、せっせと数万溜まったスパムを消したりしてたら、書き出せなくなりました。
なんど再構築してもサーバエラーになり動かず。
ブログサービスに移行しようかと思ったけどなんなので、とりあえずBerkeleyDBからMySQLにDBを移してみました。
そしたら・・・・普通に動き出しました(涙
よかった。よかったよ。

●GoogleMapsの画像化

下記のご愛読ブログを見て勢い余って作ってしまいました。

Google Mapsの地図を自由に切り出すインタフェースがあった
ここギコ!

で、下記を作ってみた。
GoogleMaps地図画像化
※あくまで私個人のテストですのでもろもろご了承ください。諸事情により削除される可能性があります。

うーむ。
うまいこと使えればブログツールでみたいな使い方もありになりますねぇ。
マーカーもデフォルトアイコンですが複数置けるし。
でも、標準の仕様でもないし、規約上問題ありありなのであくまでテストですけども。

URLの作り方的には下記のような感じ。あくまで私が見た主観です。仕様ではないです。
・ベースのURL
http://maps.google.com/mapdata?
・マーカーパラメータ
Point=b&Point.latitude_e6=[緯度]&Point.longitude_e6=[経度]&Point.iconid=[アイコン番号]&Point=e
※このPoint=bとPoint=eまでの間の組み合わせが複数あっても表示される。
※アイコン番号は数字だが何があるか不明
・場所パラメータ
latitude_e6=[緯度]&longitude_e6=[経度]&zm=[ズーム]&w=[横サイズ]&h=[縦サイズ]&cc=US&min_priority=1
※ズームの倍率はGoogleMapsAPIの数値とは違う数値
※ccは国だが何で使うのかな・・?
※min_priorityは優先順位?何の??

2006年12月06日

●PLCの存在

PLCがやっと動き出したなぁと最近思っていたのですが、どうも一般で未使用の技術だけに心配事されまくりです。

医療機器に注意喚起 高速電力線通信めぐり厚労省
http://www.asahi.com/life/update/1206/005.html
引用 [ asahi.com ]
電力線通信:電波妨害の恐れ 大学教授ら行政訴訟へ
http://www.mainichi-msn.co.jp/today/news/20061205k0000m040144000c.html
引用 [ MSN毎日インタラクティブ ]

PLCは極端に言えば家庭内ADSLなわけで、コンセント刺したら勝手にテレビがインターネットに!みたいなすっきりすっきりするような規格ではあるんですがね。
無線LANがあるじゃないかとはいえ、2階建てとかの家では1個じゃかなりきついわけで。
そうなると、中継基地作って・・とかなると相当めんどくさいです。
ただ、充電や電子レンジなどのものをつけたコンセントでは干渉してつながらないという切ない仕様なので、ノートPCでコンセント刺したらもうインターネットとはいかないので、家電向きな感じなんですかね。

実際問題としてに家庭内はシールドしてるわけでもなくむき出しだしだから電波でまくるというのが争論のターゲットであるようなので、PLC対応みたいな配線された家なら問題なしと扱われるのでしょうか?
昨今、家庭内の電源にLANがついてるタイプがありますが、いっそPLC対応のちゃんとした電源ですよーっていうのがなぜ出てこないのだろうか。
やっぱコストが高いのか、私の浅はかな知識とは別の次元で実装できないのか。
モデルルームくらいならあってもいいんじゃないかなーと思うのだが。
パナソニックセンターで見かけたPLCもモデム自体にフィーチャーされてましたが、電線には特に触れてなかった感があります。

●うわわ

最近使ってなかったのできちんと整理して使おうと整理してたら、間違ってカテゴリ全部消しちゃいました・・・。
半分以上が消えましたか、そうですか。

まぁ、前向きに1からのスタートということで。