[PostGIS] PostgreSQL 에 shp 파일 import 하는 법

식빵·2022년 12월 5일
1

postgis

목록 보기
2/9
post-thumbnail

PostGIS 공부를 위해서는 결국 데이터가 필요하고,
그 데이터들은 거의 SHP 파일로 존재한다.
지금부터 이러한 SHP 파일의 데이터를 Postgresqlimport 하는 방법을 알아보자.

먼저 SHP 파일을 다운로드 받는 것부터 시작해서, QGIS, shp2pgsql-gui.exe 유틸을
사용해서 SHP 파일을 postgresqlimport 방법을 알아보자.




🌍 shp 파일 다운로드


1. 브이월드에서 SHP(ZIP) 다운로드

이번 예제에서는 연속지적도 SHP 파일을 예제로 사용하겠다.

데이터는 vworld 링크에 접속해서 zip 파일을 다운로드 받는다.
일단 테스트라서 서울특별시(= 서울.zip) 파일 하나만 다운로드 받았다.



2. ZIP 파일 압축풀기

원하는 위치에 다운로드 파일을 위치시키고, 압축을 해제한다.
압축을 해제하면 그림처럼 SHP 파일이 있음을 확인할 수 있다.





🌍 import 방법(1): QGIS


1. PostgreSQL Connection 생성

QGIS 를 실행시키고, 좌측 탐색기 영역에서 PostgreSQL 에 마우스를 대고
우측 클릭, 새 연결... 을 클릭한다.


새롭게 생성할 Database Connection 정보를 입력한다.

  • 이름: Connection 명칭을 지정한다. 자기 마음대로 해도 된다.
  • 호스트: Database host 입력
  • 포트 : Database host 의 port number 입력
  • 데이터베이스 : 접속할 Database 명칭을 입력
  • 인증
    • 기본 탭을 클릭
    • 사용자 이름/ 비밀번호 에 Database 접속을 위한 사용자 ID, 비번을 입력한다.
    • 계속 접속할 때마다 ID/PW 를 묻지 않도록 저장 을 check 해준다.
  • 도형이 없는 테이블 목록도 보기 : 체크 해주자.

만약에 (5)번 작업에서 에러가 나면 자신이 작성한 호스트, 포트, 데이터베이스,
사용자 이름 그리고 비밀번호 가 맞는지 다시 확인해 본다.


이러고 나면 탐색기의 "PostgreSQL" 밑에 방금 생성한 연결(Connection) 정보가 보인다.




2. DB Manager import

QGIS 화면 좌측의 "탐색기" 에서 앞서 압축해제했던 폴더의 경로를 찾아가면,
위 그림처럼 *.shp 파일이 보인다. 해당 파일을 레이어 창에 Drag-&-Drop 한다.


상단 메뉴 > 데이터베이스 > DB 관리자 를 클릭한다. 그러면 DB 관리자 팝업이 보인다.


좌측의 제공자 창에서 PostGIS 더블 클릭 > {아까 만든 DB Connection} 더블클릭한다.
참고로 이렇게 더블 클릭을 해야 DB 가 연결된 상태가 된다.
이후에는 레이어/파일 불러오기 (I)... 버튼을 클릭한다.


버튼을 클릭하면 위와 같은 화면이 나온다. 여기서 설정할 게 몇가지 있다.

  • 입력: 아까 Drag-&-Drop 해서 올려둔 레이어의 명칭을 선택한다.
  • 산출 테이블
    • 해당 레이어를 저장할 DB 의 스키마, 테이블 명칭을 각각 지정해준다.
    • 스키마는 지정 안 하면 자동으로 public
  • 옵션 :
    • 기본키 : 지정하고 싶으면 한다. 안하면 자동으로 id 라는 컬럼을 생성하고 PK 로 지정한다.
    • 도형 열 : 공간정보를 담는 컬럼을 지정한다.
    • 원본 SRID : SHP 파일의 좌표계와 똑같이 맞춰준다.
    • 대상 SRID : SHP 파일의 좌표계를 다른 좌표계로 Transform 하고 싶으면 지정
    • 인코딩 : 그냥 자동으로 하는 게 마음 편하다. UTF-8 했다가 깨진 적이 많았다.
    • 공간 인덱스 생성 :
      • spatial index 생성 여부다.
      • 도형 정보에 대한 인덱스는 사실상 기본이다.

이 정도로만 설정해주고 확인 버튼을 클릭한다.
이게 한 5분 정도 걸린다. 마치 프로그램이 멈춘 것처럼 보여도 그냥 계속 냅두면
임포트 완료 라는 팝업이 뜬다. 답답해도 기다려주자. 분명된다.

참고: SRID 지정과 관련하여...

SRID 지정은 SHP 파일과 함께 있던 *.prj를 참고했다. 그리고 추가적으로
데이터를 다운로드 받는 곳에 있는 Q&A 글도 참고했다. 5186 을 쓰라고 권고하고 있다.




3. import 결과 확인하기

자신의 DB 에 생성된 테이블을 확인해 보자. 나는 DBeaver 를 자주 사용하니,
해당 소프트웨어로 확인을 해보겠다.

테이블 생성도 잘됐고, DDL 을 보면 원하는 대로 잘 처리된 것을 확인할 수 있다.
특히 geom 의 좌표계와 gist 를 이용한 spatial index 가 적용된 것이 핵심이다.


DBeaver 에서 아래와 같은 쿼리를 돌리면 위 그림과 같은 결과를 볼 수 있다.

SELECT *
FROM CONTINUE_MAP
WHERE PNU LIKE '1168010100%'
ORDER BY PNU LIMIT 500 -- 500 개 제한!

참고로 쿼리 결과에서 geom 이라고 표시된 컬럼을 마우스로 클릭하면
우측에 지도와 함께 geom 을 그려서 보여준다.
DBeaver 가 제공하는 기본 기능 중 하나다.





🌍 import 방법(2): shp2pgsql-gui


Postgresql 을 다운 받았다면 아래와 같은 경로에 exe 실행 파일이 있을 것이다.

C:\Program Files\PostgreSQL\{Version No}\bin\postgisgui\shp2pgsql-gui.exe

찾아가는 게 귀찮으면 Window 검색 바에 PostGIS 라고 입력하면 보이는 프로그램인
PostGIS PostGIS Bundle 3 for PostgreSQL x64 15 Shapefile and DBF Loader Exporter
를 실행하면 됩니다.

어떤 방법이든 실행을 하면 아래와 같은 화면이 나온다.

위 그림의 번호 순서대로 클릭하면서 Import 방법을 더 상세히 알아보자.


1. View connection details... 클릭하고 팝업이 나오면
username, password, db 정보를 입력하고 OK 버튼을 클릭하면 끝이다.


2. Add file 클릭하면 우리가 넣고 싶은 shp 파일을 로컬 PC 에서 지정할 수 있다.
파일을 지정한 후에 우측 하단의 "Open" 버튼을 클릭한다.


3. 아까 지정한 파일이 Import List 에 더해진다.
이 파일이 실제 DB 에 Import 될 때 어떻게 들어갈지를 지정할 수 있다.
여기서 스키마, 테이블 명, geom 컬럼명 그리고 SRID 를 지정할 수 있다.


4. Options... 를 클릭하여 원하는 설정을 지정하자.
웬만하면 기본으로 지정되어 있던 것을 그대로 사용해보고, 안되면 조금씩 바꾸자.


5. 최종적으로 import 를 클릭하면 로딩바가 살짝 나오고 화면 하단에 위 그림과 같이
"Shapefile import completed" 라는 문구가 나오면 성공한 것이다.




💀 shp2pgsql-gui 에러 대처


shp2pgsql-gui 로 shape import 시, 예상치 못한 에러가 발생할 수 있다.
몇가지 에러 예시와 함께 대처법을 작성(공유)한다.

1. "Unable to convert data value to UTF-8 ~~" 라고 메세지 나오면서 import 실패

일단 Options... 버튼을 클릭하고 encoding 을 "EUC-KR" 같은 걸로 바꿔보고 시도해보자.
그래도 안되면, 데이터 제공자에게 물어보자.



2. "dbf file (.dbf) can not be opened" 라고 메세지 나오면서 import 실패

Shapefile 경로에 특수문자 및 "한글"이 들어가면 주로 발생한다.
경로 수정 후 다시 import 를 시도한다.





🌍 참고: SHP 파일 다운로드 링크


profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글