Публікація растров PostGIS в GeoServer?


23

Як публікувати растри PostGIS за допомогою GeoServer?

Я витратив багато часу, намагаючись створити растровий джерело даних за допомогою Image Mosaic JDBC, але не пощастило.

Виконані кроки:
1. Завантажено та встановлено розширення JDBC Image Mosaic (справно)
2. Створено файли "Параметр з'єднання":

connect.postgis.xml.inc:

<connect>
  <dstype value="DBCP"/>
  <username value="postgres" />
  <password value="password" />
  <jdbcUrl value="jdbc:postgresql://localhost:5432/db1" />
  <driverClassName value="org.postgresql.Driver"/>
  <maxActive value="10"/>
  <maxIdle value="0"/>
</connect>


mapping.postgis.xml.inc:

<spatialExtension name="postgis"/>
<mapping>
    <masterTable name="mosaic" >
        <coverageNameAttribute name="name"/>
        <maxXAttribute name="maxX"/>
        <maxYAttribute name="maxY"/>
        <minXAttribute name="minX"/>
        <minYAttribute name="minY"/>
        <resXAttribute name="resX"/>
        <resYAttribute name="resY"/>
        <tileTableNameAtribute name="tiletable" />
    </masterTable>
    <tileTable>
        <blobAttributeName name="rast" />
    </tileTable>
</mapping>


osm.postgis.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [
  <!ENTITY mapping PUBLIC "mapping"  "mapping.postgis.xml.inc">
  <!ENTITY connect PUBLIC "connect"  "connect.postgis.xml.inc">]>
<config version="1.0">
  <coverageName name="gfm"/>
  <coordsys name="EPSG:25832"/>
  <!-- interpolation 1 = nearest neighbour, 2 = bilinear, 3 = bicubic -->
  <scaleop  interpolation="1"/>
  <verify cardinality="false"/>
  &mapping;
  &connect;
</config>

де "мозаїка" - це таблиця (стовпці: ім'я, таблиця заголовків, minX, minY, maxX, maxY, resX, resY), що містить один рядок: "gfm, testrastertable,,,,,,",

3. Збережено файли конфігурації в. ./geoserver/data_dir/coverage/
4. Під час спроби додати сховище даних JDBC Image Mosaic я отримую таку помилку:

Error: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC



Оновлення: журнал геосервера

2012-10-24 14:09:11,404 DEBUG [org.geoserver] - Thread 14 locking in mode WRITE
2012-10-24 14:09:11,404 DEBUG [org.geoserver] - Thread 14 got the lock in mode WRITE
2012-10-24 14:09:11,406 DEBUG [geoserver.config] - Persisting coverage store raster_store
2012-10-24 14:09:11,408 DEBUG [geoserver.config] - Persisted org.geoserver.catalog.impl.CoverageStoreInfoImpl to /opt/geoserver/data_dir/workspaces/raster/raster_store/coveragestore.xml
2012-10-24 14:09:11,416 DEBUG [geoserver.config] - Persisted $Proxy15 to /opt/geoserver/data_dir/global.xml
2012-10-24 14:09:11,438 ERROR [imagemosaic.jdbc] - 
2012-10-24 14:09:11,438 WARN [imagemosaic.jdbc] - 
java.io.IOException
    at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCReader.<init>(ImageMosaicJDBCReader.java:163)
    at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCFormat.getReader(ImageMosaicJDBCFormat.java:209)
....
2012-10-24 14:09:11,439 INFO [geoserver.web] - Getting list of coverages for saved store file:coverages/osm.postgis.xml
java.lang.RuntimeException: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
    at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:115)
...
Caused by: java.lang.Exception: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
    at org.geoserver.catalog.CatalogBuilder.buildCoverage(CatalogBuilder.java:812)
    at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:82)
    ... 95 more
2012-10-24 14:09:11,441 DEBUG [geoserver.config] - Removing coverage store raster_store
2012-10-24 14:09:11,446 DEBUG [geoserver.config] - Persisted $Proxy15 to /opt/geoserver/data_dir/global.xml
2012-10-24 14:09:11,459 DEBUG [org.geoserver] - Thread 14 releasing the lock in mode WRITE

поверніть реєстрацію до багатослівного і перевірте файл журналу
Ian Turton

щойно оновлений журналом ... не каже мені занадто багато
asp

Оскільки тут ніхто не може допомогти, ви можете спробувати список розсилки GeoServer: geoserver.org/display/GEOS/Mailing+Lists
GIS-Jonathan

Будь-яке оновлення з цього питання?
Пабло

1
Немає оновлень ... Мені довелося кинути ідею створення мозаїки зображень JDBC, тому що я просто не міг створити її в Geoserver. Я зараз використовую сховище ImagePyramid, а файли зберігаються на диску.
asp

Відповіді:


7

Я працював через декілька проблем, намагаючись використати растровий постгіс в геосервері, подібному до ОП. Нижче - як я успішно завантажував свої растрові дані.

Попередня конфігурація: шар геотифу BNG, згенерований із FME, був імпортований у postgis за допомогою raster2pgsql. Використовувана команда:

raster2pgsql -s 27700 -I -M -C {geotiffName}.tif -t 100x100 -l 2,4,6 {schema}.{tableName} | psql -U {user} -d {database}

Це створило растрову таблицю разом з її пірамідними таблицями.

Наразі мій сервер має примірник Geoserver 2.6.2. Для використання растрових файлів Postgis потрібно розширення JDBC Image Mosaic, яке можна завантажити з http://geoserver.org/release/2.6.2/

Потім розширення .jar було вилучено в WEB-INF/lib. Це дозволить геосерверу використовувати растри від постгігів. Однак для доступу до даних потрібно налаштувати кілька налаштувань.

Дотримуючись вказівок на веб-сторінці: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html, але трохи змінено:

create table {schema}.MOSAIC (NAME varchar(254) not null,
     TileTable varchar(254)not null,
     minX FLOAT8,minY FLOAT8, maxX FLOAT8, maxY FLOAT8,resX FLOAT8, resY FLOAT8, primary key (NAME,TileTable))

Тепер вставіть записи для "покриття", названого oek у прикладі, це ваші растрові таблиці: головна та піраміда.

insert into {schema}.MOSAIC (name, tiletable) values ('oek', {Main raster table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 2 table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 4 table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 6 table name});

Також, згідно з документами, для драйверів Postgis JDBC <версія 9 необхідно встановити властивість у базі даних:

ALTER DATABASE dbname SET bytea_output TO 'escape'

Тепер конфігурація Geoserver:

У вашому каталозі даних Geoserver створіть каталог /data/coverages, він повинен містити 3 файли:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

Дотримуйтесь http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html щодо їх іменування та вмісту. Очевидно відрегулюйте рядок підключення до бази даних та налаштування користувача / пароля вconnect.pgraster.xml.inc

mapping.pgraster.xml.inc тут нам потрібно правильно віднести растрові таблиці.

<spatialExtension name="pgraster"/>
 <mapping>
  <masterTable name="MOSAIC" >
          <coverageNameAttribute name="name"/>
          <maxXAttribute name="maxX"/>
          <maxYAttribute name="maxY"/>
          <minXAttribute name="minX"/>
          <minYAttribute name="minY"/>
          <resXAttribute name="resX"/>
          <resYAttribute name="resY"/>
          <tileTableNameAtribute  name="tiletable" />
  </masterTable>
  <tileTable>
          <blobAttributeName name="rast" />
  </tileTable>
</mapping>

Таким чином, отримаємо значення, які ми додали до таблиці MOSAIC, nameзначення - це стовпці MOSAIC, які посилаються на нашу растрову таблицю та пірамідні таблиці. rast- назва растрової колонки в растрових таблицях.

В oek.pgraster.xmlПереконайтеся , що ваш SRS правильно встановлений, 27700 BNG в цьому випадку.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [
  <!ENTITY mapping PUBLIC "mapping"  "mapping.pgraster.xml.inc">
  <!ENTITY connect PUBLIC "connect"  "connect.pgraster.xml.inc">
]>

<config version="1.0">
  <coverageName name="oek"/>
  <coordsys name="EPSG:27700"/>
  <!-- interpolation 1 = nearest neighbour, 2 = bipolar, 3 = bicubic -->
  <scaleop  interpolation="1"/>
<axisOrder ignore="false"/>
  &mapping;
  &connect;
</config

Тепер у Geoserver ми можемо додати новий сховище даних.

Перейти до нового Додати новий магазин.

Виберіть ImageMosaicJDBC

Дайте ім’я та встановіть URL-адресу file:coverages/oek.pgraster.xml

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

Перейдіть, щоб додати новий рівень і виберіть новий сховище растрових даних.

Виберіть новий шар / покриття з назвою oek та опублікуйте його.

Потім в налаштуваннях шару відрегулюйте відповідну систему координат і обмежувальні поля відповідним чином.

Щоб стилізувати растр, дотримуйтесь документів тут: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

Я додав стиль:

<RasterSymbolizer>
 <Opacity>1.0</Opacity>
  <ColorMap>
   <ColorMapEntry color="#ffffff" quantity="1" label="label1" opacity="1"/>
   <ColorMapEntry color="#0000ff" quantity="200" label="label2" opacity="1"/>
  </ColorMap>
</RasterSymbolizer>

Це забарвило мої растри в блакитний колір, де вони мали значення.

Потім у вас повинен бути корисний шар.

Відмова: Я не експерт з ГІС, і багато з чого я працював - це проби та помилки. Я не сумніваюся, що є кращі способи це зробити, але поки що я працюю лише на доказ концепції, щоб підтвердити, чи є у нас можливість використовувати растрові дані в постгігах. Більш детальні деталі, такі як растрові значення та стилізація, - це речі, які мені ще потрібно випрасувати. Якщо я досягну подальшого прогресу, я оновлю свою відповідь.


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