От автора
Эта статья-заготовка для другой, большей статьи, но публикуется впервые. Она, возможно, несколько сложновата для восприятия для специалиста не знакомого с 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. Реализация доступ к WMS в Google Maps
Трюк с наложением слоя WMS состоит из двух частей. Создадим новый слой типа GTileLayer и GCopyrightCollection, обычно используемый для пользовательских изображений, таких как копирайты. Как видно, в примере, одним из главных параметров, передаваемых этому слою является адрес нашего сервиса WMS, созданного заранее.
В этом примере используется реальный сервер WMS, который можешь попробовать и Ты, Читатель.
После указания некоторых дополнительных параметров, URL каждого фрагмента слоя с помощью фукнции CustomGetTileUrl. Эта функция содержится в специальной программе на javascript, созданной John Deck.
Этот скрипт предназначен для формирования с помощью javascript специальных запросов к серверам WMS с учетом системы координат, необходимой для правильного показа данных в Google Maps. Взяв из параметра tile.myBaseURL адрес сервера WMS, скрипт берет из него тайлы размером 256х256 пиксел и создавая для каждого GTileLayer накладывает их на основу Google Maps.
Пример одного из тайлов нашего тестового сервиса WMS:

Еще одна важная функция, которую выполняет скрипт — согласование систем координат сервера WMS и Google Maps, каждый тайл возвращается в нужной GM системе.
На этом клиентская (браузерная) часть закончена, переходим к махинациям на сервере.
2. Добавить систему координат сервиса Google Maps в Proj
Чтобы MapServer мог возвратить данные в системе координат требуемой GM, необходимо ему ее прописать. Системы координат MapServer хранятся в файле epsg и управляются незаменимой программой любого картографа, используемой в сотнях других проектах — PROJ. Поэтому, идем например сюда: /usr/local/share/proj/epsg
И добавляем в конец файла следующее описание:
3. Настроить MapServer
Повторюсь, предполагается, что сервис WMS уже настроен и работает, нам надо лишь добавить в Capabilities вывод сервиса в нужной нам системе координат, обозначаемой теперь магическим кодом 54004. Для этого идем в наш map-файл, находим описание LAYER и добавляем новый код:
Наслаждаемся результатом, здесь, поверх основы Google Maps наложен контент сервиса WMS предоставляющего доступ к линейному слою границ стран, отрисованных красным цветом.

Примечание: Статья еще не опубликована на GIS-Lab в открытую и будет опубликована через несколько дней после публикации здесь, на хабре.
Обновление 05.01.2009: Полную версию статьи, содержащую много интересных дополнительных, не жизненно важных для реализации деталей, можно найти по адресу: http://gis-lab.info/qa/ms-gm.html.
Эта статья-заготовка для другой, большей статьи, но публикуется впервые. Она, возможно, несколько сложновата для восприятия для специалиста не знакомого с 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. Реализовать доступ к WMS в Google Maps
- 2. Добавить систему координат сервиса Google Maps в Proj
- 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:

Еще одна важная функция, которую выполняет скрипт — согласование систем координат сервера 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 предоставляющего доступ к линейному слою границ стран, отрисованных красным цветом.

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