QGIS オブジェクトに重なるオブジェクトの属性をカンマ区切りで取得する

こちらのページを参考に、あるオブジェクトに重なるオブジェクトの属性をカンマ区切りで取得してみました。少し手こずる箇所がありましたので、メモしたいと思います。

gis.stackexchange.com

 

f:id:Chiakikun:20200124125538p:plain

今回は関東地方の各県(レイヤ名は関東地方)に重なる2次メッシュ(レイヤ名はjpmesh_2)のメッシュ番号(フィールド名はcode)をカンマ区切りで取得します。


属性をカンマ区切りで取得する

仮想レイヤを作成する

f:id:Chiakikun:20200124131315p:plain

メニューの『レイヤ』→『レイヤの作成』→『仮想レイヤを新規作成』を選択します。

クエリを設定して新レイヤを追加する

f:id:Chiakikun:20200124131441p:plain

『インポート』ボタンを押下して、仮想レイヤ作成に必要なレイヤを選択します。今回は関東地方とjpmesh_2を使って新しいレイヤを作成するので、この2つをインポートします。

クエリには次のコードを入力します。

SELECT 関東地方.geometry, N03_001, group_concat(code) As meshs
FROM 関東地方 ,jpmesh_2 where st_intersects(関東地方.geometry, jpmesh_2.geometry) 
group by N03_001

 関東地方のそれぞれの県に重なるjpmesh_2を、フィールド「N03_001」の値(県名)毎にまとめて、カンマで結合してフィールド「meshs」の値として新レイヤに投入します。

『テスト』ボタンを押下して、エラーが無ければ『追加』ボタンを押下して、新レイヤを追加します。

f:id:Chiakikun:20200124132614p:plain

追加されました。

追加されたレイヤの属性

f:id:Chiakikun:20200124132734p:plain

このようにフィールド「meshs」にjpmesh_2のフィールド「code」の値がカンマ区切りで入りました。


保存時の注意点

シェープファイルで保存すると...

f:id:Chiakikun:20200124133115p:plain

シェープファイルで保存するとフィールド型の文字数設定が254である為、値が途中で切れてしまいます。

青丸部分は指数表記になってしまっています。この点については後述します。

CSVで保存すると...

f:id:Chiakikun:20200124134649p:plain

オブジェクト情報は無くなりますが、csvで保存してみます。すると...

 

f:id:Chiakikun:20200124134739p:plain

文字列は切られていませんが、指数表示の部分はそのままでした。ですが...

 

f:id:Chiakikun:20200124134953p:plain

LibreOfficeで表示してみたら、問題無く表示されており、

 

f:id:Chiakikun:20200124135051p:plain

メモ帳で開いても問題無かったので、エクセルの問題でした。

オブジェクト情報残したい場合

GeoPackageやMIFに保存した場合は文字列が切られることは無かったので、カンマ区切りで取得した文字列が長い場合はシェープ以外のファイル形式を検討してみてください。

最後までご覧頂き、ありがとうございました

QGISのポリゴン融合処理を速くしたい


国土数値情報ダウンロードサービスからダウンロードできる行政区画のシェープファイルを下のように融合させた時の処理時間が結構長かったので、時短を試みた際のメモです。

 

f:id:Chiakikun:20200118231340p:plain


一度に全部融合させた場合

まずは普通に融合させてみます。

融合を実行する

f:id:Chiakikun:20200119112238p:plain

メニューの『ベクタ』→『空間演算ツール』→『融合』を選択します。

設定

f:id:Chiakikun:20200119113538p:plain

出力レイヤ以外はそのままで『実行』ボタンを押下します。

結果

約34時間で全部融合できました。


2回に分けて融合させた場合

まずこんな感じに融合させます

f:id:Chiakikun:20200122172713p:plain

フィールドを追加する

f:id:Chiakikun:20200122172852p:plain

市町村で分けられている行政区画を大雑把に融合してみます。今回はフィールド「N03_007」の一番左の1文字目を使います。

フィールド「tmp」を追加します。タイプはテキストとします。

融合に使うフィールドに値を投入する

f:id:Chiakikun:20200122174136p:plain

左赤丸のコンボボックスからフィールド「tmp」を選択して、式の入力欄に次のコードを入力します。フィールド「N03_007」の値が空の場合は文字aが、空でない場合は値の一番左の文字がフィールド「tmp」に入ります。

if("N03_007" IS NOT NULL, left("N03_007", 1), 'a')

コードを入力したら右赤丸の『全部更新』ボタンを押下します。すると...

f:id:Chiakikun:20200122175225p:plain

文字がフィールド「tmp」に入りました。

融合を実行する

f:id:Chiakikun:20200122175416p:plain

融合してみます。メニューの『ベクタ』→『空間演算ツール』→『融合』を選択し、ダイアログの赤丸のボタンを押下すると『複数選択』ダイアログが表示されるので、「tmp」を選択して『OK』ボタンを押下します。
約1.5時間でこんな感じに融合されます。

その後は全部融合させる場合と同じ設定(入力レイヤは、融合させたレイヤ)で融合を実行します。

結果

一度融合させた時間も含めて、 約12時間で全部融合できました。

 

最後までご覧頂き、ありがとうございました。

QGISでジオリファレンス


ジオリファレンス

 QGISでジオリファレンスをしてみたので、その手順を紹介します。マップのベクタデータは国土数値情報ダウンロードサービスから、画像は白地図専門店様で無料提供されている画像を使用しました。

f:id:Chiakikun:20191211001633p:plain

マップ

f:id:Chiakikun:20191211001653p:plain

画像

ジオリファレンサを起動する

f:id:Chiakikun:20191211002230p:plain

メニューの『ラスタ』→『ジオリファレンサ』を選択します。

画像を開く

f:id:Chiakikun:20191211002310p:plain

 ジオリファレンサウィンドウが表示されます。『ラスタを開く』アイコンを押下するとファイル選択ダイアログが表示されるので、画像ファイルを選択します。すると...

 

f:id:Chiakikun:20191211002350p:plain

ジオリファレンサウィンドウに選択した画像が表示されます。

 

ポイントを追加する

f:id:Chiakikun:20191211002520p:plain

位置合わせをするためにマップと画像にポイントを置いていきます。『ポイントの追加』アイコンを押下します。

画像に点を置く

f:id:Chiakikun:20191211002553p:plain

マップの適当な箇所をクリックすると...

地図座標の入力ダイアログ

f:id:Chiakikun:20191211002654p:plain

地図座標の入力ダイアログが表示されるので、『キャンバスから』ボタンを押下します。

マップに点を置く

f:id:Chiakikun:20191211003013p:plain

マップが前面に表示されるので、画像のクリックした箇所に対応するマップの位置をクリックします。すると...

 

座標が入力される

f:id:Chiakikun:20191211003056p:plain

地図座標の入力ダイアログに座標が入力された状態で前面に表示されます。これで良ければ『OK』ボタンを押下します。

ジオリファレンサウィンドウとマップにポイントが表示される

f:id:Chiakikun:20191211003144p:plain

マップと画像のクリックした場所にポイントが置かれます。この作業を他の箇所で何回か行います。

保存先、変換方法の設定

f:id:Chiakikun:20191211003236p:plain

まだ何も設定していない状態で『ジオリファレンスの開始』アイコンを押下すると、下のダイアログが表示されます。

f:id:Chiakikun:20191211003527p:plain

ここで位置合わせ後の画像の保存先や変換方法を設定します。何回かジオリファレンスしてみましたが、変換タイプ「シンプレートライン」、リサンプリング方法「最近傍」の組み合わせが個人的にはとても良かったです。

 

マップに画像が表示される

f:id:Chiakikun:20191211003851p:plain

もう一度『ジオリファレンスの開始』アイコンを押下すると、マップに画像が表示されます。画像レイヤを少し透明にすると、下のベクタが表示されるので、ずれが確認できると思います。

微調整したいとき

f:id:Chiakikun:20191211003932p:plain


まだ少しずれている箇所があるので...

f:id:Chiakikun:20191211004027p:plain

ポイントを追加した後、『ジオリファレンスの開始』アイコンを押下すると...

 

f:id:Chiakikun:20191211004217p:plain

少し位置が合いました



結果

f:id:Chiakikun:20191211004351p:plain

最終的に8個ほどポイントを置き、上記のような感じになりました。位置合わせした画像はTiffで保存されています。



お疲れさまでした。