EN
Владимир Комиссаров
Владимир Комиссаров
9 subscribers

Привязка архивных карт: некоторые секреты

    В предыдущей статье  нашего "Практикума" я подробно рассказал о том, как привязать  трехверстную военную топографическую карту западной части Российской империи. Однако, та карта была специально выбрана, чтобы продемонстрировать на её примере выполнение всех необходимых шагов. Зачастую же, мы сталкиваемся с другой ситуацией: не все шаги можно выполнить, а часть - можно пропустить. Кроме того, в работе всегда могут встретиться определённого рода "подводные камни", которых надо постараться избежать. В этой статье мы рассмотрим пример такого рода и постараемся качественно привязать довоенную карту. Её пример можно найти и скачать по следующей ссылке.
      Шаг первый - выявление проекции и системы координат.
   С проекцией этих карт всё достаточно просто: они создавались в проекции Гаусса-Крюгера. Эта проекция является частным случаем поперечно-цилиндрической проекции (Transverse Mercator), а та, в свою очередь, имеется в наличии в подавляющем большинстве современных программ. 
   Немного хуже дело обстоит с системой координат. Известно, что эти карты создавались в СК-32, на эллипсоиде Бесселя, но "официальных", так сказать, общепризнанных параметров системы координат в литературе нет. Есть лишь одно интересное упоминание о систематической работе в этом направлении, где исследование касалось территории Украины и были вычислены параметры системы. Поэтому мы поступим точно так же, как и в предыдущей статье: постараемся вычислить параметры этой СК для имеющегося листа карты. 
   Поскольку, как и ранее, всю работу по привязке карты мы будем вести в программе Global Mapper, в первую очередь займёмся его настройкой. В этот раз настройка окажется более простой: так как в программе встроенный эллипсоид Бесселя уже имеется, нам достаточно дописать в файл custom_datums.txt одну строчку:
"Zero Bessel","ZRB","Bessel 1841",0.00000000000000000,0.00000000000000000,0.00000000000000000
   Тем самым мы создадим в программе новую систему координат, основанную на эллипсоиде Бесселя с нулевыми (на этом этапе работы) сдвигами относительно WGS84. Напомню, что файл custom_datums.txt должен находиться в рабочей папке программы, а эта папка указывается в пункте меню "Справка" - "О программе":
    Настройка координатных сеток у нас сведётся к тому, что для градусной сетки мы установим шаг в 5 минут, а для сетки "текущей проекции" (линейной) шаг в 1000 метров. Как мы увидим в дальнейшем, такие сетки позволят нам легко контролировать процесс привязки.
      Шаг второй, который мы делать не будем.
   Теперь пришло время поподробнее изучить материал, с которым нам предстоит работать. И вот тут нас будет подстерегать первый "подводный камень". Дело в том, что листы карт, созданных в проекции Гаусса-Крюгера не имеют прямоугольной рамки! Форма листа имеет сложный вид, напоминающий криволинейную трапецию. Поэтому такой полезный этап, как выравнивание растра по 4 точкам (например, в программе Spotlight Pro) нам придётся пропустить. 
   "А как же километровая сетка на карте?" - спросите вы. Ведь её линии также составляют правильный прямоугольник и можно попытаться выровнять растр по нему? 
   К сожалению, тут таится ещё один неприятный секрет. Внимательно рассмотрев наш растр, мы увидим, что он содержит те самые неустранимые дефекты, о которых я говорил в предыдущих статьях, причём двух видов: "смятость" исходного материала, очевидно по месту сгиба, и дефекты, оставшиеся после неточной склейки в графическом редакторе.
   Поэтому для выравнивания растра километровая сетка также не подойдёт и этот этап нам придётся пропустить. Исправлять возникшие неточности нам придётся "лобовым" способом: взяв как можно больше точек для привязки, благо, как мы увидим дальше, карта нам это позволит.     
       Шаг третий - оценка точности.
   Теперь мы можем заняться оценкой той точности, с которой нам предстоит работать. Как обычно,  будем различать точность исходного картографического материала (бумажной карты) и разрешение растра - её электронной копии. 
   Напомню, что на любом чертеже или карте нельзя обычными средствами ("циркулем и линейкой") измерить расстояние меньше 0,2 мм. Расстояние на местности, соответствующее этой величине называют предельной точностью масштаба карты.  Применительно к масштабу нашей карты-полукилометровки это составит 10 метров на местности. Разрешение же растра составляет 300 точек на дюйм (2,54 см), следовательно 1 пиксель карты соответствует 2,54/300 сантиметра на карте или около 5 метров на местности. В данном случае разрешение растра вдвое превышает предельную точность масштаба карты. Однако любая, даже самая тонкая линия на карте имеет толщину в 3-4 пикселя. Поэтому реальная точность, которую мы могли бы обеспечить и составит примерно 15-20 метров, что и соответствует предельному масштабу. Такой точности мы могли бы достичь, если бы не одно "но": упомянутые выше смятости листа и грубые "фотошопные" склейки. А они составляют уже несколько десятков метров. Конечно, как мы увидим ниже, некоторую часть таких дефектов удастся компенсировать, но в общем, следует ждать определённых ошибок близко к местам дефектов. По порядку величины они могут составить от 20 до 100 метров.
       Шаг четвёртый - определение точек привязки.
   На этом шаге мы определимся с точками привязки нашей карты. Здесь карты Генштаба дают нам очень хорошее преимущество, которым мы обязательно воспользуемся: наличие геодезической сетки на карте. На 500-метровке она проводится с шагом ровно в километр, а расстояния от начала отсчёта указаны на рамке карты. Поскольку программа Global Mapper умеет работать одновременно с точками привязки, заданными как в географических, так и в геодезических координатах, мы используем и градусную сетку карты, которую составляют её границы. Правда, у карты есть ещё один дефект, о котором я не сказал выше: отсутствие левого края листа. Но, при обилии других точек, годящихся для привязки, такой недостаток нам не страшен.
       Шаг пятый - привязка.
Теперь у нас всё готово к собственно привязке карты. Запустим Global Mapper и откроем в нём наш  растр.
   На вопрос программы, как нам следует поступить с открываемым растром нужно ответить, что мы хотим его скорректировать вручную. Тогда откроется окно корректировки (привязки) изображения:
   Теперь нам нужно указать программе необходимую проекцию и систему координат. Для того, чтобы продемонстрировать важность правильного выбора СК, мы сознательно совершим одну ошибку: укажем систему координат, основанную на эллипсоиде другого размера (Pulkovo). Для этого нажмём кнопку "Выбор проекции" и в открывшемся окне введём требуемые параметры проекции:
   Теперь всё готово для введения точек привязки. Находим на нашей карте первое пересечение линии широты с меридианом (это угол рамки нашей карты), увеличиваем его до нужного масштаба и проставляем первую точку. Точки ставим на примерные середины линий:
   В окошки ввода контрольной точки вводим её координаты в градусах и минутах через пробел (они обозначены на рамке карты). После нажатия кнопки "Добавить точки" наша контрольная точка появится в общей таблице точек внизу. Точно таким же образом введём координаты и остальных трёх точек, у которых на нашей карте помечены их географические координаты. Теперь мы можем сохранить нашу предварительную работу, для этого нужно нажать кнопку "ОК". Посмотрим, что у нас получилось:
   Видно, что вертикальные линии километровой сетки достаточно точно совпадают с нарисованными линиями на карте. А вот горизонтальные - сильно смещены. Это произошло из-за того, что при выборе системы координат был указан неверный эллипсоид: не тот, на котором строилась карта. Эту ошибку нам необходимо исправить. К сожалению, всю работу по вводу точек привязки придётся делать заново, только на этапе выбора СК нам нужно будет ввести систему координат "Zero Bessel" (её мы прописали в файле custom_datums.txt в самом начале работы).
  Снова введём все 4 точки с географическими координатами, как делали раньше и нажмём кнопку "ОК". Теперь видно, что достаточно хорошо совпадают все линии геодезической сетки. Кроме того, совпадает и градусная сетка, которая идёт по рамке карты.
   Если бы у нашей карты сохранилась левая часть с рамкой и не было бы сильных дефектов растра, в первом приближении мы могли бы удовлетвориться работой. Но, увы, левая часть карты ещё плохо привязана, что хорошо видно по несовпадению линий сетки с нарисованными на карте. Поэтому на следующем шаге мы займёмся расстановкой дополнительных точек привязки по километровой сетке. Точки будем расставлять с шагом примерно в 4-5 делений сетки (этого вполне достаточно). Процедура очень похожа на расстановку точек по градусной сетке, точки расставляем на пересечениях линий километровой сетки, а в качестве геодезических координат вводим значения, которые написаны на рамке карты (умножая их на 1000).
   После того, как мы введём около 30 точек, нам останется только оценить качество результата. Теперь все линии (километровые и градусные) совпадают с нарисованными на всей карте, за исключением небольшого участка в районе упомянутого выше дефекта "смятия". Эта ошибка так и останется неустранимой. К счастью, она касается лишь небольшого участка карты.
   Оценить качество проделанной работы можно двумя способами: описанным выше визуальным контролем по линиям сетки (градусной или линейной) и математически. Ранее мы не трогали настройки метода расчёта привязанного растра программой. Поэтому, с учётом того, что у нас имеется свыше 30 точек привязки, она автоматически выбирала триангуляционный метод восстановления и в колонке "Error" таблички контрольных точек стояли нули. Заменим его на полиномиальный метод восстановления (термин в русской версии программы неудачен, лучше называть его методом расчёта или пересчёта). 
   Мы можем убедиться, что максимальные ошибки при таком методе расчёта составляют около 18-20 пикселей,  а остальные в среднем равны 4-5 пикселей, следовательно, в самых "плохих" местах карты ошибка составляет около 80-100 метров, а в остальных - 15-20 метров, что лишь немного хуже оцененного выше предельного масштаба карты. 
   
       Шаг шестой - определение точек для коррекции датума.
   Если теперь загрузить на карту треки поездок и походов в этих краях, мы увидим, что в направлении "север-юг" они очень хорошо соответствуют объектам на карте. А вот в направлении "запад-восток" треки выглядят немного сдвинутыми относительно карты. Это происходит из-за того, что мы всё ещё используем систему координат с нулевыми параметрами сдвига, никак не соотносящуюся с системой координат треков (WGS84).
  Для того, чтобы использовать нашу карту для навигации нам нужно сделать ещё один важный шаг: вычислить параметры СК (её сдвиги). Воспользуемся алгоритмом, изложенным в предыдущей статье: вначале  определим те объекты на карте, современные координаты (в СК WGS84) которых известны и измерены с достаточной точностью, измерим эти координаты на привязанной нами карте и, наконец, имея два набора координат, с помощью программы Inverse Molodensky  рассчитаем параметры искомой СК. 
  Какие же объекты нам следует взять для дальнейших расчётов? Как и ранее, из рассмотрения следует сразу же исключить перекрёстки дорог (они не раз перепрокладывались, даже внутри населённых пунктов), мосты (обычно новый мост строится не на месте старого, а рядом, чтобы не прерывать дорожного сообщения), мельницы и прочие мелкие объекты (они, в подавляющем большинстве своём не сохранились). Остаются лишь здания церквей. Однако, подробное изучение листа карты показывает, что до настоящего времени "дожила" лишь одна церковь на листе (в Дровнино), координаты которой нам известны из современных измерений. К счастью, программа Inverse Molodensky позволяет одно ухищрение: несмотря на то, что формально она требует ввода координат трёх точек, можно обойтись и координатами одной, введя её во все три группы окон программы. Мы так и сделаем (предварительно переведя все координаты точек в секунды и введя в программу параметры эллипсоида Бесселя). Координаты точки церкви на карте мы определим, максимально увеличив карту и наведя на точку курсор. Эти координаты будут отображаться в нижнем правом углу программы.
   После нажатия кнопки "Calculate" мы сразу же получим необходимые величины сдвигов СК. Можно обратить внимание, что эти величины получились удивительно близкими к приведённым в статье, о которой упоминалось в самом начале нашего рассказа.
       Шаг седьмой - коррекция системы координат.
   Теперь полученные параметры нам нужно будет перенести в Global Mapper. Для этого нам нужно будет создать ещё одну систему координат, которая эти параметры учитывает. Вновь откроем файл custom_datums.txt, который мы создали на первом шаге и добавим в него строчку примерного вида:
"CRB","CRB","Bessel 1841",359.48000000000000000,144.91000000000000000,583.85000000000000000
   Нужно иметь в виду, что изменения файла custom_datums.txt нужно делать при выключенной программе "Global Mapper". Сохраним файл и вновь запустим Global Mapper. Откроем окно корректировки изображения и нажмём кнопку "Выбор проекции". В открывшемся диалоге выбора проекции заменим систему координат на новую и нажмём кнопку "ОК":
   Программа задаст нам вопрос, как ей интерпретировать введённые точки. Так как нам необходимо сохранить линейные координаты в неизменном виде, ответим на этот вопрос "Нет". Поскольку и никаких параметров проекции, кроме замены СК, мы не меняли, то останутся неизменными не только геодезические, но и географические координаты:
  Выйдем из окна коррекции и посмотрим, что у нас получилось. Сразу же становится видно, насколько точнее ложатся треки на те участки дорог, о которых известно, что они практически не изменили положение до нынешнего времени:
   Теперь полученной картой можно пользоваться и для реальной навигации. Поскольку встроенный программный модуль GPS в Global Mapper имеется, можно было бы остановиться на этой стадии. Но мы пойдём немного дальше и подготовим нашу карту для применения в гораздо более широко используемой программе Ozi Explorer. С недавнего времени в Global Mapper стал возможен прямой экспорт растра с созданием .map-файла. 
   Чтобы немного упростить задачу и не создавать в Ozi Explorer дополнительные системы координат, мы сделаем эту подготовительную работу прямо в Global Mapper. Откроем окно "Конфигурация" и на закладке "Проекция" изменим нашу СК на WGS84. Это изменение не затрагивает нашу привязку, а относится только к пересчёту растра в основном окне программы. При этом и экспортироваться растр будет также в WGS84.
   Можно также обратить внимание, что проекцию Гаусса-Крюгера я заменил на Transverse Mercator с теми же параметрами (мы помним, что первая проекция является частным случаем второй). Это также сделано для облегчения "понимания" программой Ozi Explorer файла, полученного при экспорте. 
   В меню "Файл" выберем "Экспорт растров", экспортируемый формат файла - JPG, а на открывшемся окне параметров экспорта в группе "Форматы файлов метаданных" отметим галочкой "MAP (Ozi Explorer) файл". После нажатия кнопки "ОК" Global Mapper экспортирует растр в указанную нами папку, при этом создав файл привязки для Ozi Explorer. Точки привязки программа создаёт расчётные, исходя из координат углов растра и середин его сторон. 
   Полученный .map-файл теперь можно открыть в Ozi Explorer, но до того, как им можно будет пользоваться, следует сделать ещё одну операцию. 
   Дело в том, что из-за досадной ошибки некоторые версии Global Mapper экспортируют параметры проекции не в те переменные Ozi, в которые это следует делать. Поэтому в Ozi Explorer сразу же открываем пункт меню "Проверить калибровку карты...", а в открывшемся окне калибровки нажимаем кнопку "Настройки проекции". В окошке настроек нам нужно будет поменять местами числа для некоторых очевидных параметров проекции (центральный меридиан, масштабный коэффициент и восточное смещение, сдвинув эти параметры на одно окошко вверх).

Subscription levels

Стандартная

$ 1,28 per month
Подписка дает право на чтение всех материалов в блоге. Или почти всех.

Ищу клад

$ 2,55 per month

Нашел клад!

$ 3,9 per month
Go up