Как публиковать растры PostGIS с помощью GeoServer?
Я потратил много времени, пытаясь создать источник данных Raster, используя 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/coverages/
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
Обновление: журнал Geoserver
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
geoserver
postgresql
postgis-2.0
гадюка
источник
источник
Ответы:
Я работал над несколькими проблемами, пытаясь использовать постгисовый растр в геосервере, похожий на OP. Ниже показано, как я успешно загрузил свои растровые данные.
Предварительная конфигурация: геотифный слой BNG, созданный из FME, был импортирован в postgis с использованием
raster2pgsql
. Используемая команда была:Это создало растровую таблицу вместе с ее пирамидальными таблицами.
В настоящее время мой сервер имеет экземпляр
Geoserver 2.6.2
. Для использования растров Postgis требуется расширение JDBC Image Mosaic, которое можно загрузить с http://geoserver.org/release/2.6.2/.Расширение .jar было затем извлечено в
WEB-INF/lib
. Это позволит геосерверу использовать растры из postgis. Однако для доступа к данным необходимо настроить несколько параметров.Следуйте инструкциям на сайте: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html, но слегка подправлены:
Теперь вставьте записи для «покрытия», названного в примере oek, это ваши растровые таблицы: главная и пирамидальная.
Также, согласно документации, для драйверов Postgis JDBC <версия 9 необходимо установить свойство в базе данных:
Теперь конфигурация 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
Здесь нам нужно правильно ссылаться на растровые таблицы.Таким образом, мы получим значения, которые мы добавили в таблицу MOSAIC,
name
значения - это столбцыMOSAIC
, которые ссылаются на нашу растровую таблицу и таблицы пирамид.rast
имя растрового столбца в растровых таблицах.В
oek.pgraster.xml
Убедитесь , что ваш SRS правильно установлен, 27700 BNG в этом случае.В Geoserver теперь мы можем добавить новое хранилище данных.
Перейти в новый Добавить новый магазин.
Выберите ImageMosaicJDBC
Дайте ему имя и установите URL для
file:coverages/oek.pgraster.xml
Сохраните это, и пальцы скрещены без ошибок. Если это так, проверьте журналы геосерверов, которые, как мы надеемся, покажут, в чем заключалась проблема, возможно, это просто опечатка или проблема с именами.
Перейдите, чтобы добавить новый слой и выберите новое хранилище растровых данных.
Выберите новый слой / покрытие с именем oek и опубликуйте его.
Затем в настройках слоя настройте свою систему координат и ограничивающие рамки соответствующим образом.
Чтобы оформить растр, следуйте документации здесь: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html
Я добавил стиль:
Это покрасило мои растры в синий цвет, где они имели значение.
Вы должны иметь пригодный для использования слой.
Отказ от ответственности: я не эксперт ГИС, и многое из того, с чем я работал, было методом проб и ошибок. Я не сомневаюсь, что есть лучшие способы сделать это, но пока я работаю только над проверкой концепции, чтобы подтвердить, есть ли у нас возможность использовать растровые данные в postgis. Более мелкие детали, такие как растровые значения и стилизация - это то, что мне еще нужно сгладить. Если я добьюсь дальнейшего прогресса, я обновлю свой ответ.
источник
Следуя инструкциям по настройке подключаемого модуля растра PostGIS, попробуйте заменить
с
в файле конфигурации
mapping.postgis.xml.inc
.источник