要約:一昨日(プロジェクトファイルを事前に準備)より便利な方法の基本形が、昨年末のメーリングリストHow load Postgis layer from command line?に出てました。それに複数レイヤ対応を加え、起動用バッチファイルの中に組み込んでみました。↓
短い説明
探せば見つかるものです。OGR Virtual Formatというのがあるらしく、その形式でPostGISへの接続文字列とクエリなどを書いてvrtファイルに保存し、QGIS起動時にロードするだけ。プロジェクトファイル不要で、PostGISデータが自動的に表示されます。さらに上のバッチではvrtファイルの動的生成を組み込みました。
以下Windows 7 32bit + Portable QGIS Swiss Edition (2.8.2)でのテスト例。バッチファイル中にQGISの絶対パスを入れたので、どこに置いても単独で使えます。↓
↓ バッチ起動でvrtファイルが読み込まれ、レイヤ選択ダイアログが出ます。地物数とジオメトリタイプが表示されていれば、この時点で適切にPostGISデータにアクセスできている証拠。Ctrl+A、続いてリターンで全レイヤを読み込みます。このダイアログもスキップできれば、もっといいのですが。
↓ テスト結果の例。色とかは未設定なのでQGISが適当に決め、起動するたびに少しずつ違いました。デフォルトを固定するオプションがどこかにあるかも。バッチファイルと同じ場所にvrtファイルができます(二つ目の画像)。
テストに使ったデータ
昨日紹介したuDigのサンプルDBを、ローカルのデータベースにコピーしたもの。下の5つのテーブルのうち、今回のバッチファイルでは3つ読み込みました。バッチに記述したレイヤ(PostGISへのクエリ)の順序が、そのままQGISレイヤの上からの位置になって便利。
そのほか
バッチファイル中では、PostGISレイヤの複数記述をなるべく簡単にするため配列もどきを使用(普通の配列は使えない)。またvrtファイルはXML形式なので<と>があり、バッチファイル中では^でエスケープ。とまぁWindowsコマンドプロンプト特有の手間がありましたが、一度バッチを作ってしまえば後々楽です。
vrtファイルはSrcSQL要素にクエリを書くので、行や列を限定したり、演算や他のテーブルと結合する等のクエリも書けるかも。そうなると更に実用的なので、いずれ試します。