Рассмотрена установка и настройка GeoWebCache
Обсудить в форуме Комментариев 24
Оглавление
Одним из распространенных источников данных для OpenLayers являются серверы WMS. Когда появляется необходимость (например, передвинули карту или изменили увеличение) вывести новые данные, OpenLayers отправляет запрос на сервер WMS с указанием региона (&BBOX=100,100,200,200) и масштаба (пересчитывается из разрешения в пикселях, &WIDTH=256&HEIGHT=256). Зачастую, слой на сервере формируется из нескольких источников данных (файлы, базы данных) и, если это векторные данные, требует дополнительного преобразования (rendering) в растровый формат.
Для оптимизации времени подготовки и доставки данных был предложен протокол WMS Tile Caching (далее по тексту WMS-C). Основные идеи:
Теперь можно подготовить карту в заданном масштабе и разрезать по сетке. Кусочек такой карты называется тайл (tile). Как и раньше, OpenLayers обращается к серверу WMS (на самом деле клиент не различает WMS и WMS-C) и получает набор заранее подготовленных тайлов. Не требуется время на выбор, подготовку и преобразование данных. Также, как и любой кэш-сервер, использование собственного сервера WMS-C позволяет значительно сократить время доставки данных от сторонних WMS и сгладить перебои в их работе. Но не забывайте, что воспользоваться протоколом WMS-C клиенты, работающие с произвольными масштабами (все настольные ГИС, фреймворки Chameleon и p.mapper), не смогут.
Замечание. По-умолчанию, класс OpenLayers.Layer.WMS расчитан на работу с WMS-C. И поэтому запрашивает у сервера множество мелких кусочков. Для обычного WMS эффективнее запрашивать карту за один раз [параметр 'singleTile: true'].
Существует несколько реализаций протокола WMS-C:
В этой статье рассматривается подготовка к работе GeoWebCache.
Рассмотрим установку GeoWebCache в среде Windows. Для работы в Unix может потребоваться выбор другого сервера сервлетов (см. ниже) и, конечно, изменятся пути к файлам.
Если у вас стоит GeoServer, то он уже содержит установленный GeoWebCache. Можете переходить сразу к настройке.
GeoWebCache - это сервлет, т.е. для работы ему нужен контейнер java-сервлетов (javax.servlet container). Для Windows мы будем использовать Jetty (другие варианты - Tomcat, JBoss, GlassFish).
Jetty - это http сервер с контейнером java-сервлетов (используется в Windows-версии GeoServer). Дистрибутив расположен здесь. Берем свежий релиз из 6-й версии (версия 7 еще не стабильная и - главное - в ней отсутствует скрипт для запуска Jetty в качестве службы). Распаковываем, например в c:\jetty, и запускаем:
bin\Jetty-Service.exe --install
bin\Jetty-Service.exe --start
Теперь jetty будет запускаться автоматически. Если все сделано правильно, то сервер станет доступен по адресу: http://localhost:8080/.
Загружаем дистрибутив GeoWebCache в виде WAR-файла. Создаем папку c:\jetty\webapps\geowebcache\ и кладем в нее содержимое war-файла (по сути, это просто архив zip). Перезапускаем Jetty:
bin\Jetty-Service.exe --stop
bin\Jetty-Service.exe --start
Перезапустить Jetty можно также через Мой компьютер > Управление > Службы и приложения.
Теперь доступна консоль управления GeoWebCache: http://localhost:8080/geowebcache/demo.
Здесь приводится список слоев с подключенных серверов WMS. Можно посмотреть несколько демонстрационных слоев. По ссылке в колонке 'OpenLayers' (если вы используете системы координат отличные от EPSG:4326 и EPSG:900913 то см. колонку 'Custom') автоматически создается карта на базе OpenLayers. Позже, если будете добавлять слои в OpenLayers, можно использовать исходный код этой страницы как справку.
Если понадобится пароль, то он хранится в файле WEB-INF\users.properties, стандартный - geowebcache:secured.
Добавим свой слой. Окрываем в текстовом редакторе файл WEB-INF\classes\geowebcache.xml (не перепутайте с geowebcache-servlet.xml). По аналогии с демонстрационными слоями создаем свой:
<wmsLayer>
<name>my_cached_wms</name>
<mimeFormats>
<string>image/png</string>
<string>image/jpeg</string>
</mimeFormats>
<grids>
<entry>
<srs>
<number>28407</number>
</srs>
<grid>
<srs>
<number>28407</number>
</srs>
<dataBounds>
<coords>
<double>1111111</double>
<double>2222222</double>
<double>5555555</double>
<double>6666666</double>
</coords>
</dataBounds>
<gridBounds>
<coords>
<double>1111111</double>
<double>2222222</double>
<double>5555555</double>
<double>6666666</double>
</coords>
</gridBounds>
<zoomStart>0</zoomStart>
<zoomStop>10</zoomStop>
</grid>
</entry>
</grids>
<wmsUrl>
<string>http://localhost/cgi-bin/mapserv.exe?map=d:/work/wms/web.map&</string>
</wmsUrl>
<wmsLayers>real_wms_layer_name</wmsLayers>
<transparent>true</transparent>
</wmsLayer>
После изменения файла нужно оповестить об этом GeoWebCache. На странице администрирования (http://localhost:8080/geowebcache/demo) нажмите 'Reload Configuration'.
Подключаете слой wms-c в OpenLayers точно также как обычный wms. Было:
var geol_hole = new OpenLayers.Layer.WFS('layer',
'http://localhost/cgi-bin/mapserv.exe?map=d:/work/wms/web.map&',
{layers: "real_wms_layer_name", format: 'image/png'});
Стало:
var topo_yandex = new OpenLayers.Layer.WMS('layer',
'http://localhost:8080/geowebcache/service/wms',
{layers: 'my_cached_wms', format: 'image/png'});
Теперь при отображении слоя готовые тайлы будут браться из кэша GeoWebCache. А если их там еще нет, то будут запрошены на WMS-сервере и сохранены в кэше. Можно заранее подготовить кэш. Обычно генерируют не все уровни увеличения, а только несколько первых, например 8 из 20. Остальные будут накапливаться в процессе работы. Для этого обратитесь на страницу администрирования в раздел 'Seed this layer' (http://localhost:8080/geowebcache/demo).
Папка для хранения кэша тайлов задается в файле WEB-INF\web.xml - параметр 'GEOWEBCACHE_CACHE_DIR' (не забудьте раскомментировать).
Обсудить в форуме Комментариев 24
Последнее обновление: September 09 2021
Дата создания: 28.07.2009
Автор(ы): Mavka
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).