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

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