2009-08-17 13 views
5

私は空間的に使用可能なデータベース(この場合DB2)を持っています。私はテーブルの中に多数の正方形を保存する必要があります。どの標準の空間SQLデータ型が最適ですか?Spatial SQL:正方形の最も適切なデータ型ですか?

(私は誰か場合はエラーとしてそれをキャッチしたい私はたST_Polygonを使用することができると思います、多分

  • 良いパフォーマンス
  • 優れたデータの保証を与えるより専門的なタイプがあります特定の列で非正方形値を格納する場所)

私はST_rectangleST_squarを見つけることを試みてきましたeタイプですが、存在しないようです(?)

私はDB2に取り組んでいますが、標準に準拠していればDB2上で動作しないソリューションにも興味があります。

答えて

1

DB2では、これも多角形です。あなたがグリッドを格納しているように見えますので、迅速なチェックがST_ENVELOPE(幾何学)==ジオメトリは、あなたが正方形に

を持っている場合、このコードは

DB2's documentation

SET CURRENT PATH = CURRENT PATH, db2gse; 
CREATE TABLE sample_geoms (id INTEGER, geometry ST_Geometry); 

INSERT INTO sample_geoms VALUES 
(1, ST_Geometry(ST_Point('point EMPTY',0))); 

INSERT INTO sample_geoms VALUES 
(2, ST_Geometry(ST_Point('point zm (10 10 16 30)' ,0))); 

INSERT INTO sample_geoms VALUES 
(3, ST_Geometry(ST_Multipoint('multipoint m (10 10 5, 50 10 6, 
     10 30 8)' ,0))); 

INSERT INTO sample_geoms VALUES 
(4, ST_Geometry(ST_Linestring('linestring (10 10, 20 10)',0))); 

INSERT INTO sample_geoms VALUES 
(5, ST_Geometry(ST_Polygon('polygon((40 120, 90 120, 90 150, 
     40 150, 40 120))',0))); 


SELECT id, CAST(ST_AsText(ST_Envelope(geometry)) as VARCHAR(160)) Envelope 
FROM sample_geoms; 

結果からのものであることが考えられます。

ID   ENVELOPE 
----------- --------------------------------------------------------------- 
     1  - 

     2  POLYGON ((9 9, 11 9, 11 11, 9 11, 9 9)) 

     3  POLYGON ((10 10, 50 10, 50 30, 10 30, 10 10)) 

     4  POLYGON ((10 9, 20 9, 20 11, 10 11, 10 9)) 

     5  POLYGON ((40 120, 90 120, 90 150, 40 150, 40 120)) 

ID = 5を参照してください。最後POLYGON == ST_ENVELOPE(幾何学)

1

ST_Envelope - DB2についてはわかりませんが、OGC標準の一部です。非垂直または非水平の線またはポリゴンは、この関数を使用して矩形を生成し、通常は浮動小数点として座標を格納します。

+1

を追加することができます。しかしST_envolopeは、私の知る限り、機能、ないタイプでしょうか? –

+0

申し訳ありませんが、ちょうど今、たくさんの複雑なナンセンスを削除しました。ポイントは、Postgisにfloat4のシーケンスとして格納されていますが、DB2についてはわかりませんが、ほぼ同じでなければなりません。あるいは、db2/Oracleの 'number'タイプのいずれかでなければなりません。私は、すべての四角形が、一般的な空間クエリに対してスマートインデックスを使用してジオ機能を有効にして、基本フロート型として保存された座標であると推測しています。 – unmounted

+1

トロエルが正しいです。 ST_ENVELOPEはST_POLYGONを戻す関数です。 ST_ENVELOPEはタイプではありません。 「float」最適化はPostGISに固有のものです。 –

4

あなたのデータは、長方形や正方形を表している場合でも、あなたはまだたST_Polygonタイプを使用する必要があります。ただし、データに対してクエリを実行する場合は、ST_EnvIntersectsなどの1次フィルタを使用できます。

通常、空間データベースは、交差点用封筒(ポリゴンが含まれている、すなわち矩形)を比較します。次に、より高価なポリゴン - ポリゴン交点計算を実行します。この場合、ポリゴンがエンベロープと等しいので、2番目に高価なステップをスキップできます。

限り、データの検証として、データベース・ST_Equalsではをチェックするトリガー(ST_ENVELOPE(GEOM)、GEOM)= 1

関連する問題