Как склеить карту из спутниковых снимков

Добавил пользователь Владимир З.
Обновлено: 05.09.2024

Сегодня я расскажу как в программе SAS.Planet создавать свои офлайн-карты для путешествий.

Для работы с такой картой потребуется смартфон со специальным приложением либо GPS-навигатор.

Я пользуюсь Android-смартфоном с приложением Locus Map Pro . Но есть много аналогов платных и бесплатных, подготовка карт для многих из них не будет отличаться от описанного способа.

Подготовка к работе

Скачиваем программу SAS.Planet на официальном сайте по ссылке , распаковываем архив и запускаем файл SASPlanet.exe .

Программа готова к работе:

В первую очередь обратите внимание на вкладки "Выбор основной карты" и "Слои" . Это основные рабочие инструменты:

Карта - это основное рабочее поле, поверх которого можно наложить сколько угодно слоёв. Достаточно просто выбирать их из списка.

Переключаясь между картами и слоями, мы можем видеть как одна местность представлена на разных источниках.

Я обычно работаю с этими:

  1. OSM Cyclosm
  2. ГосГисЦентр (все масштабы)
  3. Яндекс спутник
  4. Google спутник
  1. WikiMapia - чтобы смотреть границы и описание объектов
  2. Яндекс Гибрид - чтобы видеть федеральные трассы и железнодорожные станции

Рекомендую назначить горячие клавиши для часто используемых карт и слоёв, сделать этом можно в Параметрах:

Создание карты

Пошаговые скриншоты прикрепляю в карусели.

Выделяем нужную область

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

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

Например, здесь я рассказывал о ситуации, когда проводники высадили нас на одну станцию раньше :) Я не думаю, что мы бы заблудились, но с картой этой местности было намного приятнее.

Загружаем карту

Определяемся с масштабами, которые будем загружать. Чем больше число, тем выше детализация. Карта с излишне высокой детализацией будет очень тяжёлая и поэтому будет долго загружаться и медленно работать.

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

Названия/расширения этих карт/файлов/контейнеров: KMZ и JNX

В нашу задачу входит научиться самостоятельно создавать такие карты и заливать их в навигаторы.


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

Первая часть уроков-инструкций посвящена формату KMZ.

Устроен он достаточно просто: берутся файлы изображений в формате JPEG (как правило -- это скан бумажной карты или космоснимок), к ним присоединяются файлы топографической привязки KML (Keyhole Markup Language — язык разметки Keyhole, которую и поглотила в своё время Google), а потом всё это оборачивается в разную служебную информацию, понятную прошивке/системе прибора. Естественно не обошлось без серьёзных ограничений. Что же мы имеем в результате:

• максимальное количество файлов -- не более 100 штук (в Montanе можно 500)
• размер одного файла должен быть не более 1 мегапикселя (1024x1024, 512x2048, etc) -- выходящие за рамки сжимаются принудительно
• вес одного файла не более 3 мегабайт (где-то на форуме читал про проблемы, если вес всех файлов превышал 32 мегабайта, но проверять это надо в каждом конкретном случае)
• файлы только JPEG и обязательно не сжатые методом "рrogressive"
• читаются только из директории \Garmin\CustomMaps

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

KMZ-карты мы будем делать c помощью программы SAS.Planet -- а) она наша, родная, что меня, если честно, сильно греет; б) она бесплатная; в) с ней не возникает проблем с установкой, освоением и работой -- проще не бывает; г) она мегаресурсная -- тут тебе и космоснимки на любой вкус, тут и "бумага" начиная с Генштаба, ГГС и заканчивая историческими картами; д) и самое главное -- всё делается силами одной программы, с начала и до конца.

Если она ещё не пригрелась на вашем компе, то срочно идите на страницу загрузки, которая через десяток секунд должна начаться автоматически. Устанавливается, как не банально, путём простого перемещения скаченной папки с программой в C:\Program Files. Никаких установщиков. Запускается по даблклик на SASPlanet.exe

Клеить карту мы будем на примере космоснимков, поскольку есть небольшие нюансы. То есть с "бумагой" всё так же по сути, но с масштабами проще -- они или есть или их нет.

01

На данный момент я использую разные версии SAS.Planet.Nightly, так называемые "ночные сборки", а последняя стабильной является v.121010. Местами они немного различаются, но про это я упомяну в контексте.

02

03

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

05

06


Но ни Яндекс, ни Гугл, ни кто либо другой, не заказывают спутниково-космических снимков различной степени детализации для каждого своего уровня. Это было бы слишком дорого, да и не совсем разумно. Поэтому другие масштабы формируются из снимков а) или путём 2-х кратного сжатия, когда 4 стандартных тайла/фотографии по 256х256 пикселей (512х512) превращаются в один тайл 256х256 более верхнего уровня; б) или наоборот (но реже), увеличивая тайл в 2 раз (качество от этого, к сожалению, не улучшается)

Для того места, на примере которого я делаю этот мануал, Яндекс использует всего 3 слоя реальных фотографий:

• на z8, а остальные уровни z7; z6 . . . z1 формируются из него
• на z10 лежит метровый снимок, z9 сформирован из него
• на z19 лежит субметровый снимок (пиксель 2 ), из которого слои z18; z17 . . . z11 сформированы тем же путём сжатия

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

В картах KMZ верхнее и нижнее ограничения на уровень отображения задаётся стандартом и зависит. Нет. Давайте сначала разберёмся с терминологией, а то для тех, кто в первый раз с навигатором -- запутаться, как два пальца. А у меня задание, если вы помните.

(. ) Когда в мануале здесь и далее будет заходить речь о верхнем уровне отображения, о верхенем уровне перехода и вообще о верхнем уровне -- то имеется ввиду маленький Зум (z1 -- самый маленький) и мелкий масштаб (1: 500 000 = в 1 см. -- 5 км. мельче, чем 1: 50 000 = в 1 см. -- 500 м.). Если вам будет легче усвоить, то представите себя поднимающимся на воздушном шаре -- чем выше вы над уровнем земли, тем меньше масштаб "карты-земли". Верхний уровень -- выше над землёй, понижаем уровень -- опускаемся на землю. Грамотно как с точки зрения логики, так и юзабилити интерфейса устроен сервис Яндекс.Карт -- кнопочка "+" у них находится внизу:

В Гугл-сервисах и в САС.Планете ползунок надо тянуть вверх -- повышать масштаб. Но понижать уровень, ага :) Почему так -- не знаю, но привыкнуть до сих пор не могу -- и всегда, где возможно, переставляю шкалу масштаба в горизонтальное положение. Но надеюсь понятно: уровень в плюс -- масштаб/зум в минус :))

Так вот, в картах KMZ верхнее и нижнее ограничения на уровень отображения задаётся стандартом и зависит от того, из которого склеена карта. Допустим мы взяли снимки уровня, которому соответствует масштаб километровки (z15). Когда мы зальём их в навигатор, то наша карта включится на масштабе 3 км. (верхний уровень), а выключится только на 20 метрах (нижний уровень). То бишь, при цифровом масштабировании реальное изображение будет уменьшаться только в 4 раза (что не плохо), а увеличиваться в 16 (жопа из пикселей).
Хотя мы помним, что при переходе на один уровень вниз (тем увеличиваем масштаб) количество тайлов при заданном размере увеличивается квадратично (километровка делится на четыре 500-метровки), уменьшая в 4 раза доступную площадь покрытия, но мне кажется, не стоит сильно гнаться за увеличением площади карты, а лучше выбирать уровни, соответствующие если уж не максимальному качеству снимка, то близким к нему. Просто потому, что экраны навигаторов не ретина-дисплеи смартфонов, несовершенство проще добить SD-картами, которые подешевели до каких-то неприличных цифр -- за 2 Gb просят всего 100 рублей.
Но как бы то ни было, картами уровня "z19" можно покрыть около 12 км. 2 площади, учетверяя её каждым щелчком уменьшения масштаба.

07

08


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

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

Сравнение


Чтобы отключить несуществующие уровни в SAS.Планете, нужно в меню "Вид" снять галочку напротив строчки "Брать карты из меньших масштабов" и отсутствующие тайлы выводиться не будут:

13

    Выбор сделан, возвращаемся в окно "Операции с выделенной областью".
    Оно сразу откроется на вкладке "Загрузить"

10


Если вы уже определились с масштабом слоя, то нужно выполнить всего 3 пункта:

11

5.1. Проверить тип карты.
5.2. Удостовериться в правильности масштаба -- по умолчанию он будет указывать на зум, на котором делался полигон, и далеко не тот, что нужен.
5.3. Снять галочку напротив пункта "Закрыть окно после старта" -- мы же доведём дело до конца? :) Как только всё проверим -- жмём "Начать".

12

По окончании процесса закрываем окно загрузки и переходим на следующую вкладку.

09

• В подменю "Формировать для. " выбрать "Как на главной карте", или тут карту, которая нужна.
• Выбрать масштаб (на картинке стоит z19).
• Выбрать, что показывать -- существующие тайлы или отсутствующие. Если выбрать отсутствующие -- именно они изменят тон на более тёмный, если существующие (как на картинке) -- потемнеют они.

Убедившись в равномерности заполнения слоя можно двигаться дальше.


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

При загрузке некоторых карт (обычно Google) сперва все идет нормально, а потом мне говорит что "Такого изображения нет на сервере", хотя при просмотрте в браузере этот регион прекрасно показывается. Что это?!

ЭТО НЕ БАГ ПРОГРАММЫ SAS.Planet - это называется "бан на сервере", и им обычно грешит именно Google.
После примерно 1000 загруженных тайлов сервер обычно банит по IP. в программе реализована некоторая защита от бана (путем задержки закачки тайлов), но 100% гарантии это не дает. Основной инструмент, которым пользователь может управлять баном - параметр Sleep в zmp-файле. Таким образом, если после 10 минут работы с программой больше ничего не загружается - поздравляем! Вас забанили, и единственный выход - ждать сутки (иногда меньше), больше ничего делать не надо. После этого времени всё встает на свои места, и можно опять начинать качать (до следующего бана). 100% гарантированного обхода бана в программе SAS.Planet пока что нет.


При загрузке карт мне говорит что "Такого изображения нет на сервере", хотя при просмотрте в браузере этот же регион прекрасно показывается. Что это?!

ЭТО НЕ БАГ ПРОГРАММЫ SAS.Planet - это называется "на сервере сменили версию карт".
Для решения этого вопроса Вам надо открыть файл ZMP соответствующей карты, найти в нем строку "DefURLBase=" (например, DefURLBase=http://mt.google.com/mt?v=w2p.99&hl=ru) и заменить в нем имеющиеся цифры версии (например, "w2p.99") на актуальную на настоящий момент версию на сервере. Сохранить изменения и рестартовать программу SAS.Planet.
Автоматического отслеживания смены версий карт в программе SAS.Planet пока что нет.


При загрузке карт в браузере - я вижу новые районы и обновленные карты, а при закачке программой SAS.Planet - я этого не вижу, на той же карте. Как так может быть?

ЭТО НЕ БАГ ПРОГРАММЫ SAS.Planet - это называется "на сервере используют более новую версию карт".
Действия по изменению версии карт в программе SAS.Planet на актуальные - описаны пунктом выше.


Хочу всегда иметь самые свежие версии zmp!


Мои карты очень медленно грузятся.

Если у вас карты грузятся много медленнее чем в браузере на сайте - это может быть потому, что в файле xxxxx.zmp для соответствующей карты параметр Sleep (задержка перед загрузкой каждого последующего тайла) равен по умолчанию какому-нибудь положительному значению (например, Sleep=1000). Это сделано для попытки обойти бан данной карты. Можете уменьшить этот параметр, или вовсе поставить 0 (но тогда возрастет вероятность бана).


Мне постоянно сообщает "Отсутствует подключение к Интернет!", хотя подключение есть

Проверьте Ваш файрвол (включая встроенный в Windows) на предмет блокирования соединений программы SAS.Planet, а также общие настройки Интернета в самой программе. Особенно это касается случаев с прокси-сервером.
Программа SAS.Planet не использует каких-то специальных своих собственных режимов доступа к Интернету, и используются сугубо возможности Вашей операционной системы и окружения. Если у Вас работает интернет-браузер - то заработает и SAS.Planet. Если же что-то блокируется при работе SAS.Planet - проблема безусловно на Вашей стороне.


Почему я вижу детальные снимки нужного мне региона в программе Google.Земля, а при просмотре этого региона через SAS в карте Google - я их не вижу?

ЭТО НЕ БАГ ПРОГРАММЫ SAS.Planet.
Google.Земля - совершенно другой сервис, чем сервис Google.Карты (где SAS при своей работе использует именно сервис Google.Карты, но не Google.Земля). Общее у этих двух лишь одно - владелец (компания Google), все остальное - совершенно различное, включая логику работы, проекции карт и собственно серверы, откуда идет контент.
Но есть и надежда: обычно обновления регионов в Google.Земля со временем перекочевывают и в Google.Карты, и тогда они могут стать доступны и в программе SAS.Planet. Обычно это занимает что-то в районе месяца-полутора. Иногда больше, иногда меньше. Иногда - никогда. Гарантии, возможности, точные сроки конкретных обновлений в обоих сервисах и степень их "взаимопроникновения" друг в друга известны только владельцу - Google, но никак не разработчикам программы SAS.Planet.

14

Начинаем заполнять поля:

15


16

7.5. Поле "Наложить" и проекцию к нему оставляем пустыми.
7.6. Так же не ставим никаких галочек напротив пунктов "Применять коррекцию изображений" и "Накладывать отображаемые метки" (если последние не нужны конечно). Если есть пункт "Сохранять PNG с прозрачностью" (v.121010) -- снимаем выделение -- здесь эти картинки точно не нужны.
7.7. И в поле "Создавать файл привязки" тоже ничего не ставим -- привязка KML у нас внутри KMZ-файла.


17

Всё, нажимаем "Поехали" и после окончания склейки.

18

. идём проверять свои файлы:

Ну что, осталось только залить их в прибор, путь до \Garmin\CustomMaps уже заказан :)

Итак, для примера открываем сразу четыре уже привязанные карты. Видим следующее: Взглянув на результат поближе замечаем, что бордюры одних карт/слоёв наезжают на смежные (соседние) карты/слои. Посему для пущей красоты и удобства сделаем обрезание. Т.е. обрежем бордюры.

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

  • Без обрезки
  • Автоматически
  • Вручную по границам Шир/Долг
  • Вручную по ед. проекции
  • Обрезка заданного количества пикселей (сверху, снизу, справа, слева)
  • Обрезка по заданным границам
  • Обрезка по текущему (предыдущему) полигону

Выбираем Автоматически (зачем мучится вручную?) Смотрим результат.

Подобное проделываем и с остальными слоями (кусками/фрагментами большой карты).

Ну, а ежели не получилось автоматом, попробуем вручную по границам Широты/Долготы. Здесь вся трудность в том, что координаты границ предлагается вводить в десятых долях градусов (а не в градусах минутах и секундах). Но у нас же есть онлайн-конвертор координат. Но в остальном процедура не должна вызвать каких-либо затруднений.

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

Итак, идём Tools->Digitizer (Alt-D)

Вуаля! Alt-G для того чтоб перейти в режим панорамирования. в итоге имеем:
На всякий случай можете сохранить рабочее пространство, авось пригодится. Потом Вы сможете парой кликов загрузить его для дальнейшей работы. Если же вы склеили всё, что Вам хотелось, можете экспортировать склеенную большую карту в один из форматов, следуя вышеописанному.

Иногда бывает, что спутниковые снимки со всех ресурсах в облаках. В таком случае используем Adobe Photoshop (или аналогичные программы) и вставляем на место облаков куски спутниковых снимков из других источников. Часто так можно собрать вполне приемлемый спутниковый снимок.


Рисунок 59. Спутниковый снимок Yandex

Например, нужно сделать спутниковую карту следующей местности. Лучший снимок (Yandex) в облаках, часть карты снята зимой, часть карты недостаточного качества. Имеется качественный снимок (Google) северо-восточной части района поиска.


Рисунок 60. Спутниковый снимок Google

также есть спутниковый снимок “Nokia Map Creator” на котором также есть облака, часть карты в приемлемом разрешении также отсутствует.


Рисунок 61. Спутниковый снимок “Nokia Map Creator”.

Отмечаем нужный нам район поиска полигоном или метками (для визуального удобства), выкачиваем нужный нам район из “Спутник Yandex” как самый лучший из имеющихся снимков. Он будет для нас основой для модернизации. Обрабатываем его с помощью Adobe Photoshop (или аналогичные программы).

Далее выкачиваем только участок от Google в хорошем качестве. Обрабатываем его с помощью Adobe Photoshop (или аналогичные программы).

Открываем с помощью Adobe Photoshop снимок от Yandex и Google. Копируем нужную нам часть от Google и накладываем на Yandex. В качестве ориентиров можно использовать линии от слоя Wikimapia. Аналогично делаем для восточной части района поиска и для облаков имеющихся на карте Yandex. Данные для вставки берем с карты “Nokia Map Creator” (предварительно обработав их в Adobe Photoshop). Аналогично для крупных облаков и тени от крупных облаков. В результате у нас получился относительно нормальный спутниковый снимок.


Рисунок 62. Конечный результат обработки снимка со спутника.

Не смотря на то, что итоговый результат напоминает Франкенштейна – он наиболее удобен (а иногда может быть и единственной картой). Данный вариант занимает достаточно много времени и его по возможности нужно избегать. Если же это не возможно, то откладывать на последний момент. К счастью, изготовление спутниковых карт из большого количества кусков – редкость.

также этим вариантом можно воспользоваться, как альтернативой Map Merging Utility for OziExplorer, в случае если спутниковые карты при склейке сильно смещены. Например, дорога переходя со спутникового снимка Yandex на спутниковый снимок Геопортала — оказывается на 150м севернее. Это визуально может вносить непонимание. Это ошибка привязки спутниковых снимков непосредственно на ресурсе. Какая из них более точная, вы определить удаленно не сможете. В таком случае совмещайте спутниковые снимки от разных источников в Adobe Photoshop по линейным ориентирам.

Еще момент. Если вы убираете облака на спутниковом снимке, и используете несколько ресурсов снимков, то, чтобы не грузить их все — можно использовать выделение области в SAS Планета “Полигоном” или “По пути”. Но после этого нужно обязательно удалить с помошью Adobe Photoshop черный фон не загруженных фрагментов карт.

Читайте также: