SDO_GEOMETRY
Oracle Spatial 을 사용하여 공간 데이터를 생성하고 관리합니다. Oracle 에는 SDO_GEOMETRY
타입을 통하여 공간 데이터를 구성할 수 있습니다.
SDO_GEOMETRY
은 다음과 같이 정의됩니다.
CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY
);
SDO_GTYPE
- 00 - UNKNOWN_GEOMETRY
- 01 - POINT
- 02 - LINE or CURVE
- 03 - POLYGON or SURFACE
- 04 - COLLECTION
- 05 - MULTIPOINT
- 06 - MULTILINE or MULTICURVE
- 07 - MULTIPOLYGON or MULTISURFACE
- 08 - SOLID
- 09 - MULTISOLID
예) 2003 일 경우 2차원의 POLYGON 형식
SDO_SRID
Geometry와 연관된 Coordinate System(Spatial Reference System)입니다. 값이 NULL 이면 관련된 Coordinate System 이 없는 것입니다.
SDO_POINT
POINT 형식일 때 사용합니다. SDO_POINT_TYPE(x, y, z)
을 통해 포인트를 입력합니다.
SDO_ELEM_INFO
SDO_ORDINATES
에 저장될 값의 형식을 정의합니다.
예) SDO_ELEM_INFO_ARRAY(1,1003,3)
- 첫 번째 1 은
SDO_ORDINATES
에 입력된 도형 ARRAY의 시작 위치 - 1003과 3은 도형 형식을 정의
- 1003 은 외부도형, 2003 일 경우 내부도형
- (1,1003,1) or (1,2003,1) : 폴리곤 형식으로 4면 다각형의 경우 5개의 점을 지정하고 점 5와 점 1은 동일
- (1,1003,3) or (1,2003,3) : 직사각형 유형. 왼쪽 하단과 오른쪽 상단의 두 점을 지정
- (1,1003,4) or (1,2003,4) : 원형 유형. 최소 3개의 점을 지정해야 함
- 자세한 내용은 참고 사이트에서 확인
SDO_ORDINATES
SDO_ELEM_INFO
에서 정의된 형식으로 값을 입력합니다.
Spatial Table 생성
테이블 생성
shape 필드에 SDO_GEOMETRY
타입을 지정하여 Spatial 테이블을 생성하였습니다.
CREATE TABLE sample_table
(
id NUMBER PRIMARY KEY,
name VARCHAR2(20),
shape SDO_GEOMETRY
);
메타데이터 생성
SDO_GEOMETRY
를 사용하기 전에 꼭 메타데이터를 생성해줘야 합니다.
insert into user_sdo_geom_metadata
(
table_name,
column_name,
diminfo,
srid
)
values
(
'sample_table',
'shape',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 0.5), => 10 미터 허용오차
SDO_DIM_ELEMENT('Latitude', -90, 90, 0.5)
),
4326 ====> Longitude/Latitude(WGS 84) : 4326
);
인덱스 생성
메타데이터 생성 후 Spatial 테이블의 인덱스를 생성합니다.
# 인덱스 생성 형식
CREATE INDEX index_name ON table_name(column_name) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
# 사용 예제
CREATE INDEX sample_index ON sample_table(shape) indextype IS MDSYS.SPATIAL_INDEX;
데이터 입력
테이블을 생성하고 메타데이터와 인덱스까지 생성하였으면 데이터를 넣어봅니다.
# Rectangle 데이터
INSERT INTO sample_table (id, name, shape)
VALUES ( 1, 'Rectangle',
SDO_GEOMETRY(2003, 4326, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(5,5, 10,10)) );
확인
입력된 데이터가 SDO_GEOMETRY
형식인지 확인합니다. 결과가 TRUE 가 아니면 잘못된 입력입니다.
SELECT id, name, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(shape, 0.5) FROM sample_table;
# 결과
1, Rectangle, TRUE
SDO_GEOMETRY
타입을 사용하여 공간 데이터 생성을 진행하였습니다. 다음에는 생성된 공간 데이터에 대한 쿼리를 알아보겠습니다.
참고
'Database > Oracle' 카테고리의 다른 글
[Oracle] 사용자 및 테이블 조회 (0) | 2022.11.17 |
---|---|
[Oracle] 계정 관리 (0) | 2022.11.17 |
[Oracle] 테이블 스페이스 사용 방법 (0) | 2022.11.17 |
[Oracle] Spatial Data Query (0) | 2022.09.22 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!