Почему старые карты не точны.
Привязка сканов старых карт, особенно созданных до XX века, дело нетривиальное по многим причинам. Назовем некоторые из них, чтобы у вас сложилось правильное, не радужное представление по этому вопросу.
- Топографические измерения того времени не обладали высокой точностью, какая сейчас доступна современным топографам, в арсенале которых есть современные приборы, аэрофотосъемка и спутниковые снимки. Не было и точных электронных хронометров, поэтому даже такая стандартная величина, как Пулковский меридиан, в XIX веке несколько раз менял значение долготы, в зависимости от уточнений различными учеными. На местности часто применялось мерное колесо, которое давало значительные погрешности на сложных рельефах.
- В Российской Империи вплоть до 1924 года не применялась стандартная метрическая система мер. Расстояния измерялись верстами, саженями, аршинами, пядями и вершками. Одних только вариантов саженей насчитывалось более 40.
- Т.к. все измерения проводились вручную, то для экономии времени точно измерялись только важные географические объекты государственного значения. При этом под словом "точно" подразумевается допустимая для того времени погрешность в 50-200 метров. Обычные же элементы местности, такие как реки, рельеф, проселочные дороги и т.д. наносились весьма условно, и даже на подробных картах погрешность могла достигать полукилометра.
- Для той же экономии времени при создании карт часто применялось заимствование материала из других картографических источников, при этом не всегда учитывалось то, что их проекция и масштаб были немного другими. Поэтому не редки случаи, когда на карте местность одной губернии отображена с приличным по величине сдвигом относительно соседней губернии.
- Даже очень точную карту нарисованную топографом по измерениям на местности, легко могли подправить в не лучшую сторону гравировщики. Гравировка также ручная работа и её точность несравнима с современными возможностями печати в типографиях. При этом для правильного оформления карты, специалисты по гравировке вполне могли вписать название населенного пункта и при этом сдвинуть незначительные географические объекты в сторону, чтобы те не мешали восприятию текста. В местах скопления мелких, но важных объектов тоже могли наблюдаться некоторые вольности с масштабом. Физические размеры листа могли "гулять" в пределах 1-2 см. от издания к изданию, когда гравировщики создавали новые гравюры на основе старых, а не на основе исходных чертежей картографов.
- Время не щадит бумагу, на которой издавались карты. За многие века она усыхала, мялась от частого использования, рвалась. Даже небольшое изменение на 5 мм. в физических размерах листа приводит к внесению погрешности в масштаб карты метров на 100-300. Сканирование также вносит свои огрехи на изгибах и при склейке отдельных фрагментов.
Эти, и многие другие причины позволяют нам говорить о том, что со старым картографическим материалом нельзя работать так же, как и с современными электронными картами. Любой скан старой карты, даже выполненной с соблюдением масштаба и с нанесенной сеткой параллелей и меридианов, при привязке к современным системам координат требует дополнительной ручной корректировки и нелинейной деформации отдельных участков карты.
Проблемы при привязке старых карт.
К чему это приводит на практике? К тому, что даже если вы точно нанесли на скан старой карты точки калибровки, правильно прописали в настройках систему координат и настроили проекцию, вы все равно не получите идеального результата, требуемого для использования карты в навигаторе при работе на местности. Такой прямой подход к карте даст только примерное соответствие с современной местностью с минимальной погрешностью для крупномасштабной карты в 200-400 метров, и со средней погрешностью в более чем 500м. на некоторых участках. При этом большое число точек калибровки скорее не поможет, а помешает создать программе навигации правильную привязку.
Если вы умеете на ходу анализировать местность и рельеф, и у вас перед глазами будет современная карта той же области, то подобные погрешности для вас будут не принципиальны. Но что делать, если вам захочется улучшить созданную вами привязку, и добиться её большей точности?
Эта небольшая заметка расскажет вам о простейшем способе автоматизации процесса нелинейной деформации участков листа карты на основе выбранных вами точек калибровки. Методика улучшит точность карты в 2-3 раза от исходного и при этом она напрямую зависит от количества правильных точек калибровки: чем их больше, тем точнее результат.
***
Ищем причину появления погрешностей на картах с правильной привязкой.
Переходим к практике.
Для примера мы возьмем один лист трехверстной военно-топографической карты и улучшим точность её привязки. Приступаем!
Берем лист карты трехверстовки XIX-17 (Воронеж и окрестности). Скачиваем на компьютер 3 файла в одну директорию:
На нашем сайте для любой страницы карты трехверстовки, если для неё создан файл привязки, это можно сделать - кликнув по следующим кнопкам и ссылкам:

Запускаем программу навигации OziExplorer и открываем файл .map в ней. После чего кликаем в любом месте карты правой кнопкой мыши и в подменю выбираем пункт "Настройки линий сетки":

Включаем сетку, чтобы было проще видеть погрешности карты, ставим расстояние между линиями 5 минут, отключаем "Авто масштаб" и снимаем галочку с поля "Обрезать до бордюра".

Затем заходим в меню "Файл" - "Загрузить из файла" - "Загрузить путевые точки из файла" и загружаем на карту наши проверочные путевые точки из .wpt. В результате на карте мы увидим координатную сетку и путевые точки, которые в идеальном варианте должны стоять на тех же местах, что и точки калибровки, т.к. они имеют те же географические координаты. Но на практике такое случается редко:

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

И это еще пример незначительного отклонения, а бывает много хуже. Вот, например, точка, которая должна была стоять прямо на железнодорожной станции, но значительно съехала в сторону, причем в совершенно не ту, как другие точки. Это говорит о том, что этот участок карты либо искажен по каким-то причинам, либо станция нанесена весьма условно, и даже если мы выправим координатную сетку и пропишем самую точную настройку проекции, точка на неё не встанет.

Почему такое произошло? Ведь мы же видим, что выбранный или созданный вами файл привязки правильный, а координаты на привязанной карте отображаются неправильно.
А дело вот в чем. OziExplorer и прочий подобный софт - это программы навигации, а не так называемые ГИС (Гео-Информационные Системы). Навигационная программа в первую очередь должна быстро, в реальном времени, показать вам место на карте в соответствии с сигналом GPS или ГЛОНАСС. Чтобы достигнуть такой быстроты, картинка карты для OziExplorer должна быть изначально изготовлена в правильной проекции и без тех многочисленных искажений на отдельных участках, как это бывает на старых картах, по причинам упомянутым в начале статьи. Программа навигации не может одновременно делать сложные вычисления для нахождения текущих географических координат, координат на картинке карты в соответствии с настройками привязки, и при этом держать в себе огромную матрицу данных о нелинейных искажениях каждого пикселя карты в соответствии с вашими точками калибровки.
Вспомните, если вы когда-либо пользовались Photoshop и производили несложное действие по сжатию картинки. Даже такая простейшая операция заставляла программу задуматься не на одну секунду. И это всего лишь линейная деформация в одном направлении по двум точкам. А представьте, что у вас 30 точек, которые хотят растянуть участки внутри картинки карты в разные стороны. И программе надо рассчитать, как изменится каждая точка на картинке, в зависимости от влияния всех 30 точек. Это более триллиона вычислений по сложным формулам. Разумеется, навигационная программа этим заниматься не будет, у неё другие задачи.
Итак, мы выяснили корень проблемы, теперь осталось её решить и улучшить нашу привязку.
Все вышеописанные операции с OziExplorer вам каждый раз делать не придется, мы просто хотели показать, из-за чего вроде бы правильные привязки с множеством точек, с правильными настройками проекции и системы координат могут выдавать такие большие погрешности.
Как быстро деформировать картинку карты в соответствии с точками калибровки.
Для решения этой задачи нам придется закрыть старый добрый OziExplorer и обратиться к одной из ГИС программ. Остановим свой выбор на самой несложной из них: Global Mapper. Не пугайтесь заранее, в этой программе мы будем использовать только несколько функций, уже знакомых нам по OziExplorer, не вдаваясь в её функциональную мощь. Никаких специальных топографических знаний нам не потребуется, просто делайте все пошагово.
Устанавливаем и запускаем Global Mapper (далее GM). Перед нами открывается такое окно:

Жмем на самую верхнюю строку: "Открыть файлы с данными". В появившемся окне открытия файла ищем директорию с нашим листом карты и открываем картинку карты .png. Обратите внимание на два факта: во-первых, в GM надо открывать именно картинку с картой, а не .map файл с привязкой, как в OziExplorer. Во-вторых, файл с привязкой должен иметь такое же название, как и файл с картой, т.е. в нашем случае 19-17-1.png и 19-17-1.map, иначе GM просто может не найти привязку. Если название файла привязки отличается от названия файла с картинкой - переименуйте его.
После того, как программа загрузит файлы, перед вами откроется окно с нашей картой:

В нижней, служебной строке программы вы должны увидеть строку BONNE (WGS84) и изменяющиеся координаты, в зависимости от движения мышки. Это значит, что загрузка привязки прошла успешно. Для других карт, не трехверстовок, значение проекции может отличаться.
Если вы это всё делаете первый раз, то вам необходимо немного настроить Global Mapper - включить сетку и выставить систему координат и проекцию, в которую мы будет конвертировать наш лист трехверстовки.
Включаем сетку следующим образом: заходим в меню "Инструменты" - "Настройка" или кликаем в верхней панели программы на эту кнопку:
В появившемся окошке "Конфигурация" в закладке "Общий" включаем показ сетки кнопкой "Шир/Долг", и ставим вручную её размер 0°01'0.0000''.

Жмем кнопку ОК и видим в основном окне программы карту с наложенной координатной сеткой в проекции Bonne.

Но для использования в навигаторе нам необходима общеупотребимая проекция, которую поймет даже простейшее карманное устройство. Сейчас таким стандартом де-факто является проекция Меркатора (Mercator), которую в своих картах используют картографические сайты Яндекса, Google и многих других ресурсов.
Изменяем проекцию листа. Для этого заходим в уже знакомое нам окошко "Конфигурация" и выбираем закладку "Проекция". Выставляем в нем значение проекции: Mercator, СК - WGS84, единицы измерения: METERS, остальные значения - 0, кроме SCALE FACTOR, которому задаем 1.

Если у вас возникнут сложности на этом этапе, просто загрузите данный файл себе на компьютер: mercator.prj и в окошке настройки проекции нажмите на кнопку "Из файла" и подсуньте программе этот файл. Жмем ОК и получаем примерно такой результат:

Как мы видим, теперь координатная сетка строго выровнена по вертикали и горизонтали, и лист вместе с ней изменил свое положение, получив некоторый наклон по оси. Листы близкие к Пулковскому меридиану будут менее наклонены, а листы отстоящие далеко от него получат больший угол наклона.
Если вы, вдруг, захотите проверить точки калибровки, как они загрузились в GM, и может быть добавить несколько корректировок, то это можно сделать, кликнув на кнопке - "Центр управления оверлеями". В появившемся окошке кликаем правой кнопкой мыши на нашем файле и выбираем в подменю первый пункт: "ПРОЕКТ - Изменить позицию/проекцию слоя".
В открывшемся окне вы увидите и точки калибровки, и 3 варианта карты: исходный, увеличенный (в оригинальной проекции) и итоговый (в Меркаторе).

Вернемся к нашей карте. Теперь нам надо сохранить полученный результат преобразований. Для этого заходим в меню "Файл" и выбираем пункт "Экспорт растра…". Появится окошко "Выберите формат экспорта", в котором представлен список всевозможных графических форматов для сохранения картинки карты.
Мы остановимся на формате GeoTIFF, т.к. во-первых, он адекватно воспринимается OziExplorer, во-вторых, все данные о привязке находятся внутри файла, и в-третьих, графическая информация в TIFF файле подается без искажения, как, например, в JPG. Жмем ОК.

После этого на экране появится большое окно с выбором настроек сохранения файла карты в формате GeoTIFF. В нем можно выбрать:
- Тип файлов. Т.к. трехверстовка черно-белая карта, то подойдет 8-битная палитра.
- Тип палитры. Можно оставить оптимизированную.
- Сжатие. Можно оставить значение по умолчанию.
- Все галочки с нижних строк в окошке можно снять, чтобы не плодить лишние файлы, т.к. в итоге нам нужен только tif

Сохраняем файл в нашу директорию под названием 19-17-1.tif. Как мы видим, по размеру он вышел даже меньше, чем исходный png.
Все, на этом мы закончили использование Global Mapper, и теперь можем его закрыть. Правда, было не страшно?
***
Открываем OziExplorer.
Заходим в нем в меню "Файл" - "Импорт карты" и выбираем самый первый пункт меню: "Одна карта формата DRG".

Далее, следуя пошаговым подсказкам OziExplorer загружаем в программу наш файл 19-17-1.tif. На втором шаге задаем для вновь создаваемой привязки новое название, например: 19-17-1-gps.map. На третьем шаге проверяем, правильно ли OziExplorer вытащил данные о привязке из tif файла.

Нажимаем ОК, и, если все прошло удачно, получаем в окне программы нашу новую, измененную карту.

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