Próbuję wymyślić, jak załadować raster do bazy danych PostGIS2.0 (zadałem poprzednie pytania na ten temat tutaj i tutaj ). Próbuję użyć raster2pgsql.exe
programu dostarczonego z PostGIS2.0.
Po ustaleniu, że wiersz poleceń w systemie Windows musi być uruchomiony jako administrator (w systemie Windows 7, aby uruchomić wiersz poleceń jako administrator, wpisz cmd
w pasek wyszukiwania i naciśnij ctrl
+ shift
+ enter
), aby włączyć raster2pgsql.exe
funkcję, którą udało mi się załaduj raster do mojej bazy danych. Mam plik rastrowy o nazwie ras_test.tif
tymczasowo umieszczony w bin
folderze mojej postgresql
instalacji. Za pomocą następującego kodu przekonwertowałem i załadowałem ten raster:
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
Gdy przeglądam tę tabelę w PostGIS, wygląda to tak:
Jednak nie byłem w stanie wyświetlić tego w QGIS i nie jestem pewien, czy poprawnie go załadowałem, ponieważ wydaje się, że w tym pliku nie ma danych. Wygląda na to, że nazwa pliku została załadowana jako raster, a nie zawartość danych. Czy popełniłem jakieś oczywiste błędy, które uniemożliwiają mi załadowanie rastra do mojej bazy danych?
PostGIS dokumentacja stanowi przykład, jak załadować raster, ale nie rozumiem, których argumenty są opcjonalne, i jestem nadal niejasne, na co powinno się używać, jeśli chcę użyć schematu domyślnego. Na przykład w następującym przykładzie z dokumentacji:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
Czy muszę podać SRID?
-s 4236
Czy
-I -C -M
wszystkie argumenty są opcjonalne?-t
wydaje się mieć rozmiar płytki; Czy muszę to określać, jeśli nie mam niestandardowego schematu?- Czy mogę po prostu pominąć
myschema.demelevation
?
EDYCJA: Zamieściłem wynik poniższych sugestii:
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
Daje to tabelę z dwiema kolumnami rid
i rast
. rid
ma cztery wartości, a nad rast
nie ma. Kiedy próbuję użyć więcej argumentów:
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)
Otrzymuję następujące dane wyjściowe. W rezultacie powstaje nowa tabela o następującej strukturze:
Zakładam, że nie jest to poprawnie załadowany raster, ponieważ nie mogę wyświetlić danych. Czy są jakieś inne opcje, które mogę wypróbować?
EDYCJA: Ta ostatnia próba zadziałała, po prostu nie miałem dostępu do rastra poprawnie.