QGISを使用して複数のレコードを単一の機能に結合しますか?


25

建物のシェープファイルがあるQGISで結合/リレートを作成しようとしています。それに、各建物で働く人々を含む非空間テーブル(.csv)を結合したいと思います。したがって、テーブルに複数のレコードがあり、それらをシェープファイル内の単一の機能に結合できるようにしたいと考えています。QGISで結合を実行できるのは、最初のレコードがシェープファイルフィーチャー(つまり、建物)に結合されているだけですが、後続のレコードは削除されます。

QGISでこの参加/関連付けを完了する方法を誰かに教えてもらえますか?


ここでも同様の質問がありましたgis.stackexchange.com/questions/5797 / ... RT SQL LayerプラグインとeVisプラグインが提案されました。私はeVisプラグインを使用しましたが、理想的なソリューションではありませんでした。
安藤

2
私は同じ問題を抱えており、実際にテーブルを結合することはできます。トリックは、複数の値を持つテーブルを単一の値を持つテーブルに結合することです(ここでは、逆方向ではなく、人から建物へ)。私が経験している限り、問題はこれを行うことで、結果を地理参照ファイルとして検索およびエクスポートできないことです(少なくとも私にとっては)。この問題を回避する方法はありますか?marc

達成したい最終結果は何ですか?なんとか参加できたとしても、それを地図に表示したいですか?統計はありますか?それに応じて、さまざまなワークフローに従うことができますが、結合を行う場合は通常、データベースを使用することをお勧めします。
-johanvdw

回答:


15

QGIS 1.7.0を使用してこの問題を解決しました。最初に、ベクターレイヤーをジオメトリフィールドが既知のテキストに変換されたコンマ区切り値(CSV)テーブルとして保存しました。これを行うには、[ベクターレイヤーを名前を付けて保存...]ダイアログのレイヤーフィールドでGEOMETRY = AS_WKTを読み取り、WKTという列を持つジオメトリの既知のテキストフィールドを作成する必要があります。

次に、CSVジオメトリファイルは、非ジオメトリ属性テーブルのプロパティ結合タブの下の1対多結合で非ジオメトリ属性テーブルに結合されました。

結果の結合は、別のジオメトリCSVファイルとして保存されました。

このテーブルをQGISで開くと、各属性レコードは適切なベクタージオメトリで表されました。

これらすべてを行う中で、区切り文字がカンマであり、WKTジオメトリフィールドの名前がWKTである場合、CSVジオメトリファイルを開くのに区切りテキストプラグインが不要であることを発見しました。

これがどのように行われるかの詳細については、http://georgiawildlife.com/node/2849にある私のチュートリアルを参照してください


良いアプローチogr2ogrです。シェープファイルからCSVファイルを作成するために使用するのと同じようなことをしました。次に、必要な共通フィールドのファイルをマージしてCSVに書き戻す簡単なRスクリプト。その後、ogr2ogr再びマージされたシェープファイルを作成します。
vpipkt

1
これは最高と評価される場合がありますが、そのためのプロセスは以下の@underdarkによって回答されます。これはハッキングであり、最善のオプションではありません。低速で非効率的で、ファイルが大きくなり、手順が増えます。
nittyjee

10

レイヤープロパティで作成された結合は、既存のフィーチャに列を追加するだけです。ベクターレイヤーに160個のフィーチャしかない場合、結合してもフィーチャの数を増やすことはできません!

代わりに仮想層機能を使用してください。実際のSQL /データベースのような結合を提供します。例については、私の最近の投稿を参照してください:仮想レイヤーを使用したODフローマップの小さな倍数

ここに画像の説明を入力してください


7

QGIS 1.7には、結合のための新しいエンジンがあります(ベクトルプロパティにあります)。

ジオメトリレステーブルは、他の(ベクター)レイヤーと同様にプロジェクトに追加できるようになりました。


7

バージョン2.2以降、QGISは1対多の関係をサポートしています。ただし、ベクターレイヤープロパティではなく、プロジェクトプロパティで定義します。そして、関連するレコードがレイヤーの属性テーブルに表示されるか、フォームを介して結果を識別します。

回答とこちらの良いガイドへのリンクをご覧ください。


4

LibreOffice Baseで参加します。

1対多の関係を管理しようとしているという事実を克服することはできません。

非空間的から非空間的であるためには、学ぶ努力の価値があります。最大の秘trickは、結合属性フィールドがまったく同じ用語を持っていることを確認することです。

空間に配置されたデータをQGISのレイヤーとして開き、QGISの属性テーブルですべてのレコードを選択し(選択をクリア、選択を反転)、LibreOffice Calcの新しいシートにコピーします。最初のフィールドはWKTで、これはGISで広く使用できる機能の説明です。Calcは、貼り付けられたテーブルをインポートし、タブ区切りを選択し、WKTフィールドをビットに噛むため、カンマがチェックされていないことを確認するダイアログを表示します。次に、Calcでこのテーブルを強調表示し、ベースに切り替え、左側のテーブルアイコンを強調表示して貼り付けます。ベースはダイアログを介してテーブルをインポートします。WKTフィールドは結合を通じて保持でき、ファイルが.csvとしてQGISにインポートされて戻されると、これらはフィーチャの再配置に使用されます。投影を思い出してください。

そのようにして、結合を完全に制御し、「リバース」で実行できます。Baseで結合を行うには、一意のデータフィールド(1)が主キーであることを確認し、1対多または1対nの概念に精通している場合は、「多く」を指定します。結合は、関係を作成することでセットアップされます| TOOLS |。前述したように、結合フィールドは同じ情報を持っているが、それを表すために異なるテキストまたは構文を使用している場合は、おそらく誰かを蹴りたいと思うでしょう。

hth


2

QGISで1対多の関係を持つテーブルをリンクすることは不可能だと思います。別の方法として、gvSIGを試すこともできます。ここでは、1対多数のリンクを作成できます。リンクを作成した後、マップ内のフィーチャを選択すると、リンクテーブル内のすべての関連レコードが強調表示されます。


1
仮想層の導入以来、この答えはもはや正しくありません。
暗闇
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.