Создание WMS-сервиса с помощью Mapserver
О том, как из просто веб-карты сделать WMS-сервис. |
Данная статья, помимо перевода соответствующего пункта документации к программному пакету Mapserver, также ставит целью предоставить конкретный, работающий пример, иллюстрирующий создание WMS сервиса с помощью Mapserver и его дальнейшее использование в ПО умеещем работать с такими сервисами, в нашем случае мы иллюстрируем работу с созданным сервисом в QGIS, ArcGIS и ArcGIS Explorer.
В статье подразумевается, что вы уже умеете создавать интернет-карты с помощью Mapserver, в обратном случае, рекомендуем сначала ознакомиться с описанием для начинающих. Подразумевается, что у читателя уже есть собранный и работающий проект Mapserver. Дальнейшее описание показывает, как из просто интернет-карты сделать сервис отвечающий спецификации WMS 1.1.1, позволяющий работать с своими данными в клиентском ПО ГИС. Для создания подобного сервиса необходим Mapserver версии 3.5 и выше.
Теория
WMS (или Web Map Server - Сервер картографической информации) помимо просто отображения инфромации с помощью браузера, также позволяет пользователю использовать свои данные в ПО ГИС, в пользовательской ГИС таким образом может быть загружены данные из нескольких WMS, дополнительно к ним могут быть добавлены данные самого пользователя. Mapserver поддеживает спецификацию WMS версии 1.1.1, которая поддерживается Open Geospatial Consortium (OGC).
Проверка поддержки WMS в Mapserver
Перед тем как начать работу необходимо убедиться в том, что ваша версия Mapserver поддерживает WMS, для этого необходимо выполнить следующую команду в Windows-версии Mapserver:
C:apachecgi-bin> mapserv -v |
или такую команду в Unix-версии, находясь в директории cgi-bin веб-сервера:
Если в результате выполнения команд, в описании Mapserver содержится подстрока SUPPORTS=WMS_SERVER, значит WMS поддерживается. Примерное содержание результата выполнения этих команд такое:
MapServer version 4.6.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG |
Адаптация map-файла для поддержки WMS
Подразумевается, что некая веб-карта уже создана и работает, например такая. Содержимое соответствующего map-файла для этой карты очень простое:
MAP
IMAGETYPE PNG
EXTENT -97.238976 41.619778 -82.122902 49.385620
SIZE 400 300
SHAPEPATH "/usr/local/www/website/data/map/"
IMAGECOLOR 255 255 255
WEB
TEMPLATE "template.html"
IMAGEPATH "/usr/local/www/website/data/map/tmp/"
IMAGEURL "/tmp/"
END
LAYER
NAME states_poly
DATA states_ugl
STATUS OFF
TYPE POLYGON
CLASSITEM "CLASS"
CLASS
NAME 'States'
EXPRESSION 'land' # Показываются только полигоны, где "CLASS" = 'land'.
STYLE
COLOR 232 232 232
END
END
CLASS
NAME 'Water'
EXPRESSION 'water' # Показываются только полигоны, где CLASS" = 'water'.
STYLE
COLOR 198 198 255
END
END
END
LAYER
NAME states_line
DATA states_ugl
STATUS OFF
TYPE LINE
CLASSITEM "CLASS"
CLASS
NAME 'State Boundary'
EXPRESSION 'land'
STYLE
COLOR 32 32 32
END
END
END
END |
Для адаптации нашей карты как WMS сервиса, потребуются следующие изменения.
1. Необходимо задать тэг NAME для карты:
MAP
NAME "WMS"
STATUS ON
IMAGETYPE PNG
... |
2. В группе WEB необходимо создать подгруппу METADATA и задать в ней тэги:
- wms_title - название WMS сервиса
- wms_abstract - краткое описание WMS сервиса
- wms_onlineresource - полная ссылка (URL), которая будет использоваться, чтобы использовать создаваемый WMS в клиентском ПО, ссылка должна оканчиваться на знак &;
- wms_srs - общая система координат проекта (карты), задать описание системы координат можно разными способами, в данном случае выбрана просто ссылка на географическую систему координат WGS84 по классификатору EPSG;
...
WEB
TEMPLATE "template.html"
IMAGEPATH "/usr/local/www/website/data/tmp/"
IMAGEURL "/tmp/"
METADATA
wms_title "GIS-LAB Demo"
wms_abstract "This is the WMS demo from GIS-Lab"
wms_onlineresource "http://gis-lab.info/cgi-bin/mapserv?map=/usr/local/www/website/data/map/wms.map&"
wms_srs "EPSG:4326"
END
END
... |
Если слои карты имеют систему координат отличную от системы координат карты, то она должна быть обозначена для каждого слоя. В обратном случае считается, что система координат слоя равна системе координат карты в целом. Если систему координат слоя задать все же необходимо, делается это так:
LAYER # States line layer begins here
...
METADATA
wms_title "Countries 2"
wms_abstract "Countries 2 test"
wms_srs "EPSG:4326"
END
... |
3. Необходимо задать группу тэгов PROJECTION карты
...
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
... |
Точно также как и параметр wms_srs в группе METADATA наследуются и описания проекций слоя и карты в группе PROJECTION. Спецификацией WMS 1.1.1 рекомендуется указывать описание системы координат отдельных слоев, даже если они совпадают друг с другом и с картой целиком. Также как и для самой карты, PROJECTION указывается для каждого слоя и в метаданных слоя.
...
LAYER
...
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
...
METADATA
wms_title "Countries 2"
wms_abstract "Countries 2 test"
wms_srs "EPSG:4326"
END
... |
4. Подобно группе WEB, для каждого слоя также надо создать подгруппу METADATA, где указать тэги wms_title и wms_abstract:
LAYER
...
METADATA
wms_title "Countries 2"
wms_abstract "Countries 2 test"
END
... |
5. Добавление возможности запросов к слоям карты
Для того, чтобы можно было получить информацию о объектах слоев карты, необходимо слелать две модификации.
В секцию METADATA самой карты нужно добавить
- wms_featureinfoformat - тип возращаемых данных, обычно используется text/plain, можно также использовать text/html и text/gml;
- wms_getfeatureinfo - полная ссылка (URL) на сервис;
WEB
...
METADATA
...
wms_onlineresource "http://gis-lab.info/cgi-bin/mapserv?map=/usr/local/www/website/map/wms.map&"
wms_getfeatureinfo "http://gis-lab.info/cgi-bin/mapserv?map=/usr/local/www/website/map/wms.map&"
wms_featureinfoformat "text/plain"
END
END
Добавить тэг TEMPLATE сразу после описания типа слоя TYPE, а так же тэга wms_include_items, содержащего перечень полей из которых можно брать информацию в METADATA каждого слоя. Значение "all" этого тэга означает, что будут показываться все атрибуты.
LAYER
...
TYPE POLYGON
TEMPLATE "dummy"
...
METADATA
wms_title "Countries 1"
wms_abstract "Countries 1 test"
wms_srs "EPSG:4326"
wms_include_items "all"
END
... |
После этого в ПО ГИС можно будет пользоваться инструментами типа identify для просмотра атрибутивной информации по каждому объекту слоя.
Проверка WMS
Проверим созданный сервис с помощью специальной команды, ввести которую нужно в адресную строку браузера:
http://gis-lab.info/cgi-bin/wmstest?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities
Результатом выполнения этой команды является файл в формате XML, представляющий из себя ответ сервера содержащий описание сервиса. Этот файл также содержит полезную информацию в секциях <!--Warning...-->, где описываются ошибки, возникшие при чтении файла map и не соответствующие спецификации WMS 1.1.1.
Результирующий map-файл, после адамтации, должен выглядеть следующим образом:
MAP
NAME "WMS"
STATUS ON
IMAGETYPE PNG
EXTENT -97.238976 41.619778 -82.122902 49.385620
SIZE 400 300
SHAPEPATH "/usr/local/www/gis-lab/data/programs/mapserver/wmstest/"
UNITS DD
IMAGECOLOR 255 255 255
WEB
TEMPLATE "template.html"
IMAGEPATH "/usr/local/www/gis-lab/data/tmp/"
IMAGEURL "/tmp/"
METADATA
wms_title "GIS-LAB Demo"
wms_abstract "This is the WMS demo from GIS-Lab"
wms_onlineresource "http://gis-lab.info/cgi-bin/mapserv?map=/path/to/wmstest/wms.map&"
wms_srs "EPSG:4326"
wms_getfeatureinfo "http://gis-lab.info/cgi-bin/mapserv?map=/path/to/wmstest/wms.map&"
wms_featureinfoformat "text/plain"
END
END
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
LAYER # States polygon layer begins here
NAME states_poly
DATA states_ugl
STATUS ON
TYPE POLYGON
TEMPLATE "dummy"
CLASSITEM "CLASS"
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
CLASS
NAME "States"
EXPRESSION "land" # Only polygons where "CLASS" = "land" will be drawn.
STYLE
COLOR 232 232 232
END
END
CLASS
NAME "Water"
EXPRESSION "water" # Only polygons where "CLASS" = "water" will be drawn.
STYLE
COLOR 198 198 255
END
END
METADATA
wms_title "Countries 1"
wms_abstract "Countries 1 test"
wms_srs "EPSG:4326"
wms_include_items "all"
END
END
LAYER
NAME states_line
DATA states_ugl
STATUS ON
TYPE LINE
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
CLASSITEM "CLASS"
CLASS
NAME "State Boundary"
EXPRESSION "land"
STYLE
COLOR 32 32 32
END
END
METADATA
wms_title "Countries 2"
wms_abstract "Countries 2 test"
wms_srs "EPSG:4326"
END
END
END
Работа с WMS в ПО ГИС - Практика
Мы иллюстрируем работу с созданным сервисом в QGIS, ArcGIS и ArcGIS Explorer, в большинстве современных ГИС есть средства загрузки и работы с такими слоями.
QGIS
WMS-слой в QGIS подключается с помощью Layer\Add WMS layer. В появившемся окне нужно нажать на кнопку New (новый) и ввести параметры нового соединения. При этом URL должен быть равен значению параметра wms_onlineresource, включая знак "&" в конце строки.
После установки соединения необходимо выбрать и слои для загрузки.

ArcGIS
В ArcGIS загрузка WMS-слоев производится через добавление темы. После чего в выпадающем списке (Look in) нужно выбрать GIS Servers, нажать на WMS Servers и ввести URL WMS.
После ввода URL нужно нажать на Get Layers и выбрать загружаемые слои.

ArcGIS Explorer
Подключение WMS-слоев, как и любых других данных в ArcGIS Explorer осуществляется через меню File\Open..., в котором нужно переключиться на раздел Servers и выбрать кнопку WMS. В появившееся окно нужно ввести адрес WMS-сервиса в интернет.
После нажатия на Ok, будет предложено также выбрать некоторые параметры отображения, такие как растровое разрешение, отображаемые слои и зумирование после загрузки на загруженные слои.

Так как WMS выдает данные в растровом формате, на мелких масштабах может быть заметна пикселизация.
Обсудить в форуме (Комментариев - 1)
См. также:
Начало работы с MapServer >>>
Создание картографических сервисов с использованием MapServer. Введение >>> |
Последнее обновление: March 29 2008 (Наверх) |