PostGIS2.0 데이터베이스에 래스터를로드하는 방법을 알아 내려고 노력 중입니다 (이 주제에 대한 이전 질문을 here 과 here ). raster2pgsql.exe
PostGIS2.0과 함께 제공된 프로그램 을 사용하려고합니다 .
Windows에서 명령 프롬프트를 관리자로 실행해야한다는 것을 알아 낸 후 (Windows 7에서 관리자로 명령 줄을 실행 cmd
하려면 검색 표시 줄에 입력하고 ctrl
+ shift
+을 누름 enter
) raster2pgsql.exe
정렬 된 기능 을 수행 할 수 있습니다. 내 데이터베이스에 래스터를로드하십시오. 설치 폴더에 ras_test.tif
임시로 배치 된 래스터 파일이 있습니다. 다음 코드를 사용 하여이 래스터를 변환하고로드합니다.bin
postgresql
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif
C:\Program Files (x86)\PostgreSQL\9.1\bin>psql.exe -p 5434 -U postgres -d test2 -f elev.sql
BEGIN
psql:elev.sql:2: NOTICE: CREATE TABLE will create implicit sequence "-t_rid_seq" for serial column "-t.rid"
psql:elev.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "-t_pkey" for table "-t"
CREATE TABLE
INSERT 0 1
COMMIT
PostGIS에서이 테이블을 보면 다음과 같습니다.
그러나 QGIS에서 이것을 볼 수 없었 으며이 파일에 데이터가없는 것처럼 올바르게로드했는지 확실하지 않습니다. 데이터 내용이 아닌 래스터로 파일 이름을로드 한 것 같습니다. 래스터를 데이터베이스에로드하지 못하게하는 명백한 오류가 있습니까?
PostGIS 문서 는 래스터를로드하는 방법에 대한 예를 제공하지만 어떤 인수가 선택적인지 이해하지 못하며 기본 스키마를 사용하려는 경우 사용해야 할 내용이 여전히 확실하지 않습니다. 예를 들어, 설명서의 다음 예에서
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
SRID를 제공해야합니까?
-s 4236
인수는
-I -C -M
모두 선택 사항입니까?-t
타일 크기 인 것 같습니다. 사용자 정의 스키마가없는 경우이를 지정해야합니까?- 그냥 나가도
myschema.demelevation
될까요?
편집 : 나는 아래 제안의 결과를 포함시켰다.
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 -t 300x300 ras_test.tif ras_test | psql.exe -U postgres
-d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
BEGIN
NOTICE: CREATE TABLE will create implicit sequence "ras_test_rid_seq" for serial column "ras_test.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test_pkey" for table "ras_test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
COMMIT
이 두 개의 열이있는 테이블을 초래 rid
하고 rast
. rid
네 개의 값이 있고 nad rast
에는 없습니다. 더 많은 인수를 사용하려고하면 :
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 ras_test.tif ras_test1 | psql
.exe -U postgres -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
NOTICE: CREATE TABLE will create implicit sequence "ras_test1_rid_seq" for serial column "ras_test1.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test1_pkey" for table "ras_test1"
CREATE TABLE
CREATE INDEX
ANALYZE
NOTICE: Adding SRID constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding alignment constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding number of bands constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding pixel type constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding nodata value constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Unable to add constraint "enforce_nodata_values_rast"
CONTEXT: PL/pgSQL function "_add_raster_constraint_nodata_values" line 40 at RETURN
PL/pgSQL function "addrasterconstraints" line 94 at assignment
PL/pgSQL function "addrasterconstraints" line 49 at RETURN
WARNING: Unable to add constraint: 'nodata_values'. Skipping
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding maximum extent constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
addrasterconstraints
----------------------
t
(1 row)
다음과 같은 결과가 나타납니다. 결과적으로 다음과 같은 구조의 새 테이블이 생성됩니다.
데이터를 볼 수 없으므로 올바르게로드 된 래스터가 아니라고 가정합니다. 시도해 볼 수있는 다른 옵션이 있습니까?
편집 :이 마지막 시도는 효과가 있었지만 래스터에 올바르게 액세스하지 않았습니다.