티스토리 뷰

 

이전에는 PostGIS Shapefile Import/Export Manager를 이용해서 DB에 shp파일을 올렸었다.

이번에는 shp2pgsql을 이용해서 postgreSQL에 직접 shp파일을 db에 올려보겠다.

 

 

shp2psql이란

 

shp2psql은 데이터베이스에 ESRI shapefile을 import 할 수 있는 커맨드라인 도구이다.

리눅스에서 다음 명령어를 써서 새 PostGIS테이블을 import 할 수 있다.

shapefile (.shp)

셰이프파일 형식은 지리 정보 시스템 소프트웨어를 위한 지리 공간 벡터 데이터 형식이다.

 

 

shp2pgsql 명령어

 

- s 좌표계값
- W 인코딩설정값

- h 원격 주소 설정 (postgresql이 설치된 서버의 ip주소 입력)

- U 계정지정

- d database 지정

C:\Program Files\PostgreSQL\10\bin>shp2pgsql
RELEASE: 2.5.3 (r17699)
USAGE: shp2pgsql [<options>] <shapefile> [[<schema>.]<table>]
OPTIONS:
  -s [<from>:]<srid> Set the SRID field. Defaults to 0.
      Optionally reprojects from given SRID (cannot be used with -D).
 (-d|a|c|p) These are mutually exclusive options:
     -d  Drops the table, then recreates it and populates
         it with current shape file data.
     -a  Appends shape file into current table, must be
         exactly the same table schema.
     -c  Creates a new table and populates it, this is the
         default if you do not specify any options.
     -p  Prepare mode, only creates the table.
  -g <geocolumn> Specify the name of the geometry/geography column
      (mostly useful in append mode).
  -D  Use postgresql dump format (defaults to SQL insert statements).
  -e  Execute each statement individually, do not use a transaction.
      Not compatible with -D.
  -G  Use geography type (requires lon/lat data or -s to reproject).
  -k  Keep postgresql identifiers case.
  -i  Use int4 type for all integer dbf fields.
  -I  Create a spatial index on the geocolumn.
  -m <filename>  Specify a file containing a set of mappings of (long) column
     names to 10 character DBF column names. The content of the file is one or
     more lines of two names separated by white space and no trailing or
     leading space. For example:
         COLUMNNAME DBFFIELD1
         AVERYLONGCOLUMNNAME DBFFIELD2
  -S  Generate simple geometries instead of MULTI geometries.  //좌표계
  -t <dimensionality> Force geometry to be one of '2D', '3DZ', '3DM', or '4D'
  -w  Output WKT instead of WKB.  Note that this can result in
      coordinate drift.
  -W <encoding> Specify the character encoding of Shape's
      attribute column. (default: "UTF-8")  //인코딩설정
  -N <policy> NULL geometries handling policy (insert*,skip,abort).
  -n  Only import DBF file.
  -T <tablespace> Specify the tablespace for the new table.
      Note that indexes will still use the default tablespace unless the
      -X flag is also used.
  -X <tablespace> Specify the tablespace for the table's indexes.
      This applies to the primary key, and the spatial index if
      the -I flag is used.
  -?  Display this help screen.

  An argument of `--' disables further option processing.
  (useful for unusual file names starting with '-')

 

 

 

postgresql에 shp파일 올리기

 

1. 먼저 CentOS에 설치된 PostgreSQL 접속하기

1-1. su postgres -> psql

1-2. create extension postgis; 설치 해야함

 

 

2. shp2pgsql.exe 경로 확인하기

보통 postgresql 설치할때 shp2pgsql이 같이 설치되어진다.

따라서 PosgreSQL 설치 경로를 확인해서 shp2pgsql.exe 파일 경로 찾기

 

필자는 아래의 위치에서 확인하였다.

C:\Program Files\PostgreSQL\10\bin

cd C:\Program Files\PostgreSQL\10\bin -> 경로로 이동

아래 경로가 맞다면 shp2pgsql을 입력했을때 위의 shp2pgsql 명령어를 확인할 수 있다.

 

 

3. DB에 shapefile 넣기

필자는 아래와 같이 명령어를 작성하였다.

 

C:\Program Files\PostgreSQL\10\bin>shp2pgsql -s 5186 -W cp949 C:\Users\negga\Desktop\study_geoserver_example_data\admin_sid.shp | psql -h 192.168.224.151 -U postgres -d postgres

shp2pgsql -s 5186 -W cp949 C:\Users\negga\Desktop\geoserver_example_data_test_dbkim\admin_sid.shp | psql -h 168.192.0.128 -U jwkim -d postgres

위에서 COMMIT이 확인되면 일단은 된거임.

 

 

4. DB에 데이터가 잘 들어갔는지 확인해보자

4-1. DBeaver를 이용해서 확인

4-2. CentOS 터미널에서 아래의 쿼리로 데이터 조회

select * from pg_tables where TABLENAME='admin_sid';

tablename만 각자의 파일명에 맞게 바꿔주면 된다.

데이터 import확인

 

 

error1

 

1. cmd에서 한글 깨짐 현상

import문을 입력했을때, cmd창에서 한글 깨짐 현상이 일어났다.

근데 이거 그냥 무시해도 됨.

결국 중요한건 밑에 COMMIT 이 뜨면 된거다.

참고로 위에서는 ROLLBACK이 떴기 때문에 당연히 안된거다.

 

error2

 

비밀번호를 지정해주지 않았는지 확인하자

sudo passwd postgres
alter user postgres password 'postgres';

 

systemctl restart postgresql-12

 

 

error3

 

Connection to 192.168.224.131:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

위와 같은 에러가 발생한다면 특정 서버에서 특정 사용자에만 접속이 가능하도록 제한해놓은것이다.

CentOS에서 아래의 파일을 수정해주면 해결된다.

# cd /

# cd /var/lib/pgsql/12/data

# vi postgresql.conf

 

- 아래와 같이 수정 (주석해제,* 수정)

listen_addresses = '*'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

 

postgresql12 재시작

systemctl restart postgresql-12

 

 

 

만약 위의 과정대로 했는데도 다 안된다면...

 

shapefile 데이터는 D드라이브에 있고, postgresql설치는 C드라이브에 있어서 안됐을수도...

 

예를들면

C:\Program Files\PostgreSQL\10\bin>shp2pgsql -s 5186 -W cp949 D:\study_geoserver_example_data\admin_sid.shp | psql -h 192.168.224.151 -U postgres -d postgres

 

 

 

 


Ref.

 

https://sujinisacat.tistory.com/11

 

shp2pgsql로 PostgreSQL에 shp 파일 import 하기

# shp2pgsql 을 사용하여 PostgreSQL에 shp 파일을 import 하는 방법 PostGIS 2.0 Shapefile and DBF Loader Exporter 을 이용하는 방법도 있다. (GUI 툴을 이용하는 방법이다.) shp2pgsql 은 스크립트 명령어를..

sujinisacat.tistory.com

https://zipeya.tistory.com/entry/shp2pgsql-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-shp%ED%8C%8C%EC%9D%BC%EC%9D%84-postgresql-db%EC%97%90-%EC%96%B9%ED%98%80%EB%B3%B4%EA%B8%B0

 

shp2pgsql 이용해서 shp파일을 postgresql db에 얹혀보기

shp2pgsql 이용해서 shp파일을 postgresql db에 얹혀보기 * 참조: http://postgis.refractions.net/documentation/manual-2.0/using_postgis_dbmanagement.html#id2853463 1. 사용환경 - OS: Ubuntu 15.10 wily -..

zipeya.tistory.com

https://mozi.tistory.com/569

 

'GIS' 카테고리의 다른 글

공간데이터 병합(.shp) : shapefile 병합  (0) 2022.07.27
Geoserver에서 Layer style 적용해보기 (SLD파일)  (0) 2022.04.15
OGC API 문서 공부하기 (WFS, WMS)  (0) 2022.04.15
OpenLayers Map 띄우기  (0) 2022.04.14
VWorld API (Feat. OSM)  (0) 2022.04.13
댓글