david's daily developer note

Oracle 11g Spatial 스키마, 인덱스 생성 SQL. 본문

Develop (kids)

Oracle 11g Spatial 스키마, 인덱스 생성 SQL.

mouse-david 2010. 8. 27. 16:49
728x90
Open Street Map (OSM)의 특정 맵에서 Xml데이터를 추출해서, 파싱(Parshing)하고, 오라클 공간 자료형(SDO_geometry)을 사용해서 저장하고, 질의하는 Viewer를 만들어 봤다. 아래는 파싱된 공간 데이터를 저장하기 위한 환경을 만드는 전체 SQL을 간단히 요약했다. 

drop table OSM;
delete from user_sdo_geom_metadata where table_name ='OSM';

create table OSM                       -- 1. OSM의 XML에서 추출할 데이터를 고려해서 다음의 스키마를 생성했다.
(
  id varchar(20) primary key,       -- 추출된 Geometry의 식별자. 그 밖에 많은 추가 데이터가 존재하지만 생략한다.
                                                --  ex 위,경도,갱신시간, 유저이름,etc..).   
  PRIMITIVE SDO_GEOMETRY     -- 중요한 것은 SDO_GEOMETRY의 공간 자료형으로 선언된 PRIMITIVE필드 이다.
)

Oracle의 공간 자료형을 통해서, point나 window(range) query를 수행하기 위해서는 공간 index구성이 필요하며,
index 구성을 위해서는 공간 자료형으로 선언된 항목을 시스템 metadata 테이블로 등록이 필수적이다.
인자는 순서대로 등록할 테이블 이름, 공간 자료형으로 선언된 필드 이름이며, SDO_DIM_ARRAY는 공간 객체가 포함될 Space를 정의한다 . 예제에서는 경도 (-180,180), 위도(-90,90)로 구성된 공간에 0.5의 tolerance를 정의한다.

insert into user_sdo_geom_metadata values ('OSM' , 'PRIMITIVE' , 
SDO_DIM_ARRAY(
    SDO_DIM_ELEMENT( 'LONGITUDE', -180, 180, 0.5),
    SDO_DIM_ELEMENT( 'LATITUDE', -90, 90, 0.5)), 8307
);

이제 마지막으로 등록된 공간 자료형을 통해서 공간 Index를 생성하면 끝난다. SQL은 아래와 같으며, 기본적으로 R-tree가 사용된다.

CREATE INDEX osm_index
ON OSM(PRIMITIVE)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

출처 : Oracle Spatial Developer’s Guide, 11g Release 1 (11.1)
728x90