Ładowanie rastra do bazy danych PostGIS 2.0 w systemie Windows


18

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.exeprogramu 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 cmdw pasek wyszukiwania i naciśnij ctrl+ shift+ enter), aby włączyć raster2pgsql.exefunkcję, którą udało mi się załaduj raster do mojej bazy danych. Mam plik rastrowy o nazwie ras_test.tiftymczasowo umieszczony w binfolderze mojej postgresqlinstalacji. 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:

wprowadź opis zdjęcia tutaj

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
  1. Czy muszę podać SRID? -s 4236

  2. Czy -I -C -Mwszystkie argumenty są opcjonalne?

  3. -twydaje się mieć rozmiar płytki; Czy muszę to określać, jeśli nie mam niestandardowego schematu?

  4. 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 ridi rast. ridma cztery wartości, a nad rastnie 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:

wprowadź opis zdjęcia tutaj

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.


raster2pgsql odnosi się do odniesienia postgis.org/documentation/manual-svn/…
Mapperz

Próbowałem załadować plik rastrowy (jpg) do post gis, używając składni podanej tutaj "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 "Widziałem tabelę rastrową utworzoną w bazie danych. Było tak, jak pokazano w Celeniusie, gdzie nic nie widzisz w kolumnie „rast raster”, chyba że klikniesz określoną komórkę. Oto mój faktyczny problem. Jak wyświetlić warstwę rastrową z ArcGIS przy użyciu warstwy zapytań sql. Kiedy próbowałem dodać tę warstwę i sprawdzić ją,
pojawia się komunikat „rast

Myślę, że powinieneś zadać to pytanie jako nowe pytanie, ponieważ otrzymasz więcej odpowiedzi. Nie wiem, jak połączyć się za pomocą ArcGIS, ale możesz użyć QGIS, aby uzyskać do niego dostęp.
djq

1
Uwaga: pgAdminIII pokazuje pustą komórkę dla danych przekraczających określony rozmiar; patrz bilet # 297
Mike T.

powyższy querry działa, ale czy ktoś może mi powiedzieć, jak przechowywać wartości pikseli / wartości komórek w tabeli?

Odpowiedzi:


5

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


Dzięki Mapperzowi częściowo zrozumiałem, jak działa raster2pgsql - jednak mój raster w postgresql zawiera tylko jedną komórkę i dlatego próbuję wymyślić, jakich argumentów użyć.
djq

9

Celenius,

Jeśli nie użyjesz -topcji 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. -tNależ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:

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

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-guiaby uczynić to nieco prostszym dla początkujących.

W najnowszej wersji raster2pgsqljest 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).


Dzięki za sugestie! Nadal nie mogę go uruchomić, ale zaczynam rozumieć przełączniki nieco lepiej.
djq

To działało, ale nie rozumiałem, jak to powinno wyglądać w bazie danych. Jeszcze raz dziękuję za pomoc.
djq

Czy w końcu przybył GUI do ładowania rastrów do pgsql? :)
astrojuanlu,

-2

W widoku SQL nie można zobaczyć danych, gdy są duże. Możesz wykonać zapytanie do pliku, który wyświetli dane.


1
Oryginalne (stare) pytanie ma już zaakceptowaną odpowiedź, a twoje nie jest tak naprawdę alternatywnym rozwiązaniem pytania, ale raczej wezwaniem do kontroli wzrokowej.
Curlew,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.