공간 SQL : 사각형에 가장 적합한 데이터 유형?
-
18-09-2019 - |
문제
공간적으로 활성화 된 데이터베이스 (DB2,이 경우)가 있습니다. 많은 수의 사각형을 테이블에 보관해야합니다. 어떤 표준 공간 SQL 데이터 유형이 가장 적합합니까?
나는 내가 사용할 수있을 것 같다 st_polygon, 그러나 아마도 더 전문화 된 유형이있을 수 있습니다.
- 더 나은 성능
- 더 나은 데이터 보증 (특정 열에 비 평격 값을 저장할 사람이 있으면 오류로 포착하고 싶습니다).
나는 찾으려고 노력했다 st_rectangle 또는 st_square 유형이지만 존재하지 않는 것 같습니다 (?)
DB2와 함께 일하는 동안 표준을 준수하는 한 DB2에서 작동하지 않는 솔루션에도 관심이 있습니다.
해결책
DB2에서는 다각형이기도합니다. 그리드를 저장하는 것처럼 보이므로 ST_ENVELOPE (Geometry) == Geometry라면 사각형이있는 경우 빠른 점검이있을 수 있습니다.
이 코드는 왔습니다
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? 마지막 다각형 == ST_ENVELOPE (Geometry)
다른 팁
데이터가 사각형 또는 정사각형을 나타내더라도 ST_POLYGON 유형을 사용해야합니다. 그러나 데이터에 대한 쿼리를 수행하면 다음과 같은 1 차 필터를 사용할 수 있습니다. st_envintersect.
일반적으로 공간 데이터베이스는 교차로의 봉투 (즉 다각형이 포함 된 사각형)를 비교합니다. 그런 다음 더 비싼 다각형 간 교차 계산을 수행합니다. 이 경우, 다각형은 봉투와 같기 때문에 두 번째 더 비싼 단계를 건너 뛸 수 있습니다.
데이터 유효성 검사에 관한 한, st_equals (st_envelope (geom), geom) = 1을 확인하는 데이터베이스 트리거를 추가 할 수 있습니다.
당신은 찾고있을 수 있습니다 st_envelope -DB2에 대해 잘 모르지만 OGC 표준의 일부입니다. 비 지구 또는 비 유산 라인 또는 다각형은이 함수를 통해 사각형을 생성하여 좌표를 일반적으로 플로트로 저장합니다.