Еще о SASPlanet
|
|
speleodog | Дата: Пятница, 21.06.2013, 21:57 | Сообщение # 1 |
Главный путешественник
Группа: Заслуженные
Сообщений: 307
Авто: Нива 2121
Награды:
9
Репутация: 4
Замечания: 0% ± Статус: Вне сайта (А разве вне сайта есть жизнь?)
| Нашел я на просторах сети вот такую статью Сдалал все так, как там описывается для карт Алтая. Но результата нет. Сделанное не открывается. Может другие будут удачливей
Преобразование пользовательских карт в формат, понятный SAS.Планете SAS.Планета - наиотличнейшая программа. Недавно заюзал еще одну ее фичу. У меня много всяких топографических карт Архангельской области, 10-ти, 5-ти, 2-, 1-километровки и некоторые другие, рассматриваю их в Озике, удобно, но не идеально - карты порезаны на листы, бывает заинтересует какое-нибудь место, которое находится в районе границы двух, а то и четырех листов, приходится переключаться между картами, пока изучишь все подходы, вот бы все карты склеить. Еще одна мечта - чтобы при разном масштабировании на экране менялась подробность карты, как в каких-нибудь Яндекс.Картах, названия мелких объектов исчезали, а оставались только крупные, короче, чтобы при одном приближении видеть 10-километровку, при другом - 5-, при следующем 2- и так далее. Решил я тогда использовать кэш САС.Планеты в качестве хранилища топографических карт, а саму прогу - в качестве движка для их отображения. Нужно перегнать карты в один из форматов, которые САС.Планета понимает в качестве кэша, предварительно изменив проекцию этих карт на Меркатор (все российские топографические карты - в проекции Гаусса-Крюгера). В этом помогла мощнейшая программа GlobalMapper. Я загрузил все свои карты одного масштаба, предварительно привязанные под Озик, в GlobalMapper, изменил там проекцию на Меркатор, причем GM при изменении проекции умеет трансформировать растровое изображение, где надо растягивать, где надо сжимать. Потом отрезал от карт рамки, в большинстве случаев получилось автоматически, в некоторых случаях пришлось вручную повозиться с указанием границ листов, благо они проходят по параллелям и меридианам. Дальше порезать полученную огромную карту квадратно-гнездовым методом на фрагменты по 256x256 пикселей и сохранить в формате, который понимает САС.Планета, такой формат нашелся - Google Map Tiles, подключить полученную карту к САС.Планете (создать файл *.zmp). Что это мне дало - непрерывную 2-км (пока, с километровками еще не закончил) карту всей области, можно прокрутить ее с севера на юг, с запада на восток перед глазами, не переключаясь между листами. Для поездки в конкретное место можно средствами САС.Планеты сохранить любой участок (опять же непрерывный) под Озик, загрузить в наладонник и ехать. Теперь по порядку Продемонстрирую вышесказанное на примере 4 соседних листов масштаба 1:100000 (в 1 см 1 км): P37-02; P37-03; P37-08; P37-09, предварительно привязанных под OziExplorer. В реальности листов может быть больше, но не слишком много - примерно на 150 загруженных листах размером 6000x4700 пикселей каждый, GlobalMapper ругается, что не хватает памяти, поэтому большие наборы карт нужно обрабатывать по частям. Запускаем GlobalMapper, у меня версия 11, в десятой версии все практически так же. Заходим в меню Файл, выбираем пункт Open Data File(s). Или, что тоже самое, Open Your Own Data Files прямо в окне GlobalMapper'а. Здесь и далее на скриншотах буду стараться показать, куда надо щелкнуть, потому что не знаю как точно называются те или иные пункты меню в русифицировнной версии GM: Выбираем нужные нам файлы, с помощью клавиш Ctrl и Shift можно выбрать сразу несколько файлов. Можно выбрать только один, а потом открыть второй, третий и так далее, все карты будут добавляться к уже загруженным в GM. В отличие от Озика GlobalMapper показывает не map - файлы в своем диалоге открытия файлов, а файлы графических форматов. Тем не менее для правильного открытия файлы привязки (map) для каждой картинки должны присутствовать в тех же папках, где и сами картинки: Карты загрузились и заняли правильные места относительно друг друга, правда рамки листов не везде обрезались правильно и наползают на соседние листы: $IMAGE3$ SAS.Планета работает с картами в проекции Меркатор, а наши карты на данный момент в проекции Гаусса-Крюгера (точнее, в ее импортном аналоге - Universal Transcverse Mercator, UTM). Для изменения проекции заходим в меню Tools - Configure:
В появившемся окне переходим на вкладку Projection и меняем следующие значения: Проекция - с Transverse Mercator на Mercator, в нижнем окошке все параметры на 0 кроме первого (SCALE FACTOR), его оставляем, как был: Систему координат пока не трогаем, перед сохранением карты поставим WGS-84, а пока нам будет удобнее работать в той системе, которая была (в данном случае Пулково-1942). Проекция настроена, нажимаем ОК. Результат преобразований налицо, параллели и меридианы стали параллельны краям экрана: $IMAGE6$ Теперь избавимся от белых рамок, которые наползают на соседние листы. Есть два способа - быстрый (автоматический) и медленный (ручной). Быстрый удобен, но почему-то не для всех карт дает хорошие результаты. Попробуем этот способ: Выбираем пункт меню Tools - Control Center или, что то же самое, кнопку Open Control Center: Появится вот такое окошко (центр управления слоями): Выделяем все листы с помощью клавиш Shift или Ctrl, нажимаем кнопку Options. В появившемся окне переходим на вкладку Cropping: Выбираем Automatically Crop Collar. Нажимаем ОК. Приблизив карту в области границы двух листов видим, что между листами образовался зазор: На самом деле это не листы раздвинулись, все осталось на своем месте, просто часть изображения залита желтым цветом. Значит, в данном случае первый способ не подходит, применим второй способ, точный, но занудный, особенно, если листов много.
|
|
| |
speleodog | Дата: Пятница, 21.06.2013, 22:09 | Сообщение # 2 |
Главный путешественник
Группа: Заслуженные
Сообщений: 307
Авто: Нива 2121
Награды:
9
Репутация: 4
Замечания: 0% ± Статус: Вне сайта (А разве вне сайта есть жизнь?)
| Продолжаю Опять заходим в центр управления слоями через меню Tools - Control Center, все листы теперь выбирать не нужно. Выбираем первый лист (у меня это P-37-02), нажимаем кнопку Options (можно просто на первом листе дважды кликнуть мышью). В появившемся окне также переходим на вкладку Cropping и выбираем на этот раз Crop to Manually Specified Lat/Lon Boundary: Автоматически появится окошко для ручного ввода границ листа. Здесь нам нужно указать границы местности, изображенной на данном листе (сверху вниз: северная, южная, западная, восточная :)). Если вы имеете минимальное представление о топографии, вы без проблем определите, где у листа границы. По моим наблюдениям в большинстве случаев западная и восточная границы определяются правильно автоматически, одна из границ - северная или южная тоже. В некоторых случаях неправильно определяются все границы. Для листа P-37-02 северная граница будет 64° (определена автоматически верно), южная 63°40' (нужно вводить в градусах в десятичной системе, поэтому вводим 63.6666666666), западная 37, восточная 38 (определены автоматически верно). Правильные границы получатся такие: Нажимаем ОК Аналогично вводим вручную границы для всех остальных листов. Если все правильно, то листы состыкуются без зазоров: $IMAGE3$ Подготовимся теперь к сохранению получившейся карты в формате Google Maps Tiles. Нужно определиться с системой координат, можно сохранять и в Пулково-42, можно и в WGS-84, от выбранной СК зависят дальнейшие действия по подключению карты к SAS.Планета. Я перед сохранением меняю СК на WGS-84, для этого нужно зайти в тот же диалог, где ранее меняли проекцию на Mercator (через меню Tool - Configure). Выбираем СК (datum) WGS84, нажимаем ОК: Все преобразования карты закончены, осталось только сохранить ее в формате Google Maps Tiles (порезанную на куски (тайлы) по 256x256 пикселей, каждый из кусков озаглавлен в соотвествии с его местом в карте). Для этого выбираем пункт меню File - Export Web Formats (Google Maps, VE, WW, etc.) - Export Google Maps Tiles. Будьте внимательны, если у вас GlobalMapper 10-й версии, то пункт Export Google Maps Tiles будет не вторым, а первым в списке:
Появится окошко, в котором можно задать параметры экспорта: Остановимся только на тех параметрах, значения которых имеет смысл менять: Zoom Level Setup - максимальный уровень сгенерированных тайлов, указанный здесь уровень отличается на 1 в меньшую сторону от уровня, отображаемого в SAS.Планете, то есть, тайлы 13 уровня мы будем видеть в SAS.Планете при масштабе 14x. Number of Zoom Levels to Use: 5. Сколько всего уровней генерировать вниз от максимального, указано 5, значит будут сгенерированы тайлы 13, 12, 11, 10 и 9 уровней. Эти параметры GlobalMapper выбирает автоматически, можно оставить их по умолчанию, если результат не устроит, можно будет в дальнейшем удалить лишние уровни или наоборот, сгенерировать недостающие. Tile Image File Format - графический формат для тайлов. Я пока сильно не задумывался, какой формат в данном случае лучше, для себя остановился на JPG. Поставим галку напротив последнего пункта - Skip Empty Tiles. Если между листами имеются промежутки, которые GlobalMapper заполняет желтым цветом, тайлы для таких пустых областей генерироваться не будут. Все параметры установили, нажимаем ОК. GlobalMapper предложить указать папку и имя *.htm - файла. Файл называем как хотим, он нам, в принципе, не пригодится. Если интересно - можете по окончании всех работ открыть этот файл и посмотреть, что получилось. Ну вот, процесс пошел, появилось вот такое окошко:
Внизу написано, что окончание примерно в воскресенье в 11:25. Иной раз, когда листов загружено много, процесс может занять полдня.
Дождались окончания, тайлы готовы, в выходной папке сформировался файл формата htm и 5 папок: Z9 - Z13. Подключим теперь наш набор тайлов в SAS.Планете в качестве новой карты. Список картографических сервисов, с которыми умеет работать SAS.Планета, не зашит в программу жестко, а может легко пополняться пользователем. Каждый тип карт описывается специальным файлом с расширением zmp, находящимся в папке \maps основной папки программы SAS.Планета. Исчерпывающее описание файлов zmp можно найти в файле readme.txt, поставляемом с SAS.Планетой. Создадим для нашей карты новый zmp, для этого скопируем уже имеющийся файл GoogleSat.zmp под новым именем, например Example.zmp. Теперь заходим в получившийся файл, как в архив (Total Commander позволяет это делать даже без изменения расширения на zip, если вы пользуетесь проводником, измените расширение на zip, откройте архив WinRAR'ом или WinZip'ом). В архиве лежат 4 файла: 18.bmp, 24.bmp, GetUrlScript.txt и params.txt. Открываем params.txt, вот его содержимое:
[PARAMS]pnum=1 GUID={F6574B06-E632-4D5F-BC75-C8FA658B57DF} name=Спутник (Google) name_9=Satellite (Google maps) asLayer=0 DefURLBase=http://khm.google.com/kh/v=60&hl=ru projection=1 sradiusa=6378137 sradiusb=6378137 NameInCache=sat separator=0 Ext=.jpg UseDwn=1 Usestick=1 UseGenPrevious=1 Usedel=1 Usesave=1 UseAntiBan=1 Sleep=1000 DefHotKey=71 ContentType=image/jpeg BanIfLen=4321 Модифицируем этот файл следующим образом: строку pnum=1 удаляем, в строке GUID={F6574B06-E632-4D5F-BC75-C8FA658B57DF} изменяем уникальный идентификатор. Если у вас есть программа для их генерирования, то генерируем и вставляем новый, а можно просто случайным образом изменить пару знаков в имеющемся с учетом того, что все знаки в GUID'е - это знаки шестнадцатиричной системы счисления, то есть цифры от 0 до 9 и латинские буквы от A до F, другие символы недопустимы. в строке name=... меняем имя карты, например, "Мои карты 1:100000", с строке name_9= то же самое, только по английски, например "My maps 1:100000". Если не планируется использовать SAS.Планету с английским языком пользовательского интефейса, то можно эту строку вообще убрать, но если вы хотите выложить свой zmp-файл в Интернете, то лучше оставить, чтобы англоязычным пользователям было понятно. Строку DefURLBase=http://khm.google.com/kh/v=60&hl=ru удаляем совсем, ведь мы будем пользоваться тайлами, лежащими в кэше. NameInCache=sat меняем на NameInCache=my100000. My100000 - так будет называться папка с тайлами для новой карты в кэше SAS.Планеты.
Строку DefHotKey=71 удаляем. В конце файла или между двумя любыми строками добавляем строку: CacheType=4. В результате получилось:
[PARAMS]GUID={F6574B06-E632-3D5F-BC75-C8FA658B57DE} name=Мои карты 1:100000 name_9=My maps 1:100000 asLayer=0 projection=1 sradiusa=6378137 sradiusb=6378137 NameInCache=My100000 separator=0 Ext=.jpg UseDwn=1 Usestick=1 UseGenPrevious=1 Usedel=1 Usesave=1 UseAntiBan=1 Sleep=1000 ContentType=image/jpeg BanIfLen=4321 CacheType=4 Сохраняем файл params.txt. Если вы меняли расширение файла example.zmp на zip, то поменяйте его обратно на zmp. Теперь нужно положить тайлы в папку, в которой они будут доступны SAS.Планете. По умолчанию кэш формата Google Maps Tiles SAS.Планета хранит в папке \cache_gmt основной папки SAS.Планеты. Если такой папки нет, создайте ее. В папке \cache_gmt (или в какой другой, если вы храните кэш в другом месте) создайте папку My100000 и скопируйте в нее папки с тайлами (папки Z9 - Z13) сгенерированные GlobalMapper'ом. Все готово. Запускаем SAS.Планету и, перемещаясь по какой-нибудь из ранее существующих карт, обращаем свой взор на город Онегу Архангельской области. Выбираем любой масштаб от x10 до x14 (ведь мы сгенерировали всего 5 уровней тайлов), заходим в меню Карты и выбираем пункт "Мои карты 1:100000": Теперь мы видим нашу карту в SAS.Планете и можем работать с ней точно так же, как и с другими картами: Разные уровни тайлов можно генерировать из листов разного масштаба, тогда при масштабировании карты в SAS.Планете мы будем видеть, например сначала 10-километроквку, где детализация низкая, но зато надписи крупные, затем 5-, 2-, 1-километровки и более подробные карты.
Повторюсь: Сделал все согласно этой инструкции, новая папка в SASPlanet создалась, показывается что из кеш загружаются тайлы, но изображение не появилось... :(
|
|
| |
|