PostGISデータベースがあり、ある領域(境界ボックス)内にあるポイントを見つけたいのですが。私は2セットの座標を持っています。そこから、ボックスを形成する4つのすべての長方形の点を取得できます(必要な場合)。問題の私のデータ列は「ポイント」という名前で、タイプもポイントです。
- とにかく4つの座標セット(緯度/経度)を指定して、ボックス内にあるすべてのポイントを取得することはできますか?
- または、2つのポイントを指定し、DBに長方形のコーナーを計算させ、そのポイントを返す
念のため、自分が何を達成したいのかはっきりしていません。ポイントの代わりに緯度と経度のフィールドがあった場合の 'vanilla' sqlと同等のものは次のようになります。
SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax
更新された編集:
アンダーダークの解決策を試しています。最初は、ST_MakePointコンストラクターがありません(今はあります)ので、非常によく似たエラーが発生します(別の文字についてのみ)。
SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))
そして私はこのエラーを得ています:
ERROR: function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39
編集:
短期的には、次の方法で解決できます。
SELECT * FROM triples WHERE box '((point1),(point2))' @> point
しかし、なぜ私はPostGIS関数のどれもが私のために機能していない理由を解明しなければなりません。
推奨される方法は、1か所のみに投稿することです。その場所が不適切またはうまくいかない場合は、簡単に移行できます。質問があるべき場所にGISがあるので、私は何もしません。しかし、SOのクロスポストを削除することをお勧めします。
—
whuber
@whuber ..完了。
—
アンクル
-GeometryFromText( 'POLYGON((75 20,80 30,90 22,85 10,75 20))'、4326)-selectは機能しますか?
—
ショーン
どういう意味かわかりません。私はあなたが言ったことのさまざまな異なるバリエーションを試してみましたが、それらはうまくいきませんでした
—
Ankur
「ポイント」欄には、何ST_MakePoint(ポイント)で、あなたの参照
—
アンダーダーク