О том, как из просто веб-карты сделать WMS-сервис.
Обсудить в форуме Комментариев 21
Данная статья, помимо перевода соответствующего пункта документации к программному пакету 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:
или такую команду в Unix-версии, находясь в директории cgi-bin веб-сервера:
Если в результате выполнения команд, в описании Mapserver содержится подстрока SUPPORTS=WMS_SERVER, значит WMS поддерживается. Примерное содержание результата выполнения этих команд такое:
Адаптация 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 и задать в ней тэги:
... 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 самой карты нужно добавить
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 для просмотра атрибутивной информации по каждому объекту слоя.
Проверим созданный сервис с помощью специальной команды, ввести которую нужно в адресную строку браузера:
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
Мы иллюстрируем работу с созданным сервисом в QGIS, ArcGIS и ArcGIS Explorer, в большинстве современных ГИС есть средства загрузки и работы с такими слоями.
WMS-слой в QGIS подключается с помощью Layer\Add WMS layer. В появившемся окне нужно нажать на кнопку New (новый) и ввести параметры нового соединения. При этом URL должен быть равен значению параметра wms_onlineresource, включая знак "&" в конце строки.
После установки соединения необходимо выбрать и слои для загрузки.
В ArcGIS загрузка WMS-слоев производится через добавление темы. После чего в выпадающем списке (Look in) нужно выбрать GIS Servers, нажать на WMS Servers и ввести URL WMS.
После ввода URL нужно нажать на Get Layers и выбрать загружаемые слои.
Подключение WMS-слоев, как и любых других данных в ArcGIS Explorer осуществляется через меню File\Open..., в котором нужно переключиться на раздел Servers и выбрать кнопку WMS. В появившееся окно нужно ввести адрес WMS-сервиса в интернет.
После нажатия на Ok, будет предложено также выбрать некоторые параметры отображения, такие как растровое разрешение, отображаемые слои и зумирование после загрузки на загруженные слои.
Так как WMS выдает данные в растровом формате, на мелких масштабах может быть заметна пикселизация.
Обсудить в форуме Комментариев 21
Последнее обновление: September 09 2021
Дата создания: 04.02.2008
Автор(ы): Максим Дубинин
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).