GIS

PostgreSQL/PostGIS에서 DB 생성하고 공간데이터 추가하기

유병혁 2018. 5. 23. 22:32

본 글은 콜로라도대학교 덴버캠퍼스 지리학부 FOSS4G Lab의 리카르도 올리베이라(Ricardo Oliveira) 님이

작성하신 'Getting Started with PostGIS' 온라인 튜토리얼 시리즈를 한국어 사용자에 맞게 수정한 글입니다.

이 글은 GIS United 김우미 님과 함께 작성하고 있습니다.


안녕하세요? 이전 글에서는 PostgreSQL/PostGIS를 설치해 봤습니다.

[1] 윈도우에서 PostgreSQL과 PostGIS 설치하기 | http://blog.daum.net/geoscience/1237


이번 글에는 PostgreSQL/PostGIS에서 DB를 생성하고 공간데이터를 추가하는 방법을 학습해 보겠습니다.

일단 공간데이터를 획득하기 위해 서울시에서 제공하는 오픈데이터 포털에 접속해 보겠습니다.

서울열린데이터광장 | http://data.seoul.go.kr/


'서울시 법정구역 읍면동 공간정보'를 검색해 보겠습니다.


아래 '서울시 법정구역 읍면동 공간정보 (좌표계: WGS1984)' 데이터셋에서,



아래 'MAP' 버튼을 클릭합니다.


SHP 파일목록의 'TC_SPBE17_2015_W_SHP.zip'을 다운로드하고 압축을 해제합니다.


이제 공간데이터가 있으니 시작해볼까요?! pgAdmin 4 프로그램을 실행합니다.


pgAdmin은 PostgresSQL을 조작하도록 안내하는 그래픽 유저 인터페이스(Graphic User Interface, GUI)입니다.


아래 그림처럼 Databases 카테고리를 우클릭하고 'Create > Database'를 선택합니다.


데이터베이스명을 입력합니다. 여기서는 Seoul이라고 지정했습니다.


Seoul DB가 생성되었습니다. 이제 PostGIS 확장 모듈을 데이터베이스 안에 로드해야 할 차례입니다.


SQL 쿼리 빌더를 열어서 명령문을 적어보겠습니다. DB명을 우클릭 후 Query Tool을 선택합니다.


쿼리 빌더가 나타나면 PostGIS 확장 모듈을 로드하기 위한 명령어를 다음과 같이 입력합니다.

create extension postgis;


그리고 쿼리 실행 단추를 누르거나 F5를 누르면 실행이 됩니다.




이제 PostGIS Shapefile Importer/Export Manager를 사용해서 SHP 파일을 데이터베이스안에 올려보겠습니다.



파일 추가(Add File) 버튼을 눌러서 SHP 파일을 지정합니다.



Import List에 현재 올라갈 SHP 파일의 특성을 나타내는 정보들이 보입니다.


여기서 SRID란 공간 참조 식별자(Spatial Reference Identifier)의 줄임말입니다. 풀어서 이야기하면,

데이터의 지리적 좌표계와 투영법에 대한 정보를 구분해 주는 유일한 식별 코드라고 할 수 있습니다.

로드하고자 하는 데이터의 SRID 정보를 알기 위해 .prj로 끝나는 파일을 메모장에서 열어보겠습니다.


이 좌표계의 SRID 코드를 알기 위해서는 아래 웹사이트에 정보를 복사해서 붙여 넣거나 prj 파일을

업로드한 후 Convert 버튼을 눌러서 결과를 확인합니다. 여기서 SRID코드는 4326이라는 것을 알 수 있습니다. 

Prj2EPSG | http://prj2epsg.org/search


PostGIS에서 SRID 부분을 클릭해서 해당 코드를 입력하겠습니다. 


Import 버튼을 클릭했더니 아래와 같이 DB 연결 오류 창이 표시됩니다.

View connection details 버튼을 클릭하고 DB 연결 설정을 확인해 보겠습니다.


Username, Password, Server Host를 입력하고 Database는 Seoul을 지정합니다.


다시 Import 버튼을 클릭하면 SHP 파일이 Seoul DB 안에 추가됩니다. 이런 방식으로 다른 파일도 SRID 코드 설정 후 Import 버튼을 클릭하시면 됩니다.


이제 결과를 확인해볼까요?! 아래와 같이 테이블 목록에 서울시 읍면동 SHP 파일이 추가되었습니다.