PostGISを使用して、ポリゴンの最近傍を計算しています。計算したいのは、各ポリゴンから最も近いポリゴンまでの最小距離です。
これまでのところ、マイク・トゥウズの答え(小さな変更を引用)から大きな助けを得ました。
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.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
次に、最小値を計算しました:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
ただし、私の挑戦は、多数のポリゴン(1,000,000)についてこれを計算することです。上記の計算では、各ポリゴンを他のすべてのポリゴンと比較しているので、10 ^ 12の計算を実行する必要がないように計算を改善する方法を考えました。
私が考えていたのは、各ポリゴンをバッファリングしてから、そのポリゴンのバッファ内のすべての値の最近傍を計算し、最小値を記録することでした。それが最善のアプローチであるか、PostGISに使用すべき関数があるかどうかはわかりません。
編集:ニックラスの提案のいずれかを使用して、私は実験していST_Dwithin()
ます:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
これは、各ポリゴンのIDと、特定の距離内にあるかどうかのテーブルを返します。IF/ELSE
SQLを使用して型ステートメントを構築することは可能ですか?(CASE
条件の使用について読んだ)または、作成したテーブルを元のテーブルに結合してから、ST_Distanceを使用してクエリを再度実行する必要がありますか?