Windows에서 PostGIS 2.0 데이터베이스에 래스터로드


18

PostGIS2.0 데이터베이스에 래스터를로드하는 방법을 알아 내려고 노력 중입니다 (이 주제에 대한 이전 질문을 here 과 here ). raster2pgsql.exePostGIS2.0과 함께 제공된 프로그램 을 사용하려고합니다 .

Windows에서 명령 프롬프트를 관리자로 실행해야한다는 것을 알아 낸 후 (Windows 7에서 관리자로 명령 줄을 실행 cmd하려면 검색 표시 줄에 입력하고 ctrl+ shift+을 누름 enter) raster2pgsql.exe정렬 된 기능 을 수행 할 수 있습니다. 내 데이터베이스에 래스터를로드하십시오. 설치 폴더에 ras_test.tif임시로 배치 된 래스터 파일이 있습니다. 다음 코드를 사용 하여이 래스터를 변환하고로드합니다.binpostgresql

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
  1. SRID를 제공해야합니까? -s 4236

  2. 인수는 -I -C -M모두 선택 사항입니까?

  3. -t타일 ​​크기 인 것 같습니다. 사용자 정의 스키마가없는 경우이를 지정해야합니까?

  4. 그냥 나가도 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)

다음과 같은 결과가 나타납니다. 결과적으로 다음과 같은 구조의 새 테이블이 생성됩니다.

여기에 이미지 설명을 입력하십시오

데이터를 볼 수 없으므로 올바르게로드 된 래스터가 아니라고 가정합니다. 시도해 볼 수있는 다른 옵션이 있습니까?

편집 :이 마지막 시도는 효과가 있었지만 래스터에 올바르게 액세스하지 않았습니다.



여기에 제공된 "C : \ Program Files (x86) \ PostgreSQL \ 9.1 \ bin> raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 구문을 사용하여 포스트 GIS에 래스터 파일 (jpg)을로드하려고했습니다. ras_test.tif ras_test1 | psql .exe -U postgres -d raster_analysis -h localhost -p 5434 "데이터베이스에서 작성된 래스터 테이블을 볼 수 있습니다. 특정 셀을 클릭하지 않으면 "래스터 래스터"열 아래에 아무 것도 표시되지 않는 Celenius가 표시 한 것과 같습니다. 여기 내 실제 문제가 있습니다. SQL 쿼리 레이어를 사용하여 ArcGIS에서 래스터 레이어를 보는 방법. 이 레이어를 추가하고 유효성을 검사하려고하면 "
— 마지막

더 많은 답변을 얻을 수 있기 때문에 새로운 질문으로 생각해야한다고 생각합니다. ArcGIS를 사용하여 연결하는 방법을 모르지만 QGIS를 사용하여 액세스 할 수 있습니다.
— djq

1
참고 : pgAdminIII는 특정 크기를 초과하는 데이터의 빈 셀을 보여줍니다. 티켓 # 297 참조
— Mike T

위의 쿼리는 작동하지만 테이블에 픽셀 값 / 셀 값을 저장하는 방법을 알려주는 사람이 있습니까?

답변:


5

SRID? -s 4236 (필수)

인수 -I -C -M은 모두 선택 사항입니까?

-C 래스터 구속 조건을 적용-래스터가 raster_columns보기에 올바르게 등록되도록 srid, pixelsize 등. (필수)

-M (진공 래스터 테이블 분석)

-I (래스터 열에 GiST 인덱스 생성) 옵션이지만 권장

-t TILE_SIZE (테이블 행당 하나씩 삽입되도록 래스터를 타일로 자릅니다. TILE_SIZE는 WIDTHxHEIGHT로 표시됩니다.)

myschema.demelevation 나가세요 (예)

http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters


고맙습니다 Mapperz, raster2pgsql의 작동 방식을 부분적으로 이해했습니다. 그러나 postgresql의 래스터에는 하나의 셀만 포함되어 있으므로 사용할 인수를 알아 내려고합니다.
— djq

9

셀레 니 우스,

-t크기 치수와 함께 옵션을 사용하지 않으면 래스터 파일이 단일 레코드로 제공됩니다. 방금 문서에 오류가 있음을 발견했습니다. 아마도 혼란 스럽습니다. 내가 고칠 게 는 -t항상 너비 x 높이가 와야합니다.

Mapperz가 말한 것처럼 100x100 픽셀 너비 높이로 청크하려면 -t 옵션을 사용하십시오.

따라서 귀하의 명령은 다음과 같습니다.

raster2pgsql -s 102003  -t 100x100 ras_test.tif ras_test > elev.sql

문서의 공중 예제를 살펴보십시오. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader

다음은 많은 수동 예제에서 사용되는 것입니다.

raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432

스위치가 너무 많고 대부분 선택 사항이므로 스위치가 약간 어려울 수 있음을 알고 있습니다. 아마도 2.1 shp2pgsql-gui에서는 초보자 와 비슷한 GUI 를 만들 것입니다.

최신 raster2pgsql버전에는 tif 또는 다른 래스터 파일의 지리 참조 정보에서 srid를 추론하는 논리가 있습니다 (이 버전은 현재 Windows 바이너리로 제공됩니다). 그 기능을 아직 시도하지는 않았지만 작동하면 찢어 버릴 수도 있고 추측 할 수 있습니다 (정확하게).


제안 해 주셔서 감사합니다! 여전히 작동하지는 않지만 스위치를 조금 더 잘 이해하기 시작합니다.
— djq

그것은 효과가 있었지만 이것이 데이터베이스 내에서 어떻게 보이는지 이해하지 못했습니다. 도와 주셔서 감사합니다.
— djq

pgsql에 래스터를로드하기위한 GUI가 마침내 도착 했습니까? :)
— astrojuanlu

-2

SQL보기에서는 데이터가 클 때 데이터를 볼 수 없습니다. 쿼리를 파일로 실행할 수 있으며 데이터가 표시됩니다.


1
원래 (이전) 질문은 이미 수용된 답변이며 귀하의 질문은 실제로이 질문에 대한 대체 솔루션이 아니라 시각적 검사를 요구합니다.
— Curlew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.