Часть 2: самостоятельное изготовление GPS-карты

Эта статья, продолжающая начатую в мартовском номере Mobi тему, носит практический характер. Несмотря на то, что она представлена как пошаговое руководство по созданию GPS-карты для КПК с помощью программы GPSMapEdit и сопутствующих утилит, очень желательно прочитать предыдущую статью — это позволит не запутаться в обилии терминов и рекомендаций.

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

Исходные материалы

Карты для GPS создаются на основе данных, полученных из разных источников.

Основной из них — это привязанная растровая карта. Под термином «привязанная карта» обычно подразумевается отсканированный лист топографической карты в одном из растровых форматов (обычно jpeg), к которому приложен файл привязки (с расширением .map).

Файл привязки содержит сопоставления пикселей растрового изображения и географических координат, соответствующих им на реальной местности. Обычно привязывается не менее четырех точек карты — чем больше точек привязки имеется, тем точнее карта. На практике достаточно хорошие результаты дают девять точек. Это число не случайно. Оптимальные для туризма бумажные карты масштаба 1 см : 500 м имеют как раз девять отметок координат (не считая сетки): четыре по углам, четыре по серединам сторон карты и одна в центре.

Координаты всех остальных пикселей карты рассчитываются программами автоматически, поэтому крайне важно, чтобы сканирование листа осуществлялось тщательно, не было перегибов, смещений при сканировании.

Если нет готовой карты, привязку можно осуществить самостоятельно. Это делается в программе OziExplorer. К сожалению, рассказ о тонкостях привязки растровых карт не поместится в эту статью, но в интернете можно найти достаточно информации на эту тему.

Второй источник материала для нашей карты — спутниковый снимок, полученный из сервиса Google Maps.

Его основное достоинство — актуальность информации (снимок более актуален, нежели топографические карты, которые были сделаны в 1960-1970 годы), главный недостаток — ограниченная разрешающая способность. Поэтому снимок из космоса годится для уточнения расположения больших объектов с четкими контурами: озер, рек, ледников, дорог. Также снимок хорош для оценки состояния объектов, контур которых со временем изменяется существенно: те же ледники, пересыхающие озера, новые магистрали. Google Maps помогает также в случае, когда составители топографической карты допустили ошибки (случайные или преднамеренные).

Поэтому при создании собственной карты лучше пользоваться топографической картой и спутниковым снимком параллельно, ориентируясь на тот источник, которому доверяем больше.

Как получить нужный район снимка? Дело в том, что в Google Maps вся поверхность земного шара представлена в виде квадратных фрагментов небольшого размера. Склейка и привязка их вручную потребует неимоверных усилий. Поэтому появились программы, автоматизирующие это процесс. Одна из них, очень хорошо выполняющая свои функции, — это свободно распространяемая GoogleMV Николая Серебренникова. Для получения привязанного спутникового снимка достаточно найти требуемый регион, выделить рамкой нужный участок, выбрать требуемое увеличение (настолько подробное, насколько это нужно), степень компрессии получаемого JPEG-файла и нажать кнопку «Cклеить». После этого программа предложит указать название файла и автоматически выкачает требуемые квадраты, склеит их в одно целое и создаст файл привязки. Полученный результат идеологически не отличается от привязанной топокарты, разница лишь в том, что изображены на рисунке не картографические значки, а внешний вид местности. Для того чтобы импортировать этот снимок в GPSMapEdit, нужно открыть его с помощью OziExplorer и просто сохранить заново, ничего не меняя. После этого снимок будет доступен для использования в программе GPSMapEdit.

Третий источник данных для карты — это координаты точек, записанных на местности кем-то ранее. С одной стороны, это весьма достоверный источник информации — если вы получаете координаты у ваших друзей или знакомых по тематическим форумам или сообществам, вероятность того, что кто-то в шутку назовет неточные координаты, приближена к нулю. Однако нужно учитывать, что точность навигатора, с помощью которого эти координаты могли быть получены, не стопроцентная, поэтому погрешность до 50 метров вполне может существовать.

Подготовка: создание файла, настройка

Наш основной инструмент для создания карты — это GPSMapEdit Константина Галичского. Это условно-бесплатная программа, поэтому не все функции доступны в бесплатной версии. Из ограничений больше всего неприятностей может доставить невозможность открывать большие растровые изображения. А сканированный лист топокарты — это как раз тот размер.

Тут на помощь приходит пакет расширений программы от Михаила Сотина, который кроме снятия ограничений на размер растра добавляет весьма полезные функциональные инструменты, которыми мы будем пользоваться при создании карты-примера. Криминала в использовании этой программы нет, создана она на основе открытой части кода Константина Галичского, распространяется с той же лицензией и тоже не является зарегистрированной в своем бесплатном варианте. Дополнительный плюс — версия исходно русифицирована.

Итак, открываем GPSMapEdit. В основном поле программы — пока ничего. Сразу же бросается в глаза отсутствие привычной кнопки «Создать новый документ». Да, этого действительно тут нет. Чтобы начать работу, откроем что-нибудь из наших исходных материалов, например, топокарту.

Появляется белое поле с топографической сеткой, на котором расположена наша карта. Далее — один небольшой нюанс. Мы должны создать хотя бы один векторный объект. На панели инструментов выбираем инструмент «Создание объектов», который позволяет нанести на карту любой из трех доступных типов объектов (точка, полилиния, полигон).

Выбираем точку, ставим ее где-нибудь в произвольном месте (потом все равно удалим), в раскрывшемся списке выбираем тип точки (к примеру, 0x6300 — Elevation spot — отметка высоты), пишем название, жмем Enter — точка создана.

Теперь, ничего более не трогая, выбираем из меню «Файл > Сохранить карту как...» и задаем имя создаваемого файла и формат. В качестве формата нас интересует только Map Polish — польский формат,расширение файла .mp. Этот формат позволяет хранить векторные картографические данные. После сохранения в польском формате первоначальная карта переходит в разряд «присоединенных файлов» и не попадает (естественно) в конечный результат. Этой картой мы пользуемся только как фоном для ручной отрисовки объектов.

Однако в данный момент нас интересуют настройки карты, которую мы получаем, и первоначальные настройки программы.

Настройки программы доступны через меню «Инструменты > Настройки». Собственно настроек не так много и, в общем случае, настроек по умолчанию вполне достаточно. Со свойствами карты сложнее, к тому же они весьма важны для нашей работы. Свойства карты находятся в меню «Файл > Свойства карты». Доступно несколько вкладок, больше всего нас интересуют две — «Заголовок» и «Слои».

На вкладке Заголовок устанавливаются основные параметры карты. В списке «Набор типов» выбираем Navitel (допустим, что этот пример мы создаем именно для этой программы). Набор типов определяет набор значков, которые мы может добавлять на карту. Navitel выбрали потому, что это одно из самых современных приложений, под которые мы можем создавать карты. Бесплатная версия программы доступна на сайте производителя , так что с тестированием созданной карты проблем быть не должно.

Далее встречается поле «Код». Оно используется только в случае, если карта создается для приемников Garmin, поэтому можно оставить поле пустым.

В поле «Название» пишем название нашей карты — произвольная фраза.

Поле «Датум» мы изменить не можем, он всегда WGS-84, А вот единицу измерения высоты установим в привычные для нас метры.

«Кодовая страница» — 1251 (ANSI Кириллица), чтобы не было проблем с русскими названиями. Поле «Вид кодировки» тоже устанавливает параметры текста, выбираем European (Single Byte).

Вкладка «Слои» является одной из важнейших. Именно здесь мы определяем, сколько слоев содержит наша карта. В этом примере мы создаем карту с двумя рабочими слоями. Один из них будет нести максимально подробную информацию о местности, другой будет обзорным с меньшей деталировкой.

Если карта создавалась тем путем, что описан здесь, в этот момент ни одного слоя быть не должно. Поэтому жмем кнопку «Вставить перед...» на вкладке «Слои». При этом появляется не один слой, как можно ожидать, а два. Это связано с особенностью карт в этом формате — они обязаны иметь пустой последний слой.

Тут же можно видеть, что слои имеют набор параметров, которые можно изменить, нажав соответствующую кнопку. Основной параметр слоя — его битность. Это числовой параметр от 10 до 24, который определяет минимальное расстояние между двумя соседними точками карты (точки в польском формате не могут быть в произвольных местах, поэтому чем подробнее и точнее должна быть карта, тем большее значение битности должен иметь слой). Важно, что этот параметр будет влиять на то, при каком увеличении становится виден этот слой. Битность выбирают исходя из задач карты. В нашем случае установим для подробного слоя (обозначаемого Level0) значение 22 (500 м), для обзорного слоя (Level1) — 19 (3 км). Для последнего (пустого) слоя — 18 (5-8 км). На прочих вкладках менять ничего не будем.

Теперь наша карта имеет два рабочих слоя. В GPSMapEdit переключаться между ними можно с помощью цифровых клавиш. Текущий слой виден в строке статуса программы (внизу). Большинство работы ведется с самым нижним слоем (Level0). Все объекты сначала изображаются в нем. После полной отрисовки подробного слоя некоторые объекты копируются на обзорный слой, автоматически претерпевая трансформации для приведения в соответствие с битностью.

Все готово для начала работы.

Нанесение объектов

Итак, переходим на нулевой слой (клавиша 0). Мы имеем полный лист топографической карты масштаба 1:50000 (1 см — 500 м). Это достаточно большой регион, поэтому для примера создания карты выберем небольшой фрагмент. Это район гористой местности с участками леса, рекой, дорогой и множеством мелочей. Здесь имеются все типы объектов (точка, полилиния, полигон).

Начнем с точек. Нанесем отметки высоты подобно тому, как мы делали это в самом начале. Выбираем инструмент точки, ставим его в том месте, где точка на растровой карте, выбираем из обширного списка тот тип точки, что нам нужен (Elevation spot, 0x6300, точка), вводим его название. Для отметки высоты название — это собственно значение высоты. Все объекты, размерами которых можно пренебречь, отмечаются точками. Меняются лишь координаты, тип и подпись.

Для того чтобы лучше позиционировать точку, можно изменять масштаб (клавиши + и ?). К слову сказать, в GPSMapEdit большинство действий имеет клавиатурные шорткаты, так что со временем работа становится довольно быстрой. Очень удобны манипуляции с колесом мыши для прокрутки. Так, при нажатой клавише Shift и вращении колеса осуществляется горизонтальная прокрутка, при нажатой клавише Ctrl — масштабирование. Как графический редактор GPSMapEdit довольно удобен, хотя не все эти вкусности очевидны.

Выбор значка для точки не ограничен какими-либо регламентами. Нужно использовать то, что больше подходит по смыслу, или будет удобно выглядеть на получаемой карте. Например, отмечать урезы воды в реках (по сути, это тоже отметка высоты) удобно типом точки 0x6500 Water feature (т.е. некий объект гидрографии), тогда как собственно для отметки высоты вряд ли подойдет что-то лучше знакомой уже Elevation spot.

Если вершина горы имеет название, можно использовать тип Summit. Возможных вариантов значков очень много, это количество способно удовлетворить большинство картографов. Но есть одно правило — нужно использовать так мало разных типов значков, насколько это возможно. Чем проще карта, тем удобнее ею пользоваться.

После точек добавляем полилинии. Полилиния — это ломаная линия, имеющая свой вариант начертания (тип) и свою подпись. Полилиния состоит из отрезков и точек между этими отрезками. Создание полилинии заключается в последовательном добавлении ряда точек вдоль контура изображаемого объекта. Программа сама соединяет эти точки отрезками.

После того как линия создана, она в любой момент может быть изменена. Для этого выбирается инструмент Редактирование точек. С его помощью можно переносить точки с места на место. При этом будет меняться контур объекта, содержащего эти точки.

При добавлении полилиний также нужно руководствоваться простыми правилами: наносить только то, что нужно, выбирать наиболее подходящий по смыслу тип объекта, давать лаконичные названия. В нашем тестовом случае полилиниями являются дороги. Дороги присутствуют двух типов: фрагмент Чуйского тракта (хорошая шоссейная дорога, обозначим как Major highway, 0x0001) и грунтовки, переходящие в конные маршруты (обозначим как Unpaved road, 0xa). Присутствуют также горизонтали, но мы их отмечать не будем, так как этот довольно трудоемкий процесс можно автоматизировать.

Третий вид добавляемых объектов — полигоны. Полигонами обозначаются объекты, имеющие площадь. Собственно полигон — это пространство, описанное замкнутой полилинией. Так обозначаются озера, широкие реки, леса, болота и кварталы городов.

С полигонами связан набор правил.Первое — полигон не должен иметь пересекающихся частей, т.е. ни одна из линий, входящих в полигон, не должна пересекать линию этого полигона. При отрисовке полигона легко можно допустить такую ошибку. К счастью, есть средство проверки карты на наличие таких мест. Достаточно выбрать команду меню Инструменты — Проверить карту, и первое из найденных пересечений будет показано на экране. Выполнение проверки до тех пор, пока не исчезнут ошибки, позволит получить правильную карту. Второе правило — полигоны не должны пересекаться друг с другом. Это требование связано с тем, что непересекающиеся объекты быстрее отрисовываются программой навигатора. Особые сложности возникают, когда нужно изобразить два граничащих друг с другом объекта. Точки, которые формируют их границы, должны находиться в одних и тех же местах. Для упрощения процесса существуют логические операции над объектами. Нужно выделить их оба (используя Shift) и выбрать из контекстного меню требуемую операцию. Для создания четкой границы подходит операция Отсечение. При этом имеет значение, какой объект был выбран первым: линия границы будет взята от второго выделенного объекта.

На нашем примере полигонами изобразим реку, леса и болота. Отрисовывая объекты или их фрагменты, добиваемся соответствия нашей карты исходной. Как правило, в ход активно идут всевозможные логические операции: объединение, пересечение, обоюдное пересечение.

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

Для того чтобы откорректировать карту, рекомендуем использовать Google Maps. Данные Google Maps зачастую более свежие, чем имеющиеся растровые карты, кроме того, спутниковый снимок позволяет взглянуть на местность по-другому. В нашем случае, например, можно увидеть некоторые необозначенные притоки реки, увидеть воду в плотине и заметить, что болото вполне может быть не болотом. По Google Maps хорошо корректировать контуры быстро меняющихся объектов: ледников, пересыхающих озер, отслеживать создание искусственных сооружений — дорог, плотин, населенных пунктов.

Ни в коем случае нельзя пренебрегать также треками и точками, снятыми с местности, поскольку они могут нести более достоверную информацию.

Для тестового фрагмента карты мною были найдены несколько треков. Если добавить их к карте (кнопка Добавить), то можно будет увидеть, что контур дороги несколько смещен, а грунтовки перепроложены на несколько десятков метров в сторону. Можно удалить отмеченные ранее тропы и создать новые из трека, используя контекстное меню.

Добавление горизонталей

Горизонтальные линии, проведенные через одинаковые высоты, дают представление о рельефе местности и зачастую могут быть очень полезными. Однако создавать их полилиниями очень трудоемко. На помощь приходят данные SRTM. Это данные о высотах поверхности Земли, полученные ультразвуковым способом со спутника. Они охватывают 80% поверхности, исключая полюса. Разумеется, при съемке не обошлось без помех, есть погрешности и артефакты, однако процесс создания изолиний этим способом настолько прост, что им было бы грешно не воспользоваться. К тому же эти данные могут быть в любой момент откорректированы.

Основной источник данных — интернет. Фрагменты поверхности выложены в свободный доступ, кочуют с сервера на сервер, найти их можно обычным поисковиком. Данные хранятся в файлах формата HGT и открываются пакетом добавлений к GPSMapEdit от Михаила Сотина.

Итак, добавляем файл высот для нашего региона, щелкаем по нему, и из контекстного меню выбираем пункт «Создать изолинии». В появившемся меню задаем необходимые настройки (например, шаг линий сетки, в нашем случае — 25 метров). На следующем экране задаем слои, на которые будем добавлять изолинии. Выбираем наш рабочий слой — Level0. После этого программа сама рассчитывает и создает изолинии. После окончания расчета файл высот можно открепить.

Каждый фрагмент SRTM охватывает большую поверхность, поэтому создается очень много линий. Как следствие, файл карты непомерно «раздувается» в объеме. Поэтому все линии, выходящие за края карты, отсекаем инструментом «Разрезание карты» выделяем нужную область и из контекстного меню вызываем пункт «Отрезать снаружи».

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

Подготовка слоев

До сих пор мы работали только с нулевым слоем. А одно из больших достоинств электронной карты — это многослойность. Поэтому перед нами стоит задача перенести некоторые особо важные объекты на первый слой. Это не так сложно. Выбираем объект, в его контекстном меню выбираем Изменить — распространить до... и в появившемся диалоге вводим номер слоя, до которого мы хотим видеть этот объект. В нашем случае это слой 1. Чтобы упростить задачу, можно сначала выделить группу объектов и распространить их все на вышележащие слои. Удобно в меню Правка — Выделить — По типу выбрать все объекты одного типа, например, все шоссейные дороги или все широкие изолинии. Однако не стоит забывать об одном нюансе: все слои с более крупным масштабом имеют другую битность. Это означает, что объекты, перенесенные на этот слой, изменяют свою форму. Поэтому после перенесения не забудьте их проверить и внести необходимые коррективы.

Экспорт в нужный формат

До сих пор мы работали с польским форматом. Однако навигационные программы пока что не работают с ним напрямую. Поэтому нужно экспортировать нашу карту в нужный формат. Делается это через диалоговое окно «Сохранить как...» оригинальной программы GPSMapEdit, а не пакета расширений Михаила Сотина, который, вероятно, создавался исключительно для работы с исходниками карты.

В том случае, если вы пытаетесь создать карту для навигатора Garmin, придется выполнить еще одно дополнительное действие. Карту нужно скомпилировать в формат Garmin при помощи cGPSmapper. Это бесплатная утилита командной строки, выполняющая проверку и сборку карты. GPSMapEdit имеет для нее встроенный коннектор. Нужно лишь указать путь к исполняемому файлу cgpsmapper. Далее последует проверка карты, разбиение ее на фрагменты и запись файла в формате IMG. Этот файл уже можно загрузить в навигатор.

Заключение

В этой статье рассказано, как самому начать создавать свои карты для GPS. Достаточно ли данных для того, чтобы создавать шедевры? Вряд ли. Здесь даны только отправные точки. Основная мысль, которую хочется донести: карта своими руками — это не так сложно.






Рекомендуемый контент




Copyright © 2010-2019 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.