[GIS] PostGIS, 공간데이터 테이블 생성에 대한 SQL

진행하고 있는 프로젝트에서 사용하고 있는 공간 DBMS로 PostGIS를 사용하고 있습니다. 공간 테이블을 직접 만들어어 활용해야할 필요가 있어 찾은 내용을 정리해 봅니다.

고유한 ID 값으로써 fid와 기타 필드로써 name 그리고 Geometry 값에 대한 the_geom이라는 이름의 필드를 가지는 테이블을 생성하는 SQL 문의 예는 다음과 같습니다.

CREATE TABLE "tst_table"(
    fid INTEGER PRIMARY KEY,
    name VARCHAR(64),
    the_geom geometry,

    CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),

    CONSTRAINT enforce_geotype_the_geom CHECK 
            (geometrytype(the_geom) = 'MULTIPOLYGON'::text 
        OR 
            the_geom IS NULL),

    CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = (-1))
);

1번 줄에 생성할 테이블 명으로써 tst_Table로 지정했습니다. 2~4번 줄이 앞서 언급한 필드들이구요. 6번 줄은 Geometry에 대한 필드인 the_geom의 차원이 2차원, 즉 X와 Y의 쌍이어야 한다는 제약 조건입니다. 그리고 8번 줄의 제약 조건은 Geometry가 MULTIPOLYGON 타입이며 NULL 일 수 있다는 것 입니다. 그리고 13번 줄은 Geometry의 Spatial Reference ID에 대한 제약 조건입니다.

이제 아래는 앞서 생성한 공간 테이블에 하나의 레코도를 추가하는 SQL 문입니다.

INSERT INTO tst_Table 
 (
    fid, 
    name, 
    the_geom
) 
VALUES 
 (
    0, 
    '테스트', 
    ST_GeomFromText('MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)))', -1)
); 

일반적인 INSERT SQL 문입니다. 단지 주목해야할 줄은 11번입니다. Geometry에 대한 WKT 형식으로 지정했으며 공간참조로 -1을 주었습니다. 이 값은 앞서 공간 테이블을 생성할때 제약 조건과 일치합니다.