[OSGeoJapan-discuss] 【質問】QGISの属性データ結合時のフィールド名

Minoru Akagi akaginch @ gmail.com
2014年 6月 2日 (月) 01:34:59 PDT


喜多さま、みなさま

> 早速質問なのですが、QGIS2.0以降でレイヤのプロパティで属性データの結合をした場合、結合したフィールド名にレイヤ名が着いてしまいます。
> このレイヤ名を付かなくする方法は無いでしょうか。

QGISの課題管理システムにも同様の内容の要望は出ており[1]、フィールド名の先頭にレイヤ名を付けないオプションを追加するプルリクエストも存在しますが、まだ取り入れられてない状況です。

ProcessingプラグインのJoin attributes
tableでもレイヤの属性テーブルに他のテーブルを結合してシェープファイルに保存することが可能で、これを用いれば結合されたフィールドの名前の先頭にレイヤ名が付かないデータを得ることができます。

試してみた環境(OSGeo4WのQGIS 2.2)ではスムースに実行することができず、うまく処理を完了するには次の条件を満たす必要がありました。

1. 結合するテーブル(CSVファイル)はデリミティッドテキストレイヤとして読み込んでおく。ベクタレイヤの追加で読み込んだテーブルはダイアログ内のレイヤ一覧に表示されない。

2. 結合のキーとなるフィールドのデータ型は一致させる。例えば行政コードをキーとして結合する場合、一方のフィールドが文字列型で他方が数値型の場合、両者の比較で一致することはなく、結合されたフィールドはすべてNULLとなる。

3. 結合するテーブルのキーとなるフィールドの名前にはnon-ASCII文字を含んではいけない。

4. 属性テーブルにnon-ASCII文字が含まれる場合、UnicodeEncodeError /
UnicodeDecodeErrorが生じる場合があるのでpythonのディレクトリ下のlib\site-packagesに次の内容のファイルを置いてからQGISを起動する。

# sitecustomize.pyの内容
import sys
sys.setdefaultencoding("utf-8")

# sitecustomize.pyを置く場所の例
- OSGeo4W (64ビット)の場合: C:\OSGeo4W64\apps\python27\lib\site-packages
- スタンドアロン版のQGIS 2.2の場合: C:\Program Files\QGIS
Valmiera\apps\Python27\Lib\site-packages

# Python 2.xのデフォルトの文字コードはASCIIなので、str型の値 <->
unicode型の値の変換の際にASCII文字以外の文字が含まれているとエラーが生じる場合があります。デフォルト文字コードをUTF-8に変更すればUnicodeエンコード・デコードエラーが生じません。


また、現状ではこのJoin attributes
table機能の処理速度はとても遅いので大きなテーブルを結合する時には気長に待たなければいけません(コードには改良の余地があります)。

ついでですが、4の対処法は他のプラグインで生じる同様のエラーに対しても有効です。これによって例えば、mmqgisプラグイン[2]のKMLエクスポート機能で日本語の属性値を出力することが出来るようになります。


[1] http://hub.qgis.org/issues/6707
[2] http://plugins.qgis.org/plugins/mmqgis/

赤木 実

2014年6月1日 21:32 喜多耕一 <kou35tochas @ gmail.com>:
> みなさん
>
> 北海道の喜多です。
> 早速質問なのですが、QGIS2.0以降でレイヤのプロパティで属性データの結合をした場合、結合したフィールド名にレイヤ名が着いてしまいます。
> このレイヤ名を付かなくする方法は無いでしょうか。
>
> 結合したレイヤをシェープファイルで保存すると、フィールド名は全角5文字までなので、全て同じフィールド名に番号が付いたものに変わってしまいます。
>
> 現状は、半角1文字のレイヤ名に改名して、なんとかごまかしてますが、フィールド名を新たに入力するのも手間なので、レイヤ名の無いそのままのフィールド名にしたいのです。
> 1.8までは、レイヤ名は付かなかったと思います。何で変えたのかな?
>
> よろしくお願いします。
>
> 喜多耕一
>


More information about the OSGeoJapan-discuss mailing list