суббота, 21 марта 2015 г.

Тайлы

Тайлы из QGIS - QTile
Не работает прозрачность

Через ImageMagick
FOR /R %G IN (*.png) DO "ImageMagick\convert.exe" %G -transparent #FFFFFF %G

вторник, 20 августа 2013 г.

Обработка данных метеостанции для RINEX / VRS / WMS

Постановка задачи и общие принципы системы

Задачи:
1. Передача метеоданных на сервер VRS для целей уточнения координат и моделирования состояния атмосферы над приемником
2. Компановка Meteo-RINEX файла для его использования где угодно
3. Запись данных в БД PostgreSQL (PosstGIS) для дальнейшей автоматической публикации по WMS


Схема работы:


понедельник, 10 июня 2013 г.

Geoserver, REST API и python - добавляем слои

При переезде на новый физический сервер возникла потребность заново создать огромное число слоёв в geoserver, типа coverage.
Дополнительная сложность заключается в том, что каждый слой представлен geotiff-ом в файловой системе, а не в БД.

Для того, чтобы автоматизировать процесс, с помощью REST API и питона напишем скрипт.

1. Установка pycurl

curl - свободная, кроссплатформенная служебная программа командной строки для копирования файлов по различным протоколам с синтаксисом URL. (http://en.wikipedia.org/wiki/CURL)

Для того, чтобы использовать её функции в питоне, существует библиотека pycurl, инсталлируемая отдельно. (http://pycurl.sourceforge.net/)

Используем python 2.7
Устанавливаем pycurl, взяв пакет установки отсюда http://www.lfd.uci.edu/~gohlke/pythonlibs/

Теперь его легко использовать, без дополнительных действий:



2. На примере карты июльского климата добавим и опубликуем слой скриптом, не заходя в интерфейс геосервера вообще:

# Подключаем pycurl
import pycurl

# Инициализируем его в переменную
c = pycurl.Curl()

# Работаем с уже существующим workspace-ом geoportal-nevsky
c.setopt (c.URL, 'http://195.70.211.245:8080/geoserver/rest/workspaces/geoportal-nevsky/coveragestores?configure=all')

# Указываем данные авторизации
c.setopt (c.USERPWD, '<user>:<password>')

# Указываем, в чем вещаем
c.setopt (c.HTTPHEADER, ["Content-type: text/xml"])

# Собственно добавляем в нащ workspace новый store с именем July_Climat_1, источник данных - файловая система и geotiff.
c.setopt (c.POSTFIELDS, '<coverageStore><name>July_Climat_1</name><enabled>true</enabled><type>GeoTIFF</type><url>file://S:\Geoportal DATA\Raster DATA\Thematic Maps\Climatology\July_Climat_1.tif</url></coverageStore>')

# Выполняем запрос - мы создали store
c.perform()

# Теперь нужно опубликовать из него слой. Сначала переходим к URL-у нашего store
c.setopt (c.URL, 'http://195.70.211.245:8080/geoserver/rest/workspaces/geoportal-nevsky/coveragestores/July_Climat_1/coverages')

# Теперь делаем запрос, в котором все параметры публикации
c.setopt (c.POSTFIELDS, '<coverage><name>July_Climat_1</name><title>July_Climat_1</title><srs>EPSG:900913</srs><projectionPolicy>FORCE_DECLARED</projectionPolicy><parameters><entry><string>InputTransparentColor</string><string>#00FF00</string></entry><entry><string>SUGGESTED_TILE_SIZE</string><string>512,512</string></entry></parameters></coverage>')

# стоит обратить внимание, что родные проекция и СК не указываются - так он будет брать их из geotiff-а, но указываем srs публикации и велим принудительно её использовать. Также здесь мы задаем цвет прозрачности и предпочтительный размер тайла.

# Выполняем
c.perform()

Чудесным образом слой со всеми необходимыми параметрами добавляется в geoserver. Не заходя туда я добавляю его по WMS в геопортал и всё работает:



Теперь не составит труда расширить скрипт, чтобы он прошелся по всем нужным растрам и добавил кучу слоёв.

Для того, чтобы посмотреть в полном виде рестовское описание слоя, можно открыть в браузере вот что:
http://195.70.211.245:8080/geoserver/rest/workspaces/geoportal-nevsky/coveragestores/July_Climat_1/coverages/July_Climat_1.xml

Можно добавить и настроить слой с помощью интерфейса geoserver, потом таким образом посмотреть его xml представление и понять, как обращаться к REST API.