あるポリゴンレイヤーから別のポリゴンレイヤーに属性をコピーしますか?


11

問題があり、頭を動かせないようです。2つのポリゴンレイヤーがあります。

  • ポリゴンA-同じフィールドを持つポリゴンBのサブセットであり、ポリゴンBと同じポリゴンがあります
  • ポリゴンB-ポリゴンAにしたい属性データがあります

これをどのように行うことができますか?QGISツール「位置による属性の結合」を試しましたが、一部のポリゴンは他のポリゴン内にあるため、最初に見つかった交差点(外側のポリゴン)にリンクする傾向があります。


A.から属性保持するために、新しいファイルにBに属性と輸出をポリゴンAの重心(ポイント)を作成し、参加
Mapperz

3
@Mapperzこれは危険なアプローチです。通常、見かけ上の答えが生成される場合でもエラーが発生する可能性があるためです。ポリゴンが互いに重なり合っている場合、すべての賭けはオフになります。オーバーラップがない場合でも、ポリゴンの重心が別の(オーバーラップしない)ポリゴン内にある可能性があります。一般に、Aのすべてのポリゴンが重複せず、凸である場合にのみ、正確性を保証できます。
whuber

+1 @ Diego-あなたの質問は非常に興味深い議論/議論につながります。それで面白いものです!
ダノ

回答:


9

@Danoは、完全な返信で対処するのが最適な問題を正しく提起します。

@Celeniusがすでに指摘している難点の1つは、BとAの結合(どちらの方向でも)がすべてのフィールドを複製することです。これを修正するのは面倒です。私はコメントで、明らかな簡単な方法(スプレッドシートへのエクスポート)がデータの整合性の問題を引き起こすことを提案しました。 Celeniusの提案ですでに対処されているもう1つの難点は、AとBの両方のキーとして機能する属性の組み合わせがない場合、この問題を解決することです。空間結合はその問題を回避します。

それでは、良い解決策は何ですか? 1つのアプローチでは、Aを使用して、目的のデータを含むBの対応するレコードを識別します。ポリゴンの構成に関する前提に応じて(重なり合うか、他のポリゴンを含むことができるかなど)、これはさまざまな方法で実行できます:1つのレイヤーを使用して他のレイヤーのオブジェクトを選択するか、結合を使用します。ここでのポイントは、この段階でやりたいことは、Aに対応するBのサブセットを選択することだけです。

その選択を達成したら、選択をエクスポートして、A。Doneを置き換え ます。

このソリューションでは、BのすべてのフィールドがAの対応するフィールドを置き換えることを想定してます。そうでない場合は、B(ソース)からA(宛先)への1-1結合実行する必要があります。 識別子に基づいた結合が最適ですが、IDが使用できず、AとBの対応するポリゴン形状がわずかに異なる可能性がない場合、ポリゴンID(Celenius)での結合は正常に機能します。(これは微妙なポイントであり、潜在的なエラーの潜在的な原因です。これは、GISが「スナップ」または「トポロジを維持」している場合、Aに対応しないポリゴンに対するBの以前の編集がBの他のポリゴンを目に見えないように変更する可能性があるためですまたは、ローカルの編集中に自動的にグローバルな変更を行います。)

この時点で、すべてのフィールドのコピーが2つあります。[Foo]がAとBに共通のフィールドである場合、結合にはA. [Foo]とB. [Foo]が含まれます。 フィールド計算を使用して、 B。[Foo]をA. [Foo]にコピーします。必要なすべてのフィールドについて繰り返します。これが完了したら、結合を削除します。

多くのフィールドが関係する場合、この手順は少し面倒ですが、そのメリットは次のとおりです。

  • スクリプトは簡単で高速です。
  • スクリプトを作成すると、データに対して行われた処理を文書化した監査証跡が残ります。これは、データの整合性を保護するために重要です。
  • 結合後に間違ったフィールドを保持する(それにより、そのフィールドの新しいデータの代わりに古いデータを保持する)、または重要なフィールドを削除するなど、ある種の大規模なエラーを防ぎます。
  • データベース管理システムが提供する、データタイプの強制やビジネスルールの強制など、データベースのすべてのテーブルとレイヤー間のエラーを防止および特定し、一貫性を維持するために機能する組み込みの防御を活用します。

この提案に含まれる指針のいくつかは次のとおりです。

  1. このタスクに設計されていない、または不適切なソフトウェアを使用するのではなく、データベース管理システムを使用してデータを処理します。
  2. 操作で絶対に必要とされない場合は、データベース構造の変更(フィールドの削除や追加など)を避けてください。
  3. ソフトウェアの自動化機能を使用して、作業を簡素化し、文書化し、操作を再現可能にします。

多くの場合、同じ結果を得るためのより高速で簡単な方法があることに反対する人がいるかもしれません。はい、存在する可能性があり効果的である可能性があり、通常、注意して実行すると機能します。ただし、データを危険にさらすソリューションは、汎用の回答として推奨および防御することは困難です。それらは、データの破損がすぐに明らかになり、そのようなミスの結果が重要でない小さなデータセットを使用する1回限りの状況で最もよく使用されます。


+1 @ whuber-ここですべての変数を比較検討しているのは明らかです。よく考えられた答え。コメントボックスにスペースがなくなるので、元の回答への追加を参照してください。
ダノ

1
「Celenius」に何が起こったのか疑問に思っている人のために、このスレッドのさまざまな場所について言及しました。現在は@djqとして知られており、彼/彼女の答えはこちらです。:ウェイバックマシンへの賞賛web.archive.org/web/20120127210858/http://gis.stackexchange.com/...
マットウィルキー

5

Arcmapでは、ポリゴンBをポリゴンAに空間的に結合できます。これは属性を関連付けます。フィールド名は同じであるため、名前の新しい組み合わせが作成されます。


これは私が置くものです。私の目には、この短い答えが正しいものです。
サイモン

4

シェープファイル「B」のテーブルをExcelにエクスポートし、冗長な列と、不要な情報を含む列を削除します。必ず共有識別子の列を保持し、適切なフォルダーに保存してください。ArcMapに移動し、テーブルを追加してから、シェープファイル「A」を右クリックして、テーブル結合を実行します。リンクは、これを行う方法に関するビデオにつながるはずです。


@ whuber-アプローチ全体が健全であり、データの整合性を保証します。この答えに異議を唱えることができる唯一のことは、特定の状況/プロジェクトでは、アプローチでこの系統的であるための時間や予算を私たちに与える余裕がないということです。

実物の例:

ジュニアマイニングカンパニーは、資源を「証明」する能力に基づいて数百万ドルの現金を注入している主要な鉱体に座っています。出版物と地質図/データのデスクトップレビューは、非常にターゲットを絞った非常にコストのかかるドリルプログラムにつながります。アッセイが最初の実行から戻ってくると、これらの値はテーブル結合を介してそれぞれのポイント位置にタグ付けされ、データがDataMineにインポートするために苦労して準備されたExcel形式でポンプアウトされます(3D鉱体補間用)

私の経験では、プロジェクトの地質学者、このデータをExcelで準備し、すべての書式ルール/慣例に従って(スペース、特殊文字などなし)、DataMineインポートファイルが.csv形式で配信されることを要求しました(とにかく当時)。これにより、ターゲットを絞った掘削により多くの投資が行われ、何度も何度もプロセスを再訪することになります。このすべては、通常、非常に厳しく重要なタイムラインで発生しました。

私たちはそれぞれ独自のストーリーと、物事を行う方法へのアプローチに組み込んだ独自の経験を持っています。そうは言っても、私の経験ではExcelは絶対的な必要性であり、ワークフローの重要なツールであると考えています。それは私が知っていることです。このデータの準備では、すべてのQA / QC予防措置を講じました。皆さんがExcelを嫌がる場合、それを使用する以外に選択肢がありませんでした。


(-1)Excelを使用して結合を行うことは、GISまたはRDBMSでそれを達成することよりも難しいだけでなく、重大なエラーを招きます。
whuber

8
Excelはシンプルで動作します。そのため、おそらくこれまでに製造されたどのソフトウェアよりも多くの未検出の大規模なエラーの原因となっています。Excelがコミットしやすくするエラーから保護するために開発されたDBMSの基本原則に違反しています。(2)データ型を変更する誤植。(3)データを抹消する迷走キーストローク。(4)行または列の不注意による削除。(5)テキストから日付へのデータの隠された変換。(6)データの隠された切り捨て。(7)数値の非表示の丸め。などなど。
whuber

2
この答えとその結果の解説は、「悪い」答えがどのように良い結果を引き起こすことができるかを示す素晴らしい例であり、そうでなければ明らかにならない情報を明らかにします。「ヒット」を避けるために削除する必要があると思わないでください。
マットウィルキー

3
...そしてヒットを補うために、素晴らしい質問は、Excelを使用してデータを処理することが非常に深刻な問題につながる理由を尋ねることです。そして、それを安全に使用する方法。
マットウィルキー

1
(+1)思慮深く、よく説明された編集用。@matt stats.stackexchange.com で、Excelで大規模なデータセットを操作する良い方法についての議論をチェックしてくださいおよび Excelなどの統計情報は、ワークベンチ
whuber

1

1990年代後半に、55のNTSマップシートと記憶されていない数千の機能を含む、すべての水域と水路の大規模な更新を受け取りました。古い水文学の付加価値属性(湖の名前、表面標高など)を維持し、ジオメトリを置き換える必要がありました。古いものと新しいもののジオメトリは十分に近く、各ポリゴンの重心が新しいポリゴンの境界によって制限されることを保証できます。これは重要なポイントです。この基本的な確実性がなければ、以下のアプローチはお勧めできません。

この特定の場合の解決策、属性をジオメトリに持ち込む代わりに、ジオメトリを属性に持ち込むことでした。したがって、概念的には:

  1. * Layer_with_attributes *から、ポリゴンを削除しますが、テーブルレコードを保持します。
  2. * Layer_with_polys *からジオメトリをコピーして* Layer_with_attributes *に貼り付けます
  3. マージして保存します。

詳細な説明とレシピについては、こちらをご覧ください。現代のArcgisまたはQgisで、属性レコードを同時に削除せずにジオメトリを削除することさえ可能かどうかはわかりませんが、念のため、ここにアイデアがあります。


1

確かではありませんが、おそらくいくつかのDBMSはSQL(?)のShapeフィールドで等値演算を実行します。2つのジオメトリが同一の場合、SQL =演算子はtrue(WHERE A.Shape = B.Shape)を返すはずです。

これが使用しているデータベースに当てはまる場合、非空間結合の場合と同じ構文を使用して空間結合を実行できるはずです。


これには、ST_Equalsメソッド(OGC標準)を使用できます。


0

いつものように、whuberは正しい。あなたのプロセスについて徹底的に考える必要があります。特に、これらが大きなデータセットであり、この操作が何度も行われる場合、またはデータがミッションクリティカルである場合。

データと責任を考慮してください。

あなたは何をした?

何してるの?

何をするつもりですか?

そして常に尋ねる:なぜ?


ここで、質問に直接照準を合わせた簡単な回答が1つあります。物事を行うには常に少なくとも5つの方法がありますが、通常は1つの最良の方法しかありません。

フルセットには、サブセットに入れたいすべての属性があり、サブセットには、古い情報を除いて、まだフルセットにないものはないと仮定します。

サブセットトポロジがフルセット(Origin / ProjectionおよびXY Toleranceを含む)と一致すると推測します。

1)[内部]チェックボックスをオンにしてポイントするフィーチャを使用し、サブセットからポイントフィーチャクラスまたはシェープファイルを作成します。

2)空間結合による選択を使用して、新しく作成されたポイントフィーチャクラスまたはシェープファイルに基づいたサブセットに対応するフルセット内のすべてのポリゴンを検​​索します。

3)フルセットから選択範囲をエクスポートします。これが新しいサブセットになる可能性があります。


0

確かに、ポリゴンAがポリゴンBのサブセットである場合、最も簡単な方法は、ポリゴンAをループし、ポリゴンA(およびAがサブセットまたはBの場合はB)にあるIDを使用して、行データを検索することですポリゴンBを選択し、ポリゴンAの行を更新します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.