Программирование Geoserver 2.0.2 для добавления хранилища растровых данных и слоя без UI


15

У меня есть каталог растровых изображений, который будет постоянно обновляться. Из этих изображений я делаю пирамиды изображений, используя утилиту Geotool's PyramidBuilder. Мне нужно настроить задание cron для автоматического добавления растровых хранилищ данных и слоев в Geoserver без использования пользовательского интерфейса.

Посмотрев на раздел REST руководства Geoserver, я смог добавить свое рабочее пространство «testWS», но попытка создать хранилище данных ImagePyramid не сработала.

Поскольку у меня есть доступ к хранилищу данных, я расширил пример шейп-файла и попытался

curl -u admin:geoserver -XPUT -H 'Content-type: text/plain' \ 
   -d '/opt/geoserver_data_dir/2.0.2/data/test_pyramid.pyr' \
    "http://localhost:8080/geoserver/rest/workspaces/testWS/datastores/test_pyramid.pyr/external.imagepyramid?configure=all"

Где test_pyramid.pyr - это основа моей ImagePyramid в этом месте.

Это дало мне ошибку «Нет такого хранилища данных: test_pyramid»

Есть ли лучший способ добавить новое хранилище данных и слой в Geoserver без добавления каждого из них через пользовательский интерфейс? Мне нужна помощь в создании правильного оператора REST, который добавит существующий ImagePyramid в качестве хранилища данных и слоя.

Есть ли какой-нибудь Java-код, который мог бы сделать это? Я посмотрел на расширения Python Geoserver, но они также не имели этого.


Этот пост от Яна mail-archive.com/geoserver-users@lists.sourceforge.net/… описывает почти такую ​​же проблему. Там нет разрешения.
DaveParillo

1
Документы geoserver по адресу docs.geoserver.org/stable/en/user/restconfig/… подразумевают, что единственными хранилищами данных, которые можно настроить с помощью этого метода, являются файл в случае Shapefile, база данных в случае PostGIS или сервер в случае удаленного Web Feature Service, но документы могут быть просто неполными.
DaveParillo

Можете ли вы добавить то, что на самом деле в файле, который вы размещаете на сервере?
Ян Тертон

Но вы должны создать файл XML, который содержит эту информацию.
Ян Тертон

я пытаюсь опубликовать путь к хранилищу данных, которое я хочу создать в Geoserver. Этот путь является внешним набором растровых файлов (imagepyramid) в одном каталоге. Все, что я хотел, - это чтобы Geoserver создал хранилище данных и слой для пирамиды изображений в этом месте (в той же файловой системе, что и геосервер.)
rbrister

Ответы:


20

Вы можете создать рабочую область, хранилище данных и слой (coveragestore) для GeoTiff с curl и xml из-за пределов пользовательского интерфейса следующим образом:

  1. Создайте рабочее пространство.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. Затем создайте хранилище данных.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<coverageStore>
             <name>wsgeotiff_imageGeoTiffWGS84_1298678792699</name>
             <workspace>wsgeotiff</workspace>
             <enabled>true</enabled>
             <type>GeoTIFF</type>
             <url>/home/gis/image_wgs84.tif</url>
             </coverageStore>' \
         "http://localhost:8080/geoserver/rest/workspaces/wsgeotiff/coveragestores?configure=all"
  3. Затем создайте слой.

     curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
          -d '<coverage>
              <name>imageGeoTiffWGS84</name>
              <title>imageGeoTiffWGS84</title>
              <nativeCRS>GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;World Geodetic System 1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137.0, 298.257223563, AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;, 0.0, AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;, 0.017453292519943295],AXIS[&quot;Geodetic longitude&quot;, EAST],AXIS[&quot;Geodetic latitude&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]]</nativeCRS>
              <srs>EPSG:4326</srs>
              <latLonBoundingBox><minx>-179.958</minx><maxx>-105.002</maxx><miny>-65.007</miny><maxy>65.007</maxy><crs>EPSG:4326</crs></latLonBoundingBox>
              </coverage>' \
          "http://localhost:8080/geoserver/rest/workspaces/wsgeotiff/coveragestores/wsgeotiff_imageGeoTiffWGS84_1298678792699/coverages"

Когда все это будет сделано, у вас есть хранилище данных, указывающее на внешнее изображение image_wgs84.tif и слой WMS для отображения покрытия.

Чего я не знаю, так это того, переходит ли эта техника непосредственно в технику создания хранилища данных типа пирамиды изображений или нет.

Удачи.


У меня та же самая проблема, что и вопрос выше. Спасибо за приятное изложение, большинство решений сбивают с толку. У меня есть один вопрос, хотя здесь. В вашем ответе в качестве входных данных необходимо указать ограничивающие рамки растра. Теперь я понимаю, что если я помещу вышеупомянутое решение в сценарий, я мог бы использовать gdalinfo, чтобы найти ограничивающий прямоугольник. Но это только добавленная работа (разбор и т. Д.). Мой вопрос: можем ли мы заставить геосервер автоматически рассчитывать ограничивающие рамки? Мы знаем, что это возможно, потому что когда мы добавляем растр из пользовательского интерфейса, он вычисляет Bounding Box!
Шаунак

3
На моем GeoServer 2.2 вам не нужно явно указывать Bounding Box (и SRS и т. Д.). Он обнаруживает их автоматически из файла при создании слоя (проверено на GeoTIFF и ImageMosaic). Вы можете дополнительно настроить ?recalculate=nativebboxпересчет собственной ограничительной рамки при изменении проекции или политики проецирования. См docs.geoserver.org/stable/en/user/rest/api/...
xandriksson

4

Вам понадобится магазин покрытия и покрытий.

Хранилище покрытия - это источник пространственных данных на растровой основе.

Хранилища данных, которые вы пытались использовать, предназначены только для векторных данных.

Вы проверяли, как использовать curl для загрузки Coverage через оставшуюся часть Geoserver?

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