単一の点から複数のポリゴンまでのすべての距離を計算する[終了]


9

2つのレイヤーがあります。プロパティを定義するポイントレイヤー(95オブジェクト)と、プロパティに関連付けられた土地の区画を定義するポリゴンレイヤー(211オブジェクト)です。各ポイントは1つ以上のポリゴンに関連しています。私が作成したいのは、各ポイントからそのポイントに関連付けられているすべてのポリゴンまでの距離の表です(最も近いエッジまたはポリゴンの重心-どちらでもかまいません)。最近接距離の計算はQGISとArcGISでは比較的簡単ですが、これらの計算では、少なくとも私が採用してきた方法では、すべての遠方のポリゴンが省略されます。理想的には私はの出力が欲しい

Point_ID | distance to polygon 1 | distance to polygon 2 | distance to polygon 3 | etc.

ArcGIS 10またはQGIS 2.2以降のポインタが最も役立ちます。


これは、ArcGISのニアレストアナリシスで実行できますが、ポイントごとに行うには少し自動化が必要です。あなたはPythonスクリプトに精通していますか?
Emil Brundage 2014

エミール-いいえ、私はPythonに精通していませんが、おそらく学ぶべきです。
NickN 2014

回答:


1

QGIS の距離行列を使用してこれを実現できます。あなたは最初にあなたのポリゴンに変換する必要があるだろう重心点のいずれかの方法でベクトル > ジオメトリツール > ポリゴンの重心やポリゴン重心のSAGAバージョンを経由して。この理由は、距離行列関数は2ポイントレイヤー間でのみ分析できるためです。また、出力は次のようになります。

Point_1 | PolygonCentroid_1 | Distance
Point_1 | PolygonCentroid_2 | Distance
Point_1 | PolygonCentroid_3 | Distance
Point_2 | PolygonCentroid_1 | Distance
Point_2 | PolygonCentroid_2 | Distance

出力は.csvファイルになるため、Microsoft Excelなどの別のソフトウェアを使用して手動でレイアウトを編集できます。


ジョセフに感謝-私のようなGISの初心者にとって、これは私が望んでいた答えを得るための最も簡単な方法です。
NickN 2015年

大歓迎です!この手順(および結果)は基本的なものですが、GISソフトウェアに慣れると、他の回答で説明されているより高度な手順を試すことができます。
ジョセフ

1
@nickNこの方法のごく一部ですが、重心はその形状によっては必ずしもポリゴン内にあるとは限りません。それはだ可能あなたには、いくつかの間違った距離/ランキングを得ることができるが、それは、それが問題になるかどうかについてのデータや要件によって異なります。それ以外の場合、これは基本的にArcGISのGNTのQGISバージョンですが、後者はポイント以上のものを処理でき、QGISが結果の名前/ IDをどのように処理するのかわかりません。
Chris W

5

これは、QGIS(どのバージョンでも可能だと思います)とDBマネージャーでの非常に単純なSQLステートメントを使用して達成するのはかなり簡単です。しかし、そのためには、ある種の空間データベース(Postgisまたはspatialite)に存在する必要があります。ほとんどの人にとってアクセスしやすいので、spatialiteの使用を想定しますが、SQLステートメントはPostgisでも同じです。

  1. 新しいSpatialiteデータベースを作成します。
  2. ポイントレイヤーとポリゴンレイヤーを新しいデータベースにインポートします。
  3. DBマネージャープラグインを開き、データベースを選択して、次のSQLステートメントのいずれかを実行します。

すべてのポイントからすべてのポリゴン境界までの距離

SELECT 
  f.point_id,
  g.polygon_id,
  st_distance(g.geom, f.geom) AS distance
FROM
  points_table AS f, 
  polygons_table AS g

すべてのポイントから関連するポリゴンの境界までの距離(共通のフィールドが存在すると想定)

SELECT 
  f.point_id,
  g.polygon_id,
  st_distance(g.geom, f.geom) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

すべてのポイントから関連するポリゴンの重心までの距離

SELECT 
  f.point_id,
  g.polygon_id,
  st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

レイヤーの任意のフィールドを結果に追加できることに注意してください。

SELECT 
  f.point_id,
  f.point_number,
  g.polygon_id,
  g.parcel_name,
  st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

またはすべてのフィールド:

SELECT 
  f.*,
  g.*,
  st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
  points_table AS f JOIN 
  polygons_table AS g ON (g.common_field = f.common_field)

Spatialiteデータベースを作成してレイヤーをインポートする方法についてさらに入力が必要な場合は、私に知らせてください。回答を編集します。
Alexandre Neto 2014

こんにちはアレクサンドル、なぜ単純なWHEREではなく参加するのですか?
Luigi Pirelli

まあ、それは私がポール・ラムジーのプレゼンテーションの1つからとらえたものです。彼がJoinの明示的な使用を提唱した理由を思い出せませんが、彼がそれを言うと...:-PIは、両方のクエリに対してEXPLAINを実行して、違いがあるかどうかを確認します。
Alexandre Neto 2014

私はSpatialLiteを初めて使用します-この回答は、私が取り組んでいる問題に対処しているようです。テーブルが空白です。おそらく私はこれを理解していません。「Pothole VRI」と呼ばれるポリゴンレイヤーと「Grid Pothole Center」と呼ばれる別のポイントレイヤーがあります。上記の手順を使用して次のコードを追加します。SELECT f.id、g.id、st_distance(f.geom、st_centroid(g.geom))AS distance FROM 'Grid Pothole Center' AS f、 'Pothole VRI' AS g __これらの見出しを持つ空のテーブルxを取得します。id、id:1、distanceここで何が間違っていますか?QGIS 3.6の使用
Mark Thompson、

4

ArcGISの[ ニアテーブル生成Generate Near Table)]ツールは必要なことを実行しますが、高度なライセンスが必要であり、互いに関連付けられているものだけでなく、すべてのポイント/ポリゴンに対して実行されます。これは、95個のオブジェクトのそれぞれについて、211個のプロパティすべてのランク付けされた距離を取得することを意味します。したがって、表では20,045行になります。結果のテーブルをフィルター処理するか、Emilがタスクに自動化して関連付けに基づいて選択を作成し、それらのグループでのみ実行するように提案する必要があります。

フィルタリングに関しては、はい、必要なのは(定義クエリまたは選択が後に続く)結合だけです。ツールの結果は、IN_FIDおよびNEAR_FIDを提供します。ツールの実行方法(ポイント付近のプロパティ、またはポイント付近のプロパティ)に応じて、どのFIDがどれであるかを決定します。次に、適切なFIDに基づいて、ポイントテーブルとプロパティテーブル(両方)をツールの結果に結合します。

次のステップは、1つのレコードの2つのフィールドが必要な結合テーブルのすべてのレコードを選択(または定義クエリ)するため、211のプロパティレコードのそれぞれに、それらが属する95ポイントのいずれかを示す属性があることを前提としています。一致-ポイント名フィールド=プロパティに関連付けられたポイント名フィールド。それらが一致しないケースは、そのポイントに関連付けられていないポリゴンであるため、そのポイントからの距離を気にする必要はありません。

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