6

空間的に有効なデータベース(この場合はDB2)があります。テーブルにたくさんの正方形を格納する必要があります。どの標準空間SQLデータ型が最も適していますか?

ST_polygonを使用できると思いますが、もっと特殊なタイプがあるかもしれません。

  • よりよい性能
  • より良いデータ保証(特定の列に非正方形の値を格納する場所がある場合は、エラーとしてキャッチしたい)

ST_rectangleまたはST_squareタイプを見つけようとしましたが、存在しないようです(?)

私はDB2を使用していますが、標準に準拠している限り、DB2では機能しないソリューションにも興味があります。

4

3 に答える 3

4

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

通常、空間データベースはエンベロープ (つまり、ポリゴンを含む四角形) を比較して交差点を探します。次に、よりコストのかかるポリゴン間の交差計算を実行します。この場合、ポリゴンはエンベロープと等しいため、コストのかかる 2 番目のステップをスキップできます。

データ検証に関しては、ST_EQUALS(ST_ENVELOPE(geom),geom) = 1 をチェックするデータベース トリガーを追加できます。

于 2009-08-28T15:56:31.860 に答える
2

ST_Envelopeを探しているかもしれません -- DB2 についてはよくわかりませんが、これは OGC 標準の一部です。非垂直線または非水平線、または多角形は、この関数を介して長方形を生成し、通常は座標を float として格納します。

于 2009-08-17T21:49:22.470 に答える
2

DB2 では Polygon でもあります。グリッドを保存しているように見えるので、 ST_ENVELOPE(geometry) == geometry の場合、正方形があることを簡単に確認できます

このコードは

DB2 のドキュメント

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(ジオメトリ)

于 2009-08-18T20:11:51.867 に答える