1

ポイントのあるジオメトリテーブルがあります。すべてのポイントには一意のIDがあります。ここで、1つのポイント(ID 34567)を選択し、このポイントの周囲5kmのバッファーゾーン分析を行うクエリを作成します。私の目標は、選択したポイントから5km以上離れたすべてのポイントを選択することです。すべてのデータは1つのテーブルに保存されます。

私は次のことを試しました、

SELECT D.id, D.geometry, S.id, S.geometry
FROM points AS D, points AS S
WHERE not ST_DWithin(D.geometry, S.geometry, 5000) AND D.id not like '34567'

しかし、クエリは永遠に実行されます。

私は何が間違っているのですか?

すべての回答に感謝

4

2 に答える 2

0

ジョン・バルサに感謝します。私は初心者ですが、PostGIS マニュアルのすべての例にはテキストとしてgeom機能が含まれていますが、これは通常の生活ではあまり実用的ではありません。問題は、結果が参照として使用されるポイント (34567) も返すことです。したがって、距離を 0 に設定すると、元のポイント、つまり count=1 が返されます。最も簡単な解決策は、次のことを行うことだと思いますEXCEPT

SELECT S.id, S.geometry FROM points AS S WHERE not ST_Dwithin(S.geometry, 
(select geometry from points where id=34567), 5000)
EXCEPT
SELECT S.id from POINTS where id=34567

しかし、その場合はid2 回入力する必要があり、これもあまり効率的ではありません。

于 2015-02-13T17:32:29.207 に答える