Я пытаюсь выяснить, как загрузить растр в базу данных PostGIS2.0 (я задавал предыдущие вопросы по этой теме здесь и здесь ). Я пытаюсь использовать raster2pgsql.exe
программу, поставляемую с PostGIS2.0.
После того, как выяснилось, что командную строку в Windows нужно запускать с правами администратора (В Windows 7 для запуска командной строки с правами администратора введите cmd
в строку поиска и нажмите ctrl
+ shift
+ enter
), чтобы включить raster2pgsql.exe
функцию, с которой мне удалось справиться загрузить растр в мою базу данных. У меня есть растровый файл, ras_test.tif
который я временно поместил в bin
папку моей postgresql
установки. Используя следующий код, я конвертирую и загружаю этот растр:
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
Должен ли я предоставить SRID?
-s 4236
Все аргументы
-I -C -M
необязательны?-t
кажется размером плитки; Нужно ли указывать это, если у меня нет собственной схемы?- Могу я просто уйти
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)
Я получаю следующий вывод. В результате получается новая таблица со следующей структурой:
Я предполагаю, что это не правильно загруженный растр, так как я не могу просмотреть данные. Есть ли другие варианты, которые я могу попробовать?
РЕДАКТИРОВАТЬ: Эта последняя попытка сработала, я просто не получил правильный доступ к растру.