QuantumGIS


3.2 PostGIS 레이어

이번에는 PostGIS 레이어를 다루는 법을 배워보자. PostGIS 레이어는 PostgreSQL에 저장되어 있다. PostgreSQL이 Oracle과 같이 DBMS의 역할을 한다면, PostGIS는 ArcSDE와 같이 공간연산을 처리해 주는 공간처리모듈(Geo-Processing Module)이라고 보면 된다. PostGIS를 사용하면 파일 기반의 벡터 자료를 다룰 때에 비해서, 공간 인덱싱, 질의 등의 측면에서 더 유용하다. 다만 PostGIS 레이어를 사용하기 위해서는 반드시 로컬 컴퓨터나 혹은 접속 가능한 원격 컴퓨터에 PostgreSQL과 PostGIS가 깔려 있어야만 한다.

PostGIS 레이어를 사용하기 위해서는 다음과 같은 단계를 밟으면 된다.

• QGIS와 PostgreSQL을 연결을 생성하고 연결한 뒤,
• QGIS에 올릴 레이어를 선택하고,
• 선택적으로 Where 를 이용하여 원하는 사상(feature)만을 추출해서 화면에 띄우면 된다.


3.2.1 PostgreSQL에 연결 생성 및 관리하기

PostGIS 레이어를 이용하기 위해서는 처음에 PostgreSQL과 연결을 생성하여야만 한다.
사용자 삽입 이미지

툴바에서 위와 같은 버튼을 누르거나 혹은 메뉴의 [Layer -> Add a PostGIS Layer] 명령을 이용하면 PostgreSQL(혹은 PostGIS)와의 연결을 생성하거나 관리할 수 있다. 이 명령을 수행하면 아래와 같은 다이얼로그 창이 표시된다.
사용자 삽입 이미지

이 연결 관리창을 이용하여 QGIS와 PostGIS 간의 연결을 생성하고 삭제하고 수정할 수 있다. 만약 처음으로 QGIS와 PostgreSQL(혹은 PostGIS)간의 연결을 생성하려면 위 다이얼로그 창에서 [New] 버튼을 누르면 된다. 그러면 아래와 같은 연결을 위한 정보창이 표시된다. (아래 그림은 본인이 입력한 화면 예시가 되겠다.)

사용자 삽입 이미지

위에서 요구하는 정보에 대한 설명은 아래와 같다.

• Name : 본 연결의 이름(적당한 이름을 주면 된다.)
• Host : PostgreSQL이 있는 컴퓨터의 이름
• Database : 접속하려고 하는 PostgreSQL  데이터베이스 이름
• Port : 접속 포트 번호(5432번이 기본이다.)
• Username : 데이터베이스 사용자 이름
• Password : 위 사용자 이름에 해당하는 암호

위와 같은 정보를 입력해 주고 [Test Connect] 버튼을 눌러보면 QGIS가 PostgreSQL과 정상적으로 연결이 되는지 확인할 수 있다. 만약, 에러가 나면 위 정보를 다시 한 번 잘 확인하고서 다시 해 보기를 권장한다.


3.2.2 PostGIS 레이어 불러오기

이번에는 PostgreSQL에 저장되어 있는 PostGIS 레이어를 QGIS에 불러와 보도록 하자. PostGIS 레이어를 불러오기 위해서는 위와 같이 PostGIS 불러오기 버튼을 누르거나, 메뉴의 [Layer -> Add a PostGIS Layer]를 실행하면 된다. 이후 연결 관리창에서 연결하고자 하는 연결명(Connection Name)을 선택하고 [Connect] 버튼을 누르면 아래와 같이 해당 PostgreSQL에 저장되어 있는 여러 주제도들이 표시된다. (물론 이미 해당 자료들이 PostgreSQL에 저장되어 있어야 한다. 벡터 자료를 어떻게 PostGIS에 임포트 하는지에 대해서는 뒤에서 다시 다룰 예정이다.)

<PostGIS에 저장되어 있는 다양한 벡터 주제도>

<PostGIS에 저장되어 있는 다양한 벡터 주제도>


원하는 PostGIS 레이어를 선택하고, [Add] 버튼을 누르면 PostgreSQL에 있는 PostGIS 레이어가 QGIS 지도화면에 표시된다. 아래 화면은 PostgreSQL에 저장되어 있는 서울특별시의 행정동 정보 PostGIS 레이어를 QGIS로 불러온 화면이다.
사용자 삽입 이미지

특정 PostGIS 레이어 전체를 불러오지 않고, 특정 필터링을 수행해서 해당하는 사상(feature)만을 불러올 수 있는 [Query Builder] 기능을 이용할 수도 있다. 이럴 경우에는 PostGIS 관리창에서 원하는 PostGIS 레이어를 선택한 뒤, 마우스로 해당 PostGIS 레이어를 더블클릭하면 아래와 같은 [Query Builder] 창이 표시된다.

사용자 삽입 이미지

위 [Query Builder] 창은 서울특별시의 행정동 정보 PostGIS 레이어에서 '구' 이름이 '영등포구'이거나 '구로구'인 사상(feature)만을 추출하여 화면에 표시하라는 내용이다. 위와 같은 필터링을 수행하면 서울특별시 전체 행정동 정보가 표시되는 것이 아니고 아래와 같이 '영등포구'와 '구로구'만이 표시된다. 이 [Query Builder]는 SQL 문을 쉽게 사용자가 작성할 수 있게 도와주는 것이라고 보면 되겠다. 즉, 위 내용은, "Select * from dong where gu='영등포구' or gu='구로구' "를 사용자가 쉽게 입력할 수 있게 도와주는 것이라고 보면 되겠다.

사용자 삽입 이미지

사실 PostGIS의 강점은 바로 Geo-SQL에 있다. 즉, 벡터와 관련된 어지간한 공간분석을 간단한 SQL 문만으로 처리할 수 있기 때문이다. 2차원 벡터 기반의 공간 분석은, 단 한 번에 안되는 한이 있더라도, 몇 번의 Geo-SQL을 거치면 어지간하면 대부분 처리할 수 있다. (Geo-SQL 잘 쓰면 인생이 편해진다. ^^;)


3.2.3 QGIS에서 PostGIS에 SHP 파일 임포트하기

QGIS를 설치하면서 모든 플러그인을 설치했다면 메뉴의 [Plugins -> SPIT]을 쉽게 찾을 수 있을 것이다. 만약 플러그인을 설치하지 않았으면, 플러그인 메뉴에서 SPIT(SHP 2 PostGIS Import Tool)을 찾을 수 없을 것이다. 이런 경우에는 플로그인을 재설치해야 한다.

[Plugins -> SPIT]을 실행하면 다음과 같은 화면이 표시된다.
사용자 삽입 이미지

SHP 파일을 PostGIS 레이어로 임포트하는 관계로 반드시 사전에 PostgreSQL과 연결이 설정되어 있어야 한다. PostgreSQL과의 연결설정에 대해서는 위 [3.2.1 PostgreSQL에 연결 생성 및 관리하기]를 참조하기 바란다.

Shapefile List 탭에서 PostGIS에 임포트할 SHP 파일을 [Add] 버튼을 이용해 추가해 준 뒤, 우하단의 [Ok] 버튼을 누르면 선택된  SHP 파일이 PostGIS로 임포트된다.


3.2.4 PostGIS 레이서 성능 향상시키기

PostGIS 레이어는 PostgreSQL에 저장되어 있는 관계로 해당 레이어의 공간 인덱스를 생성해 줌으로써 접속 속도나 질의 속도를 향상시킬 수 있다.

PostgreSQL에 접속한 뒤,

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );

와 같은 명령을 수행하면 해당 레이어에 공간 인덱스가 생성되면서 성능이 향상된다. 위와 같은 명령어는 QGIS에서 바로 수행할 수는 없으며, 아래와 같은 PostgreSQL의 콘솔 창이나 pgAdmin 툴을 이용하여 실행해야 된다.

사용자 삽입 이미지

만약, 'dong' 이라는 이름의 PostGIS 레이어에 공간 인덱스를 걸어주려면,

create index sidx_dong on dong using GIST (the_geom GIST_GEOMETRY_OPS) 와 같이 SQL 문을 던지는 것이다.

위에서 the_geom은 Geometry 정보를 담고 있는 필드 이름이다.

오늘은 여기까지...


2008년 5월 5일


Posted by 뚜와띠엔
,