QGIS ベクトルデータ統合 バッチ処理に挑戦(問題解消2019.10.23)
QGIS(3.6madeira)のベクトルデータ統合のバッチ処理に挑戦 2019/09/04
これを使おうと挑戦したが、結果は、失敗。
同じ失敗を繰り返さないため、メモを残す。
バッチ処理では、以下の情報を入力する。
①入力レイヤ
②入力CRS
③出力ファイル
①入力レイヤ
A.読み込み済みレイヤと、B.外部ファイルの選択があり、複数選択可能
B.について、shpのzip形式と、shpの場合
ネットワークドライブでうまくいかなかったため、内部ドライブのファイル、
漢字含みファイルと無しファイル
等を試した。
②入力CRS
WGS84 4326 で。
③出力ファイル
A.qgkpファイルと、B.shpファイル の選択があり、それぞれ、新規であることを求められる。新規でない場合、上書きするよう。
塗りつぶしの設定を求められる。(意味は不明)
試験結果
試したデータはエリアデータ。
網羅的に組み合わせを調べたわけではないが、①A、③A..の場合で、①で複数選択していても、末尾の1ファイル分のみ入力・出力が可能だった。
バッチ処理の保存をしようとすると、エラーが出る場合には、試行も失敗する。
今後の予定
バグが有るかもしれないので、アップデート後に調べる。
これに関するWEB情報等を調べる。(今のところ、有効なレポートはない)
バッチではなく、Pythonスクリプトを調べてみる。いくつか参考になりそうだが、まだ使い方はわからない。
補足レポート(2019.10.23) QGIS2.18での解消
QGISのプラグインには、日本語名フォルダに対応していないものも多い。との記載があった。
上記の失敗時には、日本語名フォルダ・ファイルをもちいていたため、これを、ascii文字だけのファイルにしてみた、何も変化は生じなかった。(QGIS3.4)
最後に、QGIS2.18で、同様のことをやってみると、問題なく統合ができた。
shpには、CRS設定のprjファイルがなければプロジェクトCRSが使用される。
また、漢字のフォルダ、ファイルでも問題が無かった。
3.4と2.18ではプロジェクトファイル形式が異なり、使い分けは面倒であるが、
3.4での解消法が見つかるまでバッチ処理時には2.18を使うこととしよう。
バッチ処理のjsonファイル作成
多数の処理を行う場合、バッチの設定も大変なので、このjsonファイルの作成をプログラムで作成することとしよう。
バッチ処理にあたっての留意点
バッチ処理で、zipファイルをそのまま使うことができるが、複数shpを含む場合、1個目のshpのみを処理する。W05では、NodePointとStream(Line)を含むが、Pointのみになる。各zipファイルの中身を把握し、解凍してshpをそのまま使う方がよさそうである。
ちなみに、W05を統合する際のプログラムは、下記のとおり。
ここで、kokudosフォルダには、W05-07_07_河川、W05-08_08_河川、W05-08_09_河川があり、そこに各県のダウンロードshpが入っている。
require "json"
kens=%w[ 07 08 09];kenp="0[789]";ken_=kens[-1]
pat="W05-"
nfo_json="W05.json"
Dir.chdir("kokudos");pwd=`cygpath -w $PWD`.chomp
typs=%w[RiverNode Stream]
fo_json=open(nfo_json,"w")
contents=
typs.each{|typ|
fs=Dir.glob("#{pat}*#{kenp}*/#{pat}??*#{typ}*.shp").sort
print "fs",fs
dir=File.dirname(fs[-1])
next if fs==
nfo=dir.sub(/_#{kenp}_/,"_ken_")+"_#{typ}.shp"
next if File.exists?(nfo)
print "nfo",nfo
layers='"'+fs.map{|f|
fw=f.sub(/\//,"\\")
"#{pwd}\\#{fw}"}*";"+'"'
contents.push({"OUTPUTS":{"OUTPUT":"#{pwd}\\#{nfo}"},
"PARAMETERS":{"LAYERS":layers}})
}
json=JSON.generate(contents)
print json
fo_json.print json
fo_json.close
print `ls -o #{nfo_json}`.chomp
__END__