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


18

PostGIS2.0 데이터베이스에 래스터를로드하는 방법을 알아 내려고 노력 중입니다 (이 주제에 대한 이전 질문을 herehere ). 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.