티스토리 뷰
이전에는 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만 각자의 파일명에 맞게 바꿔주면 된다.
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
'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 |
- Total
- Today
- Yesterday
- CreateCell
- Postgresql12
- 부하측정
- Postgis
- getCell
- yumrepository
- 리눅스
- 엑셀POI
- getRow
- 공간데이터병합
- 폐쇄망에서패키지설치
- 리눅스폐쇄망
- jdbcType
- apachepoi
- postgis 설치
- SVN
- createRow
- shp2pgsql
- OpenLayers
- yumdownloader
- svn프로젝트불러오기
- 폐쇄망에서rpm설치
- Centos7에서 Postgresql12 설치
- su postgres 안됨
- setForceFormulaRecalculation
- 공간데이터
- 인터넷안되는환경에서설치
- Some resources were not updated.
- mybatisif
- Geoserver
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |