空間SQL:正方形に最適なデータ型は?
-
18-09-2019 - |
質問
空間対応データベース (この場合は DB2) があります。テーブルに多数の正方形を保存する必要があります。どの標準空間 SQL データ型が最も適していますか?
を使用できると思います ST_ポリゴン, 、しかしおそらく、より特殊なタイプがあるかもしれません。
- よりよい性能
- より良いデータ保証(特定の列に非正方形の値を格納する場所がある場合、それをエラーとしてキャッチしたい)
を見つけようとしました ST_長方形 または ST_スクエア タイプですが、存在しないようです(?)
私は DB2 を使用していますが、標準に準拠している限り、DB2 では動作しないソリューションにも興味があります。
解決
DB2では、それはまた、多角形です。あなたがグリッドを格納しているように見えますので、迅速なチェックが可能であることST_ENVELOPE(幾何学)==ジオメトリが、あなたは、正方形を持っている場合は、
このコードからである
<のhref = "http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.spatial/rsbp4040.htm" のrel =」 noreferrer nofollowを "> 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(幾何学)
他のヒント
あなたのデータは、長方形や正方形を表している場合でも、あなたはまだたST_Polygonタイプを使用する必要があります。あなたがデータに対してクエリを実行するときしかし、あなたは、このような<のhref = "http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=として、第1次フィルタを使用することができます/com.ibm.db2.udb.spatial.doc/rsbp4142.html」のrel = "nofollowをnoreferrer"> ST_EnvIntersects を。
通常、空間データベースは、交差点用封筒(ポリゴンが含まれている、すなわち矩形)を比較します。そして、それはより高価なポリゴン・ツー・ポリゴン交点計算を行います。あなたのポリゴンが封筒に等しいので、この場合は、あなたは、第二のより高価なステップをスキップすることができます。
限りデータ検証としては、ST_Equalsではをチェックデータベース・トリガーを追加することができ(ST_ENVELOPE(GEOM)、GEOM)= 1
あなたは ST_Envelope のを探している可能性がありDB2についてのそれはOGC標準の一部です。任意の非垂直または非水平線、または多角形、フロートとして典型的座標を記憶し、この機能を介して矩形を生成します。