Pull to refresh

MapServer -> Google Maps

Reading time4 min
Views7.2K
От автора
Эта статья-заготовка для другой, большей статьи, но публикуется впервые. Она, возможно, несколько сложновата для восприятия для специалиста не знакомого с MapServer и цифровой картографией, постараюсь этот пробел восполнить в дальнейшем.

Задача:
Демонстрация пользовательского набора пространственных данных (слоя) поставляемых с помощью сервера WMS MapServer на картографической основе Google Maps с использованием Google Maps API и чистый javascript.

В отличие OpenLayers, специально предназначенного на работу с данными получаемых с других серверов, программный интерфейс (API) к Google Maps по умолчанию не поддерживает работу с WMS слоями, что очень неудобно. Так же, Google Maps не предоставляет возможности использовать свои данные через WMS. К счастью, есть способ «научить» API Google Maps работать с WMS слоями, например поставляемыми с помощью MapServer.

Далее мы рассматриваем реализацию такого интерфейса простейшими средствами, предполагается, что читатель имеет представление о добавлении Google Maps на страницы сайта и создании серверов WMS с помощью MapServer. Если нет — буду рад снабдить читателя подробными инструкциями о том и о другом на русском языке написанных мною.


Определения:
В любом деле хорошо начать с определений имеющих ключевой характер для данной статьи.

MapServer — свободная среда разработки картографических интернет-приложений. MapServer не является полноценной ГИС. Главная задача MapServer — рендеринг пространственных данных (векторных и растровых) для веб. Помимо всего прочего, MapServer может выступать в роли сервера WMS.

Google Maps — Картографический сервис компании Google, предоставляющий доступ к пространственным данным хранящимся на серверах Google с помощью инструментария разработчика Google Maps API, допускает отображение пользовательских данных.

WMS — картографический интернет-сервис (Web Mapping Service), определяющий параметры запроса и предоставления картографической (пространственной) информации в среде Интернет в виде графического изображения. Также описывает условия получения и предоставления информации о содержимом карты (например, свойства объекта в определенном месте на карте) и характеризует условия получения и предоставления информации о возможностях сервера по представлению различных типов картографической информации.

Система координат — набор правил определяющих положение объектов в пространстве в одном и более измерениях. Распространенные системы координат — географические и прямоугольные (спроецированные).

Практика
Итак, разберем как:
  1. 1. Реализовать доступ к WMS в Google Maps
  2. 2. Добавить систему координат сервиса Google Maps в Proj
  3. 3. Настроить MapServer

1. Реализация доступ к WMS в Google Maps
Трюк с наложением слоя WMS состоит из двух частей. Создадим новый слой типа GTileLayer и GCopyrightCollection, обычно используемый для пользовательских изображений, таких как копирайты. Как видно, в примере, одним из главных параметров, передаваемых этому слою является адрес нашего сервиса WMS, созданного заранее.

var tile= new GTileLayer(new GCopyrightCollection(""),1,17);
tile.myLayers='WMS';
tile.myFormat='image/png';
tile.myBaseURL='http://gis-lab.info/cgi-bin/wmsworld?';
tile.getTileUrl=CustomGetTileUrl;


В этом примере используется реальный сервер WMS, который можешь попробовать и Ты, Читатель.

После указания некоторых дополнительных параметров, URL каждого фрагмента слоя с помощью фукнции CustomGetTileUrl. Эта функция содержится в специальной программе на javascript, созданной John Deck.

Этот скрипт предназначен для формирования с помощью javascript специальных запросов к серверам WMS с учетом системы координат, необходимой для правильного показа данных в Google Maps. Взяв из параметра tile.myBaseURL адрес сервера WMS, скрипт берет из него тайлы размером 256х256 пиксел и создавая для каждого GTileLayer накладывает их на основу Google Maps.

Пример одного из тайлов нашего тестового сервиса WMS:

image

Еще одна важная функция, которую выполняет скрипт — согласование систем координат сервера WMS и Google Maps, каждый тайл возвращается в нужной GM системе.

На этом клиентская (браузерная) часть закончена, переходим к махинациям на сервере.

2. Добавить систему координат сервиса Google Maps в Proj
Чтобы MapServer мог возвратить данные в системе координат требуемой GM, необходимо ему ее прописать. Системы координат MapServer хранятся в файле epsg и управляются незаменимой программой любого картографа, используемой в сотнях других проектах — PROJ. Поэтому, идем например сюда: /usr/local/share/proj/epsg

И добавляем в конец файла следующее описание:
# Google Mercator
<54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0
+ellps=WGS84 +datum=WGS84 +units=m no_defs <>


3. Настроить MapServer
Повторюсь, предполагается, что сервис WMS уже настроен и работает, нам надо лишь добавить в Capabilities вывод сервиса в нужной нам системе координат, обозначаемой теперь магическим кодом 54004. Для этого идем в наш map-файл, находим описание LAYER и добавляем новый код:

LAYER
....
METADATA
wms_title "world"
wms_abstract "world test"
wms_srs "EPSG:4326 EPSG:54004"
wms_include_items "all"
END
END


Наслаждаемся результатом, здесь, поверх основы Google Maps наложен контент сервиса WMS предоставляющего доступ к линейному слою границ стран, отрисованных красным цветом.

image

Примечание: Статья еще не опубликована на GIS-Lab в открытую и будет опубликована через несколько дней после публикации здесь, на хабре.

Обновление 05.01.2009: Полную версию статьи, содержащую много интересных дополнительных, не жизненно важных для реализации деталей, можно найти по адресу: http://gis-lab.info/qa/ms-gm.html.
Tags:
Hubs:
+9
Comments6

Articles