Я пытаюсь выяснить, как загрузить растр в базу данных 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)
Я получаю следующий вывод. В результате получается новая таблица со следующей структурой:
Я предполагаю, что это не правильно загруженный растр, так как я не могу просмотреть данные. Есть ли другие варианты, которые я могу попробовать?
РЕДАКТИРОВАТЬ: Эта последняя попытка сработала, я просто не получил правильный доступ к растру.
Ответы:
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
источник
Celenius,
Если вы не используете
-t
опцию с размерами, тогда ваш растровый файл появится в виде одной записи. Я только что заметил ошибку в документации, которая, вероятно, смущает вас. Я исправлю это. За-t
ним всегда следует ширина по высоте.Если вы хотите, чтобы он был кусочком, скажем, с высотой ширины 100x100 пикселей - как говорит Mapperz - используйте опцию -t.
Итак, ваша команда будет:
Посмотрите на воздушный пример в документах. 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, и он угадает (надеюсь, правильно).источник
В представлении SQL вы не можете видеть данные, когда они большие. Вы можете выполнить запрос в файл, и он покажет данные.
источник