Картографические проекции.

В этой главе мы предполагаем, что вы знаете, что такое картографическая проекция и для чего она нужна, и коснёмся лишь использования её в GeoMod. Вы можете ознакомиться с дополнительным материалом по картографическим проекциям.
Для расчёта картографических проекций используется библиотека PROJ4. Эта библиотека считается стандартом де-факто для многих ГИС систем. В частности она используется в ГИС ArcInfo компании ESRI.
Описание всех проекций находятся в файле projection.xml в каталоге программы GeoMod. Этот файл содержит список всех стандартных картографических проекций, и обычно нет необходимости редактировать вручную. Редактировать его приходиться только в том случае, если требуется вывести искусственную проекцию. Отредактировать файл можно любым XML редактором, который понимает кодировку UTF-8. Например Notepad++. XML структура файла такова:
 
<category caption="Universal Transverse Mercator (WGS 84)" >
    <item prj_id="32601" caption="UTM zone 1N" >
        <prj4 name="val" params="+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs" />
    </item>
   <item prj_id="32602" caption="UTM zone 2N" >
        <prj4 name="val" params="+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs" />
   </item>
...
</category>
 
Ветка category описывает категорию однотипных проекций. Атрибут caption задаёт заголовок категории. Категории отображаются в диалоге проекций в порядке следования их в файле. Подветка item описывает проекцию внутри категории. Атрибут caption задаёт заголовок проекции. Также опционально может присутствовать атрибут prj_id. Он задаёт уникальный идентификатор проекции. Значения prj_id должны быть уникальны в пределах файла. Значение идентификатора соответствует EPSG кодам для стандартных проекций. Это значение общепринято для разных ГИС, даже для тех, расчёт проекций которых не основан на использовании библиотеки PROJ4. Например MapInfo хотя в явном виде и не полагается на значение идентификатора, всё же его содержит в своём файле описания проекций MAPINFOW.PRJ:
"UTM Zone 1, Northern Hemisphere (WGS 84)\p32601", 8, 104, 7, -177, 0, 0.9996, 500000, 0
Наличие такого идентификатора позволяет избежать сложного сопоставления параметров при переходе от описания проекции в одном формате к формату PROJ4.
Следующая подветка имеет вид:
<prj4 name="val" params="<описание проекции>" />
Атрибут params содержит описание проекции в формате PROJ4.
По соглашению пользовательские проекции добавляются в категорию Пользовательские в конце файла. Для того чтобы использовать новые проекции, необходимо перезапустить редактор GeoMod.
 
Следует помнить, что большинство проекций создаются для определённой территории. Исключение составляют лишь проекции, основанные на широте/долготе. За пределами этой территории проекция даёт большие искажения либо вообще математически не определна.
На рисунке карта Мира и меридианная сетка в проекции Logitude\Latitude.
 
Эта же карта только в проекции World Mercator. Проекция World Mercator не определена вблизи северного и южного полюса. Это хорошо видно по рисунку.
 
Поэтому далеко не всегда возможно выполнить пересчёт из одной проекции в другую. Также необходимо помнить, что любой пересчёт неизбежно вносит искажения в координаты объектов. Эти искажения не играют никакой роли при отображении слоёв в разных проекциях. Также ими можно пренебречь при однократном пересчёте данных. Однако многократный пересчёт из одной проекции в другую и обратно может внести существенную систематическую ошибку.
 
Для небольших территорий (город или область) используют "плоские" проекции. Основное достоинство таких проекций в том, что её координатами можно оперировать также как в декартовой системе координат. Т.е. рассчитывать расстояния и площадь. Конечно, такие проекции также вносят небольшие искажения. Большинство таких проекций основано на проекции Transverse Mercator. Наиболее распространённые виды у нас это UTM WGS84 (Universal Transverse Mercator с датумом WGS84) и традиционная для постсоветского пространства Pulkovo 1942(она же Gauss-Kruger). Обе проекции разделены на меридианные зоны по 3 либо 6 градусов. Зону можно использовать по всей широте. Для UTM зоны разделяются на южные и северные. Как узнать какая зона для вашей территории? По центральному меридиану. Смотрим описание проекции:
      <item prj_id="28406" caption="Gauss-Kruger zone 6" >
          <prj4 name="val" params="+proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs" />
      </item>
lon_0=33 означает, что центральный меридиан 33 градуса. Так как сетка 6 градусная, то данную проекцию можно использовать от 30 до36 градусов восточной долготы.
 
Существует специальная проекция в GeoMod. Так называемая проекция по умолчанию. Она назначается в тех случаях, когда таблице не назначена проекция явно. Она же назначается новому окну карты. Физически проекции по умолчанию соответствует проекция World Mercator.
 
В GeoMod все векторные объекты одной таблицы находятся в одной проекции. Одни источники данных хранит информацию о проекции (такие как TAB и MIF), другие не хранят (такие как SHP, DXF, DGN, PostgreSQL). Для тех таблиц, которые не имеют информации о проекции, проекцию необходимо назначать вручную. Сделать это можно в диалоге настройки параметров слоя, нажав на кнопку Проекция.
Для растровых данных проекция назначается каждой картинке, а не таблице.
 
Окно карты также имеет проекцию. Если это необходимо данные пересчитываются в проекцию окна перед отображением. Вы можете изменить проекцию окна на необходимую. Изменение проекции окна не изменяет проекции слоёв и не изменяет их данные. Для того чтобы изменить проекцию окна карты нажмите на пункт Вид\Проекция главного меню программы.
 
 
Для чего бы вы не изменяли проекцию, диалог выбора проекции выглядит всегда одинаково.
 
Выберите категорию, потом выберите конкретную проекцию в этой категории. Нажмите OK.  
В том случае, если такой проекции нет в списке проекций или это проекция по умолчанию появляется текстовое поле Параметры. По значению этого поля можно судить о проекции (см. документацию к PROJ4). Также эту строку можно использовать для добавления этой проекции к списку проекций.