27.01.2017 Установка и начальная настройка MapServer

Что такое MapServer?

Согласно официальной документации, MapServer - это платформа с открытым исходным кодом, предназначенная для публикации пространственных данных и создания интерактивных картографических веб-приложений. Данное решение, на самом деле, не является полнофункциональным программным продуктом, готовым к использованию "из коробки", но является картографической платформой для разработки своих собственных проектов на ее базе. MapServer выпущен под MIT-лицензией, что допускает его использование и в закрытых проектах, единственное требование - необходимо включать текст лицензии и упоминание авторов этого проекта. MapServer можно запустить на всех популярных операционных системах - Windows, Linux и Mac OS X. Таким образом, данный программный продукт - это прекрасное "OEM-решение" для создания своих веб-ГИС проектов. Теперь давайте же загрузим, сконфигурируем и запустим MapServer.

Загрузка и установка

Я буду производить установку и настройку под ОС Windows 7. При желании можно выполнить самостоятельную сборку MapServer, но сейчас я загружу уже скомпилированные бинарники с сайта www.ms4w.com. Можно загрузить архив (можно также скачать здесь: ms4w_3.1.4.zip) или же инсталлятор. Вначале рассмотрим пример установки с помощью инсталлятора.

Здесь все как обычно - запускаем, соглашаемся с лицензионным соглашением. Далее попадаем в окно выбора устанавливаемых компонентов.

ms4v_components
Выбор устанавливаемых компонентов MapServer

Далее, коротко опишу назначение всех компонентов

  • MS4W core files - основные файлы, необходимые для работы (ядро программы).
  • Specify Apache port - в процессе установки необходимо будет указать порт, который будет прослушивать веб-сервер Apache в ожидании входящих запросов.
  • Create Desktop Shortcuts - создавать ли ярлыки на рабочем столе.
  • Create Start Menu links - создавать ли ссылки в меню "Пуск".
  • Geomoose - клиентский javascript фреймворк для отображения распределенных картографических данных. Он обладает такими сильными сторонами как: модульность, возможности настройки, а также обеспечивает некоторые основные функциональные возможности в своих пакетах. Его лекговесность позволяет обслуживать большое количество пользователей и обрабатывать множество слоев и служб, не оказывая сильной нагрузки на сервер.
  • Mapbender - это back-end решение и клиентский фреймворк для создания инфраструктуры пространственных данных. Написан на PHP и javascript, лицензируется под MIT. ПО обеспечивает модель данных и веб-интерфейсы для отображения, навигации и взаимодействия с OGC-совместимыми картографическими службами.
  • MapServer CGI Viewer - веб-приложение для создания запросов к MapServer, используя CGI-интерфейс.
  • MapServer Itasca Demo Application - веб-приложение, демонстрирующее возможности MapServer по отображению картографических данных.
  • MapServer OGC Web Services Workshop - выполняет проверки OGC-спецификаций, поддерживаемых MapServer, информирует о реализации средств, исправлении ошибок, а также поддержке новых OGC-спецификаций в будущем.
  • OpenLayers - javascript библиотека с открытым исходным кодом для загрузки, отображения и отрисовки карт из различных источников на веб страницах.
  • p.mapper - PHP / javascript фреймворк для отображения картографических данных в вебе, а также демо приложение по использованию MapServer.
  • Inatall and Start Apache Service - установить и запустить службу веб-сервера Apache.

Указав путь и определившись с портом Apache, жмем "Install" и дожидаемся окончания процесса загрузки и установки. Далее, в браузере открываем страницу по адресу http://localhost:[port], где port - номер порта, выбранный при установке. В моем случае - это http://localhost:8888. Если все прошло успешно, то должны увидеть страницу, как показано на рисунке ниже:

ms4v_first_start
Проверка веб-сервера

Теперь, проверим, что MapServer установлен корректно. В браузере перейдем по адресу http://localhost:8888/cgi-bin/mapserv.exe. Вместо 8888, конечно же, указываем свой порт. Далее на этом моменте уже останавливаться не буду. Если вы видите сообщение, как на рисунке ниже, то у нас все в порядке. Поэтому идем дальше.

ms4v_test
Проверка работоспособности CGI MapServer

Публикация своих геоданных

Теперь мы разместим пространственные данные из своих shape-файлов. В качестве примера возьмем границы стран из статьи Загрузка пространственных данных (spatial data) из shape-файлов в MS SQL. Создадим на своем жестком где-нибудь директорию с произвольным именем (я создал d:\stas\mydemo). Внутри папки mydemo еще создадим папку shp и в нее распакуем содержимое архива TM_WORLD_BORDERS_SIMPL-0.3.zip. Далее, создадим обычный текстовый файл с именем, например, main.map в каталоге mydemo. Содержимое данного файла представлено ниже:

# Пример простого map-файла 
MAP
	EXTENT -180 -90 180 90 # Geographic
	SIZE 800 400
	IMAGECOLOR 220 221 239
  
	LAYER
	  NAME "world_poly"
	  DATA 'shp/TM_WORLD_BORDERS_SIMPL-0.3.shp'
	  STATUS ON
	  TYPE POLYGON
	  CLASS
		NAME 'The World'
		STYLE
		  OUTLINECOLOR 0 0 0
		END # STYLE
	  END # CLASS
	END # LAYER  
  
END # MAP

Подробнее о его содержимом я расскажу чуть позже, а пока выполним вот такой запрос в браузере: http://localhost:8888/cgi-bin/mapserv.exe?map=d:/stas/mydemo/main.map&layer=world_poly&mode=map. Если все сделано верно, то вы увидите вот такое изображение:

ms4v_first_image
"Hello world" от MapServer

Это и есть наш "Hello world" от MapServer. Когда веб-сервер Apache получает http-запрос, он запускает CGI-программу mapserv.exe, которой передаются различные параметры. В нашем случае - это путь к map-файлу, слои для отрисовки, тип операции и др. Согласно параметрам, указанным в map-файле и параметрам, переданным в строке запроса программа mapserv.exe отрисовывает карту и возвращает ее в виде изображения. Таким образом, в нашем случае, параметры в строке запроса означают:

  • map - указывает путь к map-файлу. Можно указать путь, начиная с "/", если map-файл и программа mapserv.exe расположены на одном логическом диске. Можно указывать путь относительно директории cgi-bin, которая находится внутри директории Apache. Например, если перенести нашу папку mydemo в директорию htdocs, которая расположена внутри директории Apache, то url будет выглядеть таким образом: http://localhost:8888/cgi-bin/mapserv.exe?map=../htdocs/mydemo/main.map&layer=world_poly&mode=map.
  • layer - указывает слой для отрисовки по его имени. Название слоя указывается в map-файле в параметре NAME секции LAYER. Можно указывать несколько параметров layer в запросе. Тогда будут отрисованы эти указанные слои. При этом, конечно, они должны быть определены в map-файле.
  • mode - указывает CGI-программе создать изображение карты.

Более подробно о CGI-параметрах можно прочесть на странице MapServer CGI Controls. Теперь же подробнее остановимся на предназначении map-файла, а также рассмотрим подробнее его структуру. Map-файл - это основной конфигурационный файл доступа к пространственным данным, который также содержит стили, определяющие отображения картографических данных. Это обычный текстовый файл, который состоит из различных объектов, которые в свою очередь могут содержать свои собственные параметры.

Наш map-файл начинается с символа комментария #, после которого может следовать произвольный текст. Файл в самом начале должен обязательно содержать объект (блок) MAP, который заканчивается ключевым словом END. Этот объект описывает то, как будет отображаться карта, которую увидит пользователь. Объект MAP в нашем случае содержит следующие параметры:

  • EXTENT - определяет экстент для отображения (в единицах выходной карты). Например, если мы изменим значение на EXTENT 20 19 36 33, то будет отображена местность где-то в районе Египта.
  • SIZE - задает размеры отрисовываемого изображения.
  • IMAGECOLOR - позволяет указать цвет фона в формате RGB (каждая компонента может принимать значение от 0 до 255).

В объекте MAP можно объявлять LAYER-объекты (слои). Начиная с MapServer версии 5.0 количество слоев не ограничено. Каждый слой начинается с ключевого слова LAYER и заканчивается словом END. Мы указали у LAYER-объекта следующие параметры:

  • NAME - задает название слоя, которое можно указывать в качестве значения параметра layer в строке запроса к CGI-программе mapserv.exe.
  • DATA - задает путь к файлу с пространственными данными относительно map-файла, или же, если указан путь в параметре SHAPEPATH MAP-объекта, то относительно этого пути.
  • STATUS - определяет текущий статус слоя.
  • TYPE - Определяет, каким образом данные должны быть отрисованы. Значение не обязательно должно совпадать с типом геометрии, хранящимся в shape-файле. Например, shape-файл с полигонами может быть отрисован как точечный слой, но shape-файл с точечными объектами не может быть отрисован как полигональный слой. Здесь рулит здравый смысл.

В объекте LAYER можно объявлять CLASS-объекты. Начиная с MapServer версии 5.0 количество объектов CLASS не ограничено. Каждый класс начинается с ключевого слова CLASS и заканчивается словом END. В нашем файле указаны такие параметры:

  • NAME - название, которое будет использоваться при отображении в легенде для этого класса. Если не указано, то класс не будет показан в легенде.

Объект CLASS может содержать STYLE-объекты (стили). Начиная с MapServer версии 5.0 количество объектов STYLE не ограничено. Аналогично, стиль начинается словом STYLE и оканчивается словом END. В нашем случае стиль содержит только один параметр:

  • OUTLINECOLOR - Цвет в формате RGB для отрисовки контуров полигонов и определенных маркерных символов.

Ручная установка MapServer

Скачиваем архив с бинарниками последней версии с официального сайта www.ms4w.com, или же скачиваем ms4w_3.1.4.zip с моего сайта. Распаковываем архив в корень любого диска или раздела. После распаковки в корне раздела должна оказаться папка ms4w. Вначале, при необходимости, сконфигурируем порт. Для этого открываем конфигурационный файл Apache: \ms4w\Apache\conf\httpd.conf и находим строчку Listen 80. По умолчанию указан порт 80. Можно указать любой другой свободный порт и сохраняем изменения в файле. Далее, выполняем пакетный файл \ms4w\apache-install.bat. Он установит веб-сервер Apache как службу и запустит ее. Соответсвенно файл \ms4w\apache-uninstall.bat останавливает и удаляет эту службу. Дополнительно можно запустить файл \ms4w\setenv.bat, который добавить в переменную окружения PATH некоторые пути к своим каталогам. (Данный шаг необходим, если вы планируете запускать различные утилиты из каталога \ms4w\tools такие как, gdal/ogr, например.) После того как вы выполнили данные шаги ваш MapServer уже готов к работе и можете проверить его работоспособность, как было указано выше (при описании установки с помощью инсталлятора). Все шаги по настройке отображения карты были описаны выше.

На данном этапе пока все. В будущих статьях о MapServer я планирую настроить отрисовку карты из разных файлов (слоев), поэкспериментировать со стилями, а также настроить отображение пространственных данных из СУБД MS SQL.

Ссылки для загрузки: