Содержание

Оригинал статьи находится тут

У вас есть несколько листов карты, из которой вы хотите сделать свой кэш и ZMP (карту, в понимании SAS.Планеты). Допустим, что эти листы нумеруются и расположены (относительно друг друга) таким образом:

А Б В
Г Д Е

По умолчанию принимается правило генерить новый кусок кэша в пустую (новую или освобождённую) папку.

Если генерится кэш из новых листов, не имеющих смежных сторон с уже присутствующими в кэше (напр. А и В), новый кэш плюсуется к старому и никаких проблем это не должно вызывать. Если новые листы соприкасаются со “старыми” (БВ, БД, ВД и т.п.) то есть несколько вариантов решения проблем с пересекающимися тайлами.

Довольно затратный

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

Допустим, в первый раз вы обработали два листа АБ. В следующий раз вам понадобилось добавить в кэш третий лист (В). Но вы запускаете в обработку не один лист, который вам нужен, а захватываете смежную часть предыдущей выборки (Б) и обрабатываете два листа БВ.

При обработке первой пары листов получилась вот такая матрица тайлов:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

При обработке второй пары получили следующие тайлы:

6 7 8 9 10 11 12 13 14 15
6 7 8 9 10 11 12 13 14 15
6 7 8 9 10 11 12 13 14 15
6 7 8 9 10 11 12 13 14 15
6 7 8 9 10 11 12 13 14 15
6 7 8 9 10 11 12 13 14 15

Неполными из них будут (скорее всего!) все граничные, т.е. верхняя и нижняя строки и все шестёрки и пятнашки. Но поскольку прибавлять вы будете к левым листам, то и волновать вас должна только левая граница этой матрицы. Удаляете все шестёрки. Весьма удобен для этого Total Commander в котором есть функция Показать все файлы без подкаталогов (Ctrl+B) и разнообразная сортировка. Остальные тайлы должны получиться (если настройки генерации не изменялись) такими же и поэтому они вам не помешают. Копируете с заменой новые тайлы в папку с предыдущим результатом. LOOP … END

Следующие способы мало отличаются друг от друга, в основном, авторством скриптов и соотв. выбором сопутствующих программ. Но у “скриптовых” способов есть один недостаток. Дело в том, что Global Mapper иногда присваивает тайлам разные цвета @канала. И при попытке склеить граничные тайлы с разными @каналами в результирующем тайле получается наложение “лишнего” цвета на существующую часть картинки. Для обоих скриптовых способов обязательно указывать в настройках экспорта прозрачность PNG-формата.

Скриптовый №1

Автор: UrikEEE 27.01.2012 г

Использует растровый редактор Gimp. Собственно скрипт. Я внёс туда пару небольших поправок: закомментил удаление отработанных тайлов и подвинул границу восприятия “пустых” тайлов в меньшую сторону.

Возьмём файл MergePNG.scm и сохраним его в в папке %UserProfile%\.gimp-№\scripts (эта папка появилась после установки программы Gimp-№). Возьмём файл MovePNG.vbs и сохраним его в той папке, где будем складывать получаемые тайлы, например C:\Tiles\.

После окончания экспорта в веб-формат из Global Mapper запускаем vbs-скрипт MovePNG.vbs, сохранённый в папке C:\Tiles\.
Скрипт начинает выполняться, в процессе выполнения формируется временный текстовый файл-скрипт для Gimp. В конце выполнения vbs-скрипта возможен запуск Gimp. Gimp будет запущен в случае, если при перемещении файлов из временного хранилища в постоянное хранилище были обнаружены файлы-тайлы с такими же именами-координатами. Такая ситуация вероятнее всего возникнет, как только мы станем повторно обрабатывать карты, смежные с ранее обработанными. Во время выполнения скрипта в консольное окно будут выводиться строки, показывающие, какой файл-тайл был только что обработан. Мы спокойно смотрим на этот процесс, ожидая появления надписи «The End! Press any key to close…». При появлении этой надписи жмём любую клавишу на клаве (или кликаем мышкой на кнопке закрытия окна) – только в этом случае окно закроется и vbs-скрипт продолжит свою работу.
По окончании своей работы vbs-скрипт покажет окошко закрытия самого себя; жмем OK и теперь можно повторить экспорт следующей партии листов )

Скриптовый №2

Автор: Papazol

Описание находится тут.
Использует composite.exe из состава программного продукта ImageMagick.
Собственно скрипт.

Загружаем в Global Mapper несколько листов карты. Желательно загружать карты в виде прямоугольника X на Y, полностью заполненного листами. Общее количество загружаемых листов зависит от возможностей компьютера (в основном, от объёма памяти и от разрядности ОС и GM). Нарезаем загруженные листы на тайлы. Путь, по которому будут складываться нарезанные тайлы, указываем и запоминаем. Для полученного кэша необходимо создать собственный zmp. Тогда можно сразу по окончании нарезки на тайлы открыть SAS.Планету и посмотреть результат работы.
Используем утилиту ggc_linking.exe для удаления краевых тайлов полученного кэша. Для этого указываем в качестве Папки с картами ту папку, в которую Global Mapper складывал нарезанные тайлы, в качестве Сборки – папку в кэше SAS.Планеты, указываем масштаб и жмём Удалить края. Края нужно удалить на всех масштабах.
После удаления краевых тайлов имеет смысл ещё раз посмотреть результат работы в SAS.Планете. Хотя бы для первого раза. Теперь используем утилиту ggc_linking.exe для сборки кэша. Она берёт тайл из папки-источника и проверяет наличие тайла с таким же названием в папке назначения. Если такой тайл существует, значит, эти тайлы краевые. Утилита склеивает их друг с другом с помощью сторонней программы composite.exe из состава программного продукта ImageMagick. Если тайл с таким названием в папке назначения отсутствует, то он просто копируется туда из папки-источника. Таким образом, можно постепенно добавлять в кэш всё новые и новые листы карт, получая непрерывное покрытие. Поскольку папки источника и назначения уже указаны, просто жмём Собрать кэш. Начнётся сборка кэша в указанную папку.
Смотрим результат работы в SAS.Планете. Если всё хорошо, можно приступать к обработке следующей партии листов карты. Содержимое папки-источника можно предварительно удалить для экономии места на диске.