2013-05-07 12 views
6

私は約40,000のポリゴンをテーブルにジオメトリとして保存しています。次に、そのジオメトリ列に空間インデックスを作成します。空間インデックスを作成している間、それは私にバウンディングボックス値を求めています。私の境界を見つける方法を教えてください。私の境界ボックスを得るために、私はxmin、ymin、xmax、ymaxを見つける必要があります。ポリゴンのバウンディングボックス

おかげ

+1

反復、遠い左の追跡、遠い右、アップ遠いとあなたがそうであるようにXSおよびYSをダウン遠いです。 (または、それが遅すぎる場合、最初の作成時に行う) – Patashu

答えて

7

EDIT:あなたはもちろんのUnionAggregateとSTEnvelopeの代わりにEnvelopeAggregateを使用することができます...


あなたはすべてのポリゴンにUnionAggregateを行うことができ、それらの周りSTEnvelopeを入れて、 XMin、YMin、XMax、YMaxの値を視覚的に選択します。もちろん、バウンディングボックスのSTAsTextのTSQL操作を行うこともできますが、私はこれを手作業として残します。

これは、既存のポリゴンを覆うボックスを提供しますが、必要なパディングや将来のデータに必要な境界を考慮する必要があります。

サンプル:すべての頂点を超える

use tempdb; 
create table GeometryTest(id int identity primary key, geom Geometry); 
insert GeometryTest values ('POLYGON((-130 54, -130 23, -60 23, -60 54, -130 54))'); 
insert GeometryTest values ('POLYGON((1 0, 0 0, 0 1, 1 1, 3 5, 1 0))'); 
insert GeometryTest values ('POLYGON((0 0, -100 5, 0 60, 70 70, 3 5, 0 0))'); 

select geometry::UnionAggregate (geom).STEnvelope().STAsText() 
from GeometryTest; 

--------------------------------------------------------------- 
POLYGON ((-130 0, 70 0, 70 70, -130 70, -130 0)) 
--------------------------------------------------------------- 

create spatial index six_GeometryTest_geom on GeometryTest(geom) 
    WITH (BOUNDING_BOX = (-130, 0, 70, 70)); 
+0

天才!ありがとうございました。私はウェリントンから来た –

+0

SQLサーバー2008でこれを行う方法はありますか? UnionAggregateとEnvelopeAggregateはまだ存在しません。 – Philipp

+0

@Philippこれは***です*** *** SQLサーバー2008.多分あなたは別の互換モードで2005または2008を意味する? – RichardTheKiwi

関連する問題