PostGISでバウンディングボックスで選択する


12

PostGISデータベースに大きなデータセットがあります。GeoJSONとしてデータを読み込むWebインターフェイスを介して表示しています。一度にクライアントに提供するデータが多すぎるため(数十MBの価値があります...) )。ポイントfとgの座標を取得するのは簡単です。

質問1:これは物事を行う良い方法ですか?それらをタイルとしてキャッシュすることを考えるべきですか、それともこの方法は十分に効率的でしょうか?

質問2:この境界ボックス内のデータのみを取得するにはどうすればよいですか?

質問3:シェイプがバウンディングボックスのエッジに重なっている場合(たとえば、下のシェイプA)、2番目の画像のようにクエリされたときにトリミングする簡単な方法はありますか?

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


クライアントでどのビューアを実行していますか?
暗闇

Mapstraction。現在、プロバイダーとしてOpenLayersを使用しています。
Mr_Chimp

回答:


8

質問の順序を変更するだけで、手順ができます。

2)bbox(ST_Intersects)と交差するもののみを選択します。
3)bboxと交差させて、ポリゴンをクリップします(ST_Intersection)。
1)結果(CREATE TABLE newtable AS SELECT...)で新しいテーブルを作成します。

ST_Intersection docsにはコードサンプルが含まれています。これを調整し、ST_PolygonFromTextをbboxとして使用する必要があります。


4

ほとんどの(すべての)Webクライアント(およびデスクトップgis)もこれを行っていると思います。データセット全体を送信することはできません。

何らかのキャッシュを設定する必要があるかどうかは、データが静的に変化するか、変化するかによって異なります。

このバウンディングボックスをチェックしてデータを取得するのは非常に高速です(空間インデックスがある場合)が、もちろん無料ではありません。cpu-powerで支払います。

前に述べたように:エクステント内のポリゴンを見つけるには、ST_Intersectsを使用します。

エクステント内の部分のみを取得するには、ST_Intersectionを使用しますが、実行しないでください。ST_Intersectionはコストのかかるプロセスです。非常に大きなポリゴンがない限り、ポリゴン全体を送信する方が良いと思います。

しかし、テーブルに置くのではなく、その場でこれを行いたいと思います

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