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.
Odpowiedzi:
SRID? -s 4236 (wymagane)
Czy wszystkie argumenty -I -C -M są opcjonalne?
-C Zastosuj ograniczenia rastrowe - srid, pixelize itp., Aby upewnić się, że raster jest poprawnie zarejestrowany w widoku raster_columns. (wymagany)
-M (Analiza próżniowa tabeli rastrowej). Opcjonalna
-I (Utwórz indeks GiST w kolumnie rastrowej). Opcjonalne, ale zalecane
-t TILE_SIZE (Wytnij raster na płytki, które zostaną wstawione po jednym w rzędzie tabeli. TILE_SIZE jest wyrażony jako WIDTHxHEIGHT.)
myschema.demelevation
pomiń (tak)http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters
źródło
Celenius,
Jeśli nie użyjesz
-t
opcji z wymiarami wymiarów, plik rastrowy pojawi się jako pojedynczy rekord. Właśnie zauważyłem błąd w dokumentacji, który prawdopodobnie Cię myli. Naprawię to.-t
Należy zawsze następuje WIDTHxHEIGHT.Jeśli chcesz, aby był podzielony na fragmenty, powiedz w wysokości 100 x 100 pikseli - jak mówi Mapperz - użyj opcji -t.
Zatem twoim poleceniem byłoby:
Spójrz na przykład z lotu ptaka w dokumentacji. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader
Z tego korzysta wiele ręcznych przykładów:
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
Wiem, że przełączniki mogą być nieco zniechęcające, ponieważ jest ich tak wiele, a większość jest opcjonalna. Być może w 2.1 będziemy mieli GUI podobne do tego,
shp2pgsql-gui
aby uczynić to nieco prostszym dla początkujących.W najnowszej wersji
raster2pgsql
jest logika do wnioskowania o srid na podstawie informacji o georeferencji w pliku tif lub innym pliku rastrowym (ta wersja jest teraz dostępna jako okno binarne). Nie wypróbowałem jeszcze tej funkcji, ale jeśli zadziała, możesz nawet pominąć srida i zgadnie (mam nadzieję, że poprawnie).źródło
W widoku SQL nie można zobaczyć danych, gdy są duże. Możesz wykonać zapytanie do pliku, który wyświetli dane.
źródło