Добавление пользовательских проекций в QGIS и UMN Mapserver
Описан процесс добавления пользовательских проекций в QGIS и UMN Mapserver для коррекной работы с WMS-сервисом
1. Введение
На пост советском пространстве сохранилась "добрая" традиция вести карты населенных пунктов в так назваемых "местных системах координат" (МСК). Данные системы координат представляют собой, как правило, искаженную СК42 (обычно сдвинутую на константы по x и у). В местных системах координат работаю земельные и архитектурные отделы городов и соответвтвенно весь картографический материал требуют сдавать именно в этих системах. Западные ГИС об этих системах координат не имеют никакого понятия (кстати координаты в МСК сами по себе не являются секретными на ключи перехода в СК42 засекречены). И вот в процессе реализации ГИС для одного из малых городов Украины мы столкнулись с проблемой задания пользовательской системы координат (описывающей МСК для данного города) для WMS-сервиса на базе UMN MapServer и QGIS, которы должен обращаться к этому сервису.
2. Проблема
Попытка описать параметры МСК в разделе PROJECTION map-файла ни к чему не привела WMS-сервис это описание игнорировал. Обращение к официальной документации вскрыло проблему - WMS-сервис требует задания проекции с указанием ее кода в proj4, т.е. описания вида EPSG:4326. В свою очередь QGIS при загрузке WMS-сервиса требует указать проекцию для него.
3. Решение
Немного погуглив выясняем что описания прокций proj4 для UMN MapServer хранятся в обычном текстовом файле /usr/local/share/proj/epsg (для ОС FreeBSD в нашем случае). Добавляем в конец файла описание для нашей МСК (параметры изменены в целях соблюдения вышеупомянутой секретности, любое совпадение с реальной МСК является случайным :) )
#MSK for N town <99999> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=-11111 +y_0=-1111111 +ellps=krass +units=m +no_defs
Число в угловых скобках это код проекции в системе EPSG (наша МСК к этой системе не имеет никакого отношения но надо же ее куда-то записать). Главное условие чтобы этот код не совпадал с кодами уже существующих проекций.
Далее в нашем map-файле указываем вновь созданную проецию
PROJECTION "init=epsg:99999" END
Теперь наш WMS-сервис уже не ругается на отсутствие проеции, но QGIS ничего о ней не знает и, соответственно, не дает добавить сервис в проект. Отучим его от этого. Описания проекций QGIS хранятся уже не в текстовом файле, а в базе данных SQLite /usr/share/qgis/resources/srs.db. Голым тестовым редактором его уже не возьмешь, но прогресс не стот на месте, браузер Firefox имеет замечательный плагин SQLite Manager. Устанавливаем его и открываем базу данных проекций QGIS. Верная Ubuntu бдительно охраняет хозяйское добро и не дает просто так менять файлы в системе поэтому предварительно даем разрешения своему пользователь на доступ к каталогу и файлу с проекциями. И, как пишут умудренные опытом (который сын ошибок трудных :) ), не забудте сделать резервную копию. В базе присутствует таблица tbl_srs в которую и нужно добавть строчку с описанием МСК
Код проекции должен совпадать с ранее добавленным в UMN MapServer. Теперь QGIS без проблем подхватывает проекцию WMS-сервиса и, соответственно, мы видим координаты в МСК.