Завантаження растра в базу даних 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?

EDIT: Я включив результати пропозицій нижче:

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)

Я отримую наступний вихід. У результаті виходить нова таблиця з такою структурою:

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

Я припускаю, що це не правильно завантажений растр, оскільки я не можу переглянути дані. Чи є інші варіанти, які я можу спробувати?

EDIT: Ця остання спроба спрацювала, я просто не отримав правильний доступ до растру.


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, коли ви не бачите жодної речі в стовпці "rast rastter", якщо не натиснути на певну клітинку. Ось моя справжня проблема. Як переглянути шар растру з ArcGIS за допомогою рівня запиту sql. Коли я спробував додати цей шар і перевірити його, він говорить "
rast rastter

Я думаю, вам слід задати це як нове запитання, оскільки ви отримаєте більше відповідей. Я не знаю, як можна підключитися за допомогою ArcGIS, але ви можете використовувати QGIS для доступу до нього.
djq

1
Примітка: pgAdminIII показує порожню клітинку для даних, що перевищують певний розмір; дивись квиток № 297
Майк Т

вищевказаний querry працює, але чи може хтось мені підказати, як зберігати значення пікселів / значення комірок у таблиці?

Відповіді:


5

SRID? -s 4236 (обов'язково)

Чи всі аргументи -I -C -M необов’язкові?

-C Застосовуйте растрові обмеження - srid, pixelsize тощо, щоб переконатися, що растр належним чином зареєстрований у поданні raster_column. (вимагається)

-М (Вакуумний аналіз растрової таблиці.) Необов'язковий

-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

Селеніус,

Якщо ви не використовуєте -tпараметр із розмірними розмірами, то ваш растровий файл увійде як один запис. Я щойно помітив помилку в документах, яка, мабуть, вас бентежить. Я це виправлю. -tЗавжди повинна супроводжуватися WIDTHxHEIGHT.

Якщо ви хочете, щоб він був кучерявим, скажіть у висоті шириною 100х100 пікселів - як каже 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 у нас з'явиться gui, подібний до того, shp2pgsql-guiщоб зробити це трохи простіше для новачків.

В останньому варіанті raster2pgsqlє логіка виводити srid з інформації про геореференцію в tif або інший растровий файл (ця версія доступна зараз у вигляді бінарного вікна). Ще не пробували цю функцію, але якщо вона працює, ви навіть можете випустити з неї сітку, і вона здогадається (сподіваюся правильно).


Дякую за пропозиції! Ще не в змозі змусити його працювати, але починаючи розуміти вимикачі трохи краще.
djq

Це спрацювало, але я не зрозумів, як це має виглядати в базі даних. Ще раз дякую за вашу допомогу.
djq

Чи нарешті надійшов графічний інтерфейс для завантаження растрових файлів у pgsql? :)
astrojuanlu

-2

У поданні SQL ви не можете бачити дані, коли вони великі. Ви можете виконати запит у файл, і він покаже дані.


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