반응형
1. 오라클 SDO_GEOMETRY 정의
SDO_GEOMETRY는 Oracle Spatial 및 Graph에서 제공하는 데이터 타입입니다. 공간 데이터를 저장하고 관리하며 GIS 나 위치 기반 서비스를 개발할 때 공간 좌표를 관리하는데 주로 사용됩니다. 이 데이터 타입은 점(point), 선(Line), 폴리곤(Polygon) 등 다양한 공간 데이터를 표현할 수 있도록 설계되었습니다.
2. SDO_GEOMETRY 구조
- SDO_GTYPE
- 공간 데이터 유형
- 예) 점 (2001), 선 (2002), 폴리곤 (2003) 등
- SDO_SRID
- 좌표 참조 시스템의 ID를 저장하여 공간 데이터가 어떤 기준 좌표계에 기반하고 있는지 알 수 있습니다.
- SDO_POINT
- 점 데이터를 저장합니다.
- X,Y, Z 좌표로 구성됩니다.
- SDO_ELEM_INFO
- 공간 데이터의 구조적 정보를 정의합니다.
- SDO_ORDINATES
- 실제 공간 좌표 데이터를 배열 형태로 저장합니다.
MDSYS.SDO_GEOMETRY(
SDO_GTYPE, -- 지오메트리 타입 (점, 선, 폴리곤 등)
SDO_SRID, -- 공간 참조 ID (SRID)
SDO_POINT, -- 점 형상 정보 (점인 경우에만 사용)
SDO_ELEM_INFO, -- 요소 정보 (다각형 등 복합적인 형상 정보)
SDO_ORDINATES -- 좌표 리스트 (x, y, z 값들을 포함)
)
3. SDO_GEOMETRY 기본 활용 방법
- 오라클 테이블에 SDO_GEOMETRY 타입 컬럼 생성
CREATE TABLE TABLE_NAME (
ID VARCHAR2(255 BYTE) NOT NULL,
COORD MDSYS.SDO_GEOMETRY,
CONSTRAINT TABLE_NAME _PK PRIMARY KEY (ID)
);
- 이미 생성된 테이블에 SDO_GEOMETRY 타입 컬럼 생성
ALTER TABLE TABLE_NAME
ADD COORD MDSYS.SDO_GEOMETRY;
- SDO_GEOMETRY 데이터 삽입
INSERT INTO TABLE_NAME (ID, COORD)
VALUES (
1,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(10.0, 20.0, NULL), NULL, NULL)
);
- SDO_GEOMETRY 컬럼 삭제
ALTER TABLE TABLE_NAME
DROP COLUMN COORD;
- 공간 인덱스 생성 (선택사항) : 공간 데이터를 효율적으로 검색하고 쿼리하기 위해 사용됩니다.
CREATE INDEX COORD_IDX ON TABLE_NAME (COORD)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
4. SDO_GEOMETRY 고급 활용
- 거리 계산
- SDO_GEOM.SDO_DISTANCE : 이 함수는 두 공간 객체 (점, 선, 폴리곤 등) 간의 최단 거리를 계산합니다.
- 결과값은 좌표계 단위로 반환됩니다.
[함수 구조]
SDO_GEOM.SDO_DISTANCE(
geometry1 IN SDO_GEOMETRY,
geometry2 IN SDO_GEOMETRY,
tolerance IN NUMBER -- 계산 오차 허용 범위.
) RETURN NUMBER;
[점과 점 사이의 거리 계산]
SELECT SDO_GEOM.SDO_DISTANCE(
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(10.0, 20.0, NULL), NULL, NULL),
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(30.0, 40.0, NULL), NULL, NULL),
0.005
) AS 거리
FROM DUAL;
- 영역 내 데이터 검색
- SDO_RELATE : 특정 공간 객체가 주어진 영역(폴리곤, 원 등)에 포함되거나 겹치는지 확인하는데 사용됩니다.
[함수 구조]
SDO_RELATE(
geometry1 IN SDO_GEOMETRY, -- 비교할 SDO_GEOMETRY 객체
geometry2 IN SDO_GEOMETRY,
params IN VARCHAR2 -- 관계를 정의하는 매개변수
) RETURN VARCHAR2;
* params : MASK= 옵션으로 관계를 지정
- MASK=INSIDE : geometry1이 geometry2 안에 완전히 포함되어 있는 경우
- MASK=OVERLAPBDYDISJOINT : geometry1과 geometry2가 경계를 제외하고 겹치는 경우
- MASK=ANYINTERACT : 두 객체가 서로 겹치거나 닿는 경우
반응형
'프로그래밍' 카테고리의 다른 글
C# 디자인 패턴 : 싱글톤 패턴과 팩토리 패턴 (Singleton & Factory Pattern) (2) | 2024.12.03 |
---|---|
HTML에서 자주 사용되는 태그 정의 및 사용법(div, span, a, p, h, ul, ol, li, img, form, table, input) (2) | 2024.12.02 |
[C# WPF] WVVM 디자인 패턴 (2) | 2024.11.27 |
Oracle 불필요한 문자 제거, REGEXP_REPLACE 사용법 (3) | 2024.11.25 |
C# LINQ 이해와 활용 (0) | 2024.11.24 |