PostGISでの最近傍計算?


8

PostGISと空間データベースを分析に使用する方法を学んでいます。私がやろうとしていることは、頂点ではなくエッジ計算を使用して、ファイル内の最も近いポリゴンの距離を取得する計算を実行することです。

使用して、このポール・ラムジーからの答えをArcGIS Desktopのを使用してポリゴンのエッジまでの距離を最小エッジを見つけますか?これは同様の質問です:

CREATE TABLE mytable_distances AS SELECT a.id、b.id、ST_Distance(a.geom :: geography、b.geom :: geography)from FROM FROM mytable a、mytable b;

それを自分の空間データベースに適用しようとしています。私はこのクエリの構造を理解していません。CREATE TABLE mytable_distances AS結果を格納するためのテーブルを作成すると思いますが、この部分の後で失われます。あるabカラム名?もしそうなら、なぜこれを計算するために2つの列を指定するのですか?

テーブルが呼び出されTestArea、いくつかの基本的なクエリを正常に実験しました。

SELECT 
  "TestArea".hgt
FROM 
  public."TestArea"
WHERE
  "TestArea".area > 100

PGAdmin IIIのデータベースの構造は次のとおりで、テーブルはと呼ばれTestAreaます。私の列ヘッダーを使用すると、最近傍の計算がどのようになるかわかりません(これらのオブジェクトはすべてポリゴンです)。

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

回答:


10

aおよびbは、同じテーブルのエイリアステーブル名です。これは事実上T1 CROSS JOIN T2DBで言えば言えます。これにより、自己結合で単一のテーブル内で「ある部品が別の部品にどれだけ近いか」を示すことができます。

SELECT 
  a.hgt AS a_hgt,
  b.hgt AS b_hgt,
  ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM 
  public."TestArea" AS a, public."TestArea" AS b
WHERE
  a.gid < b.gid AND a.area > 100 AND b.area > 100

WHERE行数を制限する別の句を追加するAND ST_Distance(a.the_geom, b.the_geom) < 1000.0こともできます。たとえば、すべての距離が1キロメートル未満になるように追加します(UTMを投影した場合)。


答えてくれてありがとうマイク。私はそれを使って、今何が起こっているのか理解しました。多分私はこれを新しい質問として尋ねるべきですが、計算を最適化する方法はありますか?たとえば、100個のポリゴンがあり、10,000回の計算であるとします。私はたまたま1,000,000のポリゴンを持っていて、計算をどのように縮小するのか疑問に思っています。
djq 2011

1
それST_Distanceが、WHERE節の最後のフィルターを導入した理由であり、「特定の距離を超えた他のものとの間の距離を求めたくない」と言っています。別のエリアに最も近いエリアを見つけることを期待していましたか?これは確かに少し異なるクエリになります。
マイクT

これは特定のレベルを超える値を記録するだけではなく、それでもそれらを計算すると考えていました。したがって、私のその後の質問.... gis.stackexchange.com/q/11979/803
djq
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.