GIS Data Construction

래스터 공간데이터를 DBMS에 등록하는 방법

무혼 2023. 12. 13.
728x90

우선 ige(ige:img파일의 용량이 크면 ige로 확장자명이 변경) 파일을 TIFF 파일로 변환하였다 (QGIS 활용)

※ TIFF (Tagged Image File Format) : TIFF 파일은 이미지 데이터 외에도 여러 가지 종류의 메타데이터(부가 정보)를 포함할 수 있는데, 이러한 메타데이터는 태그(tag)로 구성

 

이후 cmd창에 아래와 같이 입력하여 PostgreSQL에 해당 래스터 데이터를 등록하려고 했으나,

cd C:\Program Files\PostgreSQL\16rc1

raster2pgsql -c -I -F -s 4326 -t 128x128 피일경로\파일명.tif 스키마.테이블 | psql -U postgres -d DB명 -h 호스트 -p 포트번호

※ c : create, I : index, f : 래스터가 포함된 테이블이 이미 존재하면 삭제하고 다시생성, s 4326 좌표계(EPSG코드), t 128x128 : 타일의 크기를 128x128, h 호스트명, p 포트번호

※ C:\Program Files\PostgreSQL\16rc1 부분은 은 각자 PostgreSQL을 설치한 경로로 해주면 된다


파일의 크키(폭, 너비)가 너무 커서 첫번째 오류가 발생하였다.

 

GIS 툴을 활용하여 폭과 너비를 조절해주었다. 두가지 방법이 있는데, 방법은 아래와 같다.

 

1. ERDAS의 subset기능 활용 (Raster 탭 -> subset & chip)

 

2. QGIS로 컷팅 (컷팅자체야 포토샵으로도 할 수 있으나 이러면 메타데이터가 손실됨)

범위로 래스터 자르기 탭 클릭 후

 

이후 다시 시도했으나, postgis, postgis_raster 확장 설치를 안해서 오류 발생... (설치한것같았는데..)

ERROR:  type "raster" does not exist
줄 1: ...a"."테이블명" ("rid" serial PRIMARY KEY,"rast" raster,"fi...
                                                          ^
ERROR:  current transaction is aborted, commands ignored until end of transaction block

 

pgAdmin의 Tool탭 → Query Tool 클릭 후 아래 명령어 실행 (꼭 superuser 서버에서 접속할것)

안그러면 ERROR: must be superuser to alter superusers 오류 발생..

-- PostGIS 확장 설치
CREATE EXTENSION postgis;

-- raster 타입 활성화
CREATE EXTENSION postgis_raster;

 

이번에는 아래 오류 발생. PostgreSQL은 16버전, PostGIS는 15버전을 사용해서 발생한듯

ERROR:  PostGIS built for PostgreSQL 15.0 cannot be loaded in PostgreSQL 16
CONTEXT:  PL/pgSQL 함수 "inline_code_block" 의 15번째 RAISE 

오류:  PostGIS built for PostgreSQL 15.0 cannot be loaded in PostgreSQL 16
SQL state: P0001

 

PostGIS을 16으로 설치해주니 이번에는 또 아래 오류 발생

Warning 1: PROJ: proj_create_from_database: C:\Program Files\PostgreSQL\16rc1\share\contrib\postgis-3.3\proj\proj.db contains DATABASE.LAYOUT.VERSION.MINOR = 0 whereas a number >= 2 is expected. It comes from another PROJ installation.

 

 

이 두 폴더안에 모두 proj 폴더가 존재하는데, 16버전이 아닌 15버전 폴더를 인식해서 발생하는 오류인듯 (postgis-3.4폴더의 proj폴더를 postgis-3.3안으로 옮겨주었다)

 

 

위의 과정을 모두 했는데도 같은 오류가 발생하면 postgis_raster가 제대로 확장되지 않았다는 뜻이므로

다시 한번 cmd창에 확장되도록

cd C:\Program Files\PostgreSQL\16rc1

psql -U postgres -d DB명 -h 주소 -p 포트번호 -c "CREATE EXTENSION postgis_raster;"

 

cd C:\Program Files\PostgreSQL\16rc1

raster2pgsql -c -I -F -s 4326 -t 128x128 피일경로\파일명.tif 스키마.테이블 | psql -U postgres -d DB명 -h 호스트 -p 포트번호

을 다시 실행하고

 

이와 같이 뜬다면 성공적으로 등록 된 것 이다!

728x90