Местная-географическая СК.mbx

(С) мазуров Дмитрий

Примечание: В названии и далее в тексте "СК" означает "система координат".

				Введение.
 
	Программа переводит карты из местной в географическую ск и обратно. При этом считается, что координаты в географической проекции могут быть получены из координат в местной ск поворотом вокруг начала местных координат с последующим параллельным сдвигом, т.е. аффинным преобразованием. Соответственно обратное преобразование (гео-> местная ск) заключается в обратном сдвиге и последующем обратном повороте.
Пусть (A;B) - местные координаты, (X;Y) - географические, (X0;Y0) - геокоординаты начала отсчета местной ск (эта же пара чисел является сдвигом), Ф - угол разворота местной ск относительно географической (он же - угол поворота). Тогда имеем такие формулы перехода:

Местная -> географическая:

X= X0 + A*cos(Ф) - B*sin(Ф)
Y= Y0 + A*sin(Ф) + B*cos(Ф)

Географическая -> местная:

A=  (X-X0)*cos(Ф) + (Y-Y0)*sin(Ф)
B= -(X-X0)*sin(Ф) + (Y-Y0)*cos(Ф)

ВНИМАНИЕ! Не забывайте, что в MapInfo (и в данной программе тоже) горизонтальная координата считается первой, а вертикальная - второй. Т.е. координаты записываются так: (долгота, широта). В геодезии - наоборот. Если у Вас есть ключ перехода для геодезических координат, то для использования его в программе нужно внести следующие корректировки: значения сдвига по X и по Y нужно поменять местами, а угол заменить на обратный (т.е. на минус угол). Также не забывайте о том, что в MapInfo в координатах пишутся номера зон. Вернее сказать, к нормальным координатам добавляются координаты центра зоны. К примеру, центр 13 зоны СК 42 года имеет координаты (13 500 000; 0), поэтому все долготы в этой зоне получают приращение 13 500 000, широты не меняются. В СК 63 года не только долгота, но и широта имеет приращение (что-нибудь вроде 7 800 000).

				Порядок работы.

	Запускаем программу, в меню "Программы" появляется пункт "Местная-географическая СК...", который открывает главный диалог.

				Главный диалог.

Переводимые таблицы - список таблиц подлежащих переводу. Кнопка "..." открывает список всех открытых таблиц, из которого и нужно выбрать. Если выделить таблицу в списке переводимых таблиц, под списком можно увидеть название проекции и предложение CoordSys, задающее эту проекцию. Обратите внимание, что таблицы в этом списке не будут изменены или удалены в процессе перевода.

Географическая система координат - задаем проекцию географической СК. Можно воспользоваться кнопкой "..." для показа стандартного диалога выбора проекции, а можно просто вписать (вставить) предложение CoordSys в эту графу. Под графой отображается название проекции. Если вы изменили текст графы вручную, нажмите кнопку "<-обновить" для отображения нового имени проекции.

Местная система координат:

Название - название местной системы координат. Служит для того, чтобы можно было легко определить используемый в данный момент ключ перехода. Отсюда правило: разным ключам давайте разные названия. При сохранении ключа перехода это название будет предложено в качестве имени файла. При переводе в местную систему координат, результат будет помещен в папку с именем, равным названию местной СК.

Пределы координат - задаем пределы значений координат в местной СК. Если Вы переведете карту в местную систему координат, ее новой проекцией будет План-схема с указанными пределами. Эта же проекция используется при чтении координат точек, указанных на карте (см. Вычисление ключа перехода по образам двух точек).

Дальше задается непосредственно ключ перехода, о котором я так длинно писал в начале.

Начало отсчета местной СК в географической СК (=сдвиг) - задаем сдвиг.

Угол разворота местной СК относительно географической (=угол поворота) - задаем угол в градусах-минутах-секундах. И градусы, и минуты, и секунды могут быть вписаны как дробные числа. Если угол отрицательный, то знак минус нужно писать перед градусами. Например, если нужный угол поворота составляет (-25.565 градусов), нужно ввести в графу "град." значение "-25.565", а графы "мин." и "сек." можно оставить пустыми, или забить туда нули. При следующем открытии диалога (или после сохранения) угол будет отображаться в нормализованной форме: угол будет приведен к положительному, градусы и минуты будут целыми, секунды могут быть и дробными. Угол из нашего примера будет выглядеть так: 334 град. 26 мин. 6 сек.

Вычислить ключ перехода по образам двух точек - открывает диалог "Вычисление ключа перехода" (см. ниже).

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

Загрузить... - загружаем параметры из файла.

ОК - параметры сохраняются в ключ "По умолчанию" и начинается процесс перевода таблиц. В окошке сообщений показывается номер и имя обрабатываемого в данный момент слоя. Если таблицы большие, ждать придется дооооолго. Для каждой таблицы из списка переводимых таблиц, в папке, где хранится эта самая таблица, создается подпапка, в которой создается таблица-результат (с тем же именем, что и у исходной таблицы). А называется эта подпапочка по имени целевой проекции. Если переводите в местную СК, имя подпапки берется из графы "Название" группы "Местная СК" главного диалога, а если в географическую, подпапка именуется названием географической проекции (например, "СК-1963, район F, зона 1" или "план-схема (метры)"). При переводе все исходные таблицы закрываются, а все результирующие открываются в одном окне карты.

Отмена - закрыть диалог без сохранения параметров.

		Диалог "Вычисление ключа перехода".

	Бывает так, что ключа в явном виде нет, зато хотя бы для нескольких точек известны координаты как в местной, так и в географической системе координат. Для вычисления ключа перехода достаточно двух точек. В означенном диалоге нужно забить координаты этих точек в обеих СК. Рядом с каждой парой координат есть магическая кнопка "...", позволяющая указать нужное расположение на карте. При этом диалоги временно закрываются, на панели кнопок появляется инструментальная кнопочка с крестом и сразу же активируется. Все, что от Вас требуется, это ткнуть в нужную точку на карте (со снэпом, разумеется). После этого диалоги появятся снова, а в соответствующей паре граф будет записано значение координат указанной на карте точки.

	ВНИМАНИЕ! Если при нажатии вышеописанной кнопки "..." вылазит постороннее диалоговое окно или происходит еще какое-то неожиданное событие, перезапустите программу. Эта проблема связана с возможным конфликтом назначаемых номеров команд и кнопок разных программ. Полностью решить эту проблему пока не удается, но благодаря использованию в данной программе случайного номера кнопки такой конфликт крайне маловероятен.

	Внизу диалога - стандартные кнопки "ОК" и "Отмена". По нажатию "ОК" диалог закрывается и в главном диалоге можно увидеть значение вычисленного ключа. "Отмена" - закрыть диалог, игнорируя все изменения. Обратите внимание, что параметры диалога "Вычисление ключа перехода" не сохраняются в файл по команде "ОК" этого же диалога. Они сохраняются только тогда, когда вы даете команду "ОК" или "Сохранить..." в главном диалоге. 

	Внизу диалога также имеется странная кнопка "Отложить пока". Ее действие такое: изменения в диалоге не отменяются, как при нажатии кнопки "Отмена", но и вычисление ключа, как при нажатии "ОК", тоже не производится.

