属性で結合/ SQLでスペーシャライト/ QGISの左外部結合


8

「n」線オブジェクト(「道路」)と交差するポリゴン(「木」と呼びましょう)のレイヤーがあります。すべての道路には一意の属性roadidがあります。

後の使用のために交差するwoods-polygons-layerにすべてのロードID(最初のQGisだけでなく)を追加する必要があります。好ましくは、すべてのロードIDは、たとえば「、」で割った「森」の1つの新しい属性列にある必要があります。

すべての木に道路が1つしかない場合は、「位置による属性の結合」ツールを使用して、ポリゴンの道路IDを取得できます。必要な属性は一意の文字列であるため、フィールドを合計/平均/最小/最大化するのに役立ちません。また、「、」で区切られた文字列としてそれらを結合するオプションはありません。

編集:プラグインや外部プログラムの助けがなければ解決策はありません(以下のMatthias Kuhnのコメントを参照)。

(QGIS 2.10.1-Pisa)


プロセスの最後に必要なものを明確にしてください。複数の分離された値または1つの値のみを含むフィールド?そして、単一の値が必要な場合、複数の一致があるときにどの値を保持する必要がありますか?(例:最長の道路を維持し、道路が重なるほど、IDが最小になるなど)
MarHoff

すべての値が必要です、質問を更新しました-ヒントをありがとう
Papierwolf 2016

1
これは通常、PostGIS内でLEFT OUTER JOINを使用して実行する種類のタスクです...もし偶然PostGisを使用した場合、簡単に回答できますが、QGISのみを使用すると、さらに多くの手順が必要になる場合があります。
MarHoff 2016

1
これは(まだ)QGISでは不可能です。一般に、これは「集約関数」という用語の下で説明されており、将来のリリースではそう遠くないと思われることと思います。一方、私はデータベース(たとえば、postgres)ソリューションを使用することをお勧めします。または、現在気付いていない処理のツールがあるかもしれません。
Matthias Kuhn

2
ポリゴンレイヤーとポリラインレイヤーを交差させることができます。これにより、交差するポリゴンとポリラインのIDを取得できます。Pythonスクリプト/プラグインを作成してポリラインIDをポリゴンIDに収集することもできますが、リレーショナルの観点からは、これは最良の解決策ではありません。
Zoltan、

回答:


6

Spatialiteデータベースを使用してください!

これは、QGISですぐにサポートされる軽量のファイルベースの空間DBです。

  1. これらの指示に従って最初にspatialite DBをセットアップします

  2. QGIS DBマネージャーを使用して、2つのテーブルをこのspatialite DBにプッシュします

  3. テーブルが「ポリゴン」および「ライン」と呼ばれていると仮定すると、DBマネージャーのクエリインターフェイスで次のSQLコマンドを実行します。

SELECT polygon.id,
polygon.lib, -- Place here any field releveant for you (they must also be in grouping clauses, see below)
group_concat(line.id,',') as list_id_line -- this function concatenate the id of every line that touch you polygon
FROM polygon LEFT OUTER JOIN line
ON Intersects(polygon.geom,line.geom) -- Spatial Dabatabase Rule !
GROUP BY polygon.id, polygon.lib -- theses are the grouping clauses
  1. 楽しい!

SQLiteの集計関数についてはこちら、spatialiteの関数についてはこちらをご覧ください。


MarHoffのおかげで、これは有望に見えます!私は明日あなたの解決策を詳しく見て、あなたにふさわしい「受諾の答え」と賛成票を差し上げます。
Papierwolf 2016

実際、それが以前に機能するかどうかを確認してください;)私は実際には、サーバーなしのオプションとしてのSpatialiteの可能性にかなり驚いていました。私がPostGisで作業しているので、あなたは私にそれを試す良い機会を与えてくれました!
MarHoff 2016

あなたのソリューションはうまくいきます。ソースとスクリプトを提供してくれてありがとう。これは本当に初心者がこれがどのように機能するかを理解するのに役立ちます。質問とタグを再度更新して、他のユーザーがこの質問とあなたの回答を見つけられるようにします。
Papierwolf 2016

どういたしまして!そして、私は新しいタイトルが大好きです。IMHOタグ「式」を「空間ライト」に置き換えることも公平かもしれません。バイバイ;)
MarHoff 2016

1
私の間違いから学んでください:SpatiaLiteにデータをインポートするとき(または後でテーブルを右クリックしてインポートするとき)は、[Create Spatial Index]をオンにする必要があることに注意してください。幾何学的操作を含むSQLクエリは、実行を忘れると時間がかかる場合があります。
Papierwolf 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.