Загрузка растра в базу данных PostGIS 2.0 в Windows


18

Я пытаюсь выяснить, как загрузить растр в базу данных 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
  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)

Я получаю следующий вывод. В результате получается новая таблица со следующей структурой:

введите описание изображения здесь

Я предполагаю, что это не правильно загруженный растр, так как я не могу просмотреть данные. Есть ли другие варианты, которые я могу попробовать?

РЕДАКТИРОВАТЬ: Эта последняя попытка сработала, я просто не получил правильный доступ к растру.


raster2pgsql относится к опорному postgis.org/documentation/manual-svn/...
Mapperz

Я пытался загрузить растровый файл (jpg) в post gis, используя приведенный здесь синтаксис "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 "Я мог видеть растровую таблицу, созданную в базе данных. Это было так, как показано Celenius, где вы не видите ничего в столбце «Растровый растр», если не щелкнете по определенной ячейке. Вот моя актуальная проблема. Как просмотреть растровый слой из ArcGIS, используя SQL-слой запроса. Когда я попытался добавить этот слой и проверить его, он говорит: «Растровый растр
GISTECH

Я думаю, что вы должны задать это как новый вопрос, поскольку вы получите больше ответов. Я не знаю, как вы можете подключиться с помощью ArcGIS, но вы можете использовать QGIS для доступа к нему.
DJJ

1
Примечание: pgAdminIII показывает пустую ячейку для данных за пределами определенного размера; см. билет № 297
Майк Т

вышеупомянутый запрос работает, но может ли кто-нибудь сказать мне, как хранить значения пикселей / значения ячеек в таблице?

Ответы:


5

SRID? -s 4236 (обязательно)

Являются ли аргументы -I -C -M необязательными?

-C Применение растровых ограничений - srid, pixelsize и т. Д., Чтобы обеспечить правильную регистрацию растра в представлении raster_columns. (требуется)

-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

Celenius,

Если вы не используете -tопцию с размерами, тогда ваш растровый файл появится в виде одной записи. Я только что заметил ошибку в документации, которая, вероятно, смущает вас. Я исправлю это. За -tним всегда следует ширина по высоте.

Если вы хотите, чтобы он был кусочком, скажем, с высотой ширины 100x100 пикселей - как говорит Mapperz - используйте опцию -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что сделает это немного проще для новичков.

В последней версии raster2pgsqlесть логика для вывода srid из информации о географической привязке в tif или другом растровом файле (эта версия теперь доступна в виде двоичного окна). Еще не пробовал эту функцию, но если она сработает, вы даже можете пропустить srid, и он угадает (надеюсь, правильно).


Спасибо за предложения! Все еще не в состоянии заставить это работать, но начинаю понимать переключатели немного лучше.
djq

Это сработало, но я не понял, как это должно выглядеть в базе данных. Еще раз спасибо за помощь.
djq

Наконец-то появился графический интерфейс для загрузки растров в pgsql? :)
astrojuanlu

-2

В представлении SQL вы не можете видеть данные, когда они большие. Вы можете выполнить запрос в файл, и он покажет данные.


1
На оригинальный (старый) вопрос уже есть принятый ответ, и ваш вопрос - не альтернативное решение вопроса, а скорее визуальный осмотр.
Curlew
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.