среда, 22 января 2014 г.

Устаревшая версия

Кто-то из вас возможно пользовался версией приложения которая была написана в начале 2013 года. Я ее в то время разместил по адресу starik-maps.s3.amazonaws.com/index.html. Все это время она прекрасно работала и работает по сей день. Но дело в том что хостинг Amazon на котором я это дело размещал бесплатен только в первый год использования, а теперь, по прошествии года, он хочет денег. Конечно там есть такие условия что до определенного количества траффика денег не берут, но то что они мне шлют письма, мол оплати, мил дружок, настораживает. Поэтому я всю эту старую начинку перенес на old.kartofan.info. Если вам нравиться эта версия, то велком по этому адресу. По старому адресу я конечно ничего не удалил, но и проверять работу тоже не буду, умрет и ладно.

Ели же у вас на той старой версии есть какая-то информация которую нужно как-то сохранить, точки например, то черканите в комментариях, разберемся.

А вообще, лучше перебирайтесь на новую версию.

вторник, 7 января 2014 г.

Конвертируем карты из OZI

Ну что ж, у многих из вас за многие года скопилось очень много карт для OZI. Эта программа весьма и весьма распространена, она имеет фатальный недостаток. Поэтому надо бы научиться все эти карты переделать в новый, стильный, молодежный формат. А не закрытый б-гмерзкий ozf.

Сделать это на самом деле очень даже просто.

Что нам для этого понадобится:
  1. Global Mapper - программа для редактирования, конвертирования, и вообще чего хочешь делания с географическими картами. Стоит денег. Деньги хотят просто конские, ну да и инструмент может очень многое. Хотя если у вас нет лишних денег и лишних предрассудков, то вы сможете при желании найти и обесплаченную версия там, где вы обычно находите фильмы за несколько дней до проката. На данный момент релизная версия 15, в ней и будем производить наши эксперименты.
  2. MapMerge - утилита от создателей ozi. Пригодится в том случае когда есть много исходных файлов и их нужно склеить в один, это конечно все можно сделать в глобалмапере, но зачем если это все можно автоматизировать.
  3. Dropbox
  4. Demapper или OziMapTrans
Склеивание карт

Итак вы выбрали то что хотите конвертировать. Если файл карты у вас одним большим куском, а не много мелких файлов, то переходите к следующему пункту.

Если это несколько карт, то вам нужно будет их объединить каким-то образом в одну. Это можно сделать двумя путями:
  • MapMerge - просто и легко, пару кнопок ткнул и все готово, но и результат иногда может не порадовать. Вобщем стоит начать с этого варианта. Чтоб не лить лишней воды даю ссылку как это делать - http://ozi-piter.narod.ru/new_video/primer_skleiki_kart.html, вот еще может быть полезно - http://www.kotelnikov.net/blog/map-merge-for-oziexplorer, а тут вобще видео - http://www.youtube.com/watch?v=AJfgd6J6poY
  • Если результат предыдущего варианта не устроил то можно тоже самое сделать в ГлобалМаппере, но это уже не совсем тривиальный процесс (а кто-то говорит что проще и не куда). И тоже все уже украдено до нас - http://www.karelia-life.net/articles/atcl0003/maps_merging.htm. Но там на самом деле трешь и угар какой-то, я например так и не смог ничего сшить, проще оказалось картинки склеить и привязать заново. Но мало ли.
Итак у нас теперь файл карты один, поехали дальше.

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

Итак у вас должно быть 2 файла, один с расширением map  и еще какой-то. Если этот какой-то картинка, смело пропускайте этот пункт.

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

Итак в какие бывают исходные файлы:

  • .map + .png/.jpg/.gif - Самый лучший вариант. У вас есть карта в виде какого-то графического файла и еще один файл с таким же названием и расширением map. Map файл содержит в себе все данные по которым программа определяет к какой части на шей планеты относится графический файл. По простому файл привязки. Если это ваш вариант, то переходите к следующему пункту.
  • .map + .ozf2/.ozfx3 - это внутренние форматы ози. По сути своей это теже самые пачки тайлов которые получатся у нас с конце, только сжатые в одну кучку и для пущей важности зашифрованные. Но как же получить картинку если формат озика закрыт. Ну как обычно это оказывается, на каждую хитрую гайку, найдется что надо. И это надо называется demapper. 
Скачиваем эту программку. Открываем в ней свой файл и нажимаем декодировать.
Рядом с вашим файлом ozf появится файл с таким же названием, но уже в виде картинки с расширением PNG. Эту процедуру можно провести с несколькими файлами одновременно.

Теперь вам нужно открыть ваш файл с расширением map в любом текстовом редакторе и поменять в третьей строке расширение ozf на png.
Сохраняйте это все.

Теперь у вас будет 2 рабочих файла Карта.map и Карта.png

Есть альтернативная программа - OziMapTrans. У нее плюс не нужно править файл Map, но работает она дольше и нужно совершать больше манипуляций. Кому надо расскажу в комментариях.

Нарезка.

Теперь нам нужно нарезать эту картинку на маленькие кусочки (тайлы) чтобы скормить эту карту сервису.

Это можно сделать несколькими путями. Самый продвинутый это через открытый пакет программ для работы с географическими картами GDAL. Если вы решите пойти этим путем, то ваша совесть по отношению к богам лицензионных отчислений будет чиста. Но этот путь не самый тривиальный, все программы консольные и т.п. Поэтому рассматривать его мы сейчас не будем. А посмотрим в сторону программы Global Mapper. Я предполагаю что вы ее уже "купили" и установили. Руссифицировать ее не обязательно, переводы корявые, лучше пусть будет в оригинале.



Нажимаем верхнюю кнопку открыть файлы и выбираем нашу картинку с картой. И ваша картинка должна загрузиться вместе с масштабной линейкой.


Теперь делаем следующую последовательность действий:

В верхнем меню выбираем File - Export - Export Web Formats...

Вылезет окошко


Выбираем Google Maps Tiles. И Ok.

Появилось окно:



Что тут к чему:
  • Data Set Name - без разницы, это название, оно нам не понадобится
  • Zoom Level Setup - это максимальный зум который будет доступен на карте. В принципе он определяется автоматом, но если есть желание можно изменить, сделать еще больше, но тогда качество на крупных масштабах естественно упадет, т.к. из картинки будут выжиматься все соки, ну как цифровой зум на фотоаппаратах.
  • Number of zoom levels to use - Это число уровней увеличения. В принципе тоже можно не менять, Но если хочется карту на глобусе посмотреть то ставьте побольше.
  • Формат не меняем. PNG очень хороший для наших дел.
  • Default Background Map Layer - не нужно, т.к. это настройки файла который генерируется автоматом чтобы можно было оценить качество полученных тайлов. Понадобится только один раз. Потом удалим.
  • Следующий пункт тоже пофиг, т.к. нам этим не пользоваться.
  • Transparency - прозрачность. Не трогаем. Это нужно для того чтобы крайние куски карты которые будут маленького размера имели прозрачный фон там где нет информации.
  • Дальше галки по порядку активные
    • Делать прозрачные тайлы - да
    • Пропускать существующие тайлы, т.к. у нас таких еще нет - нет
    • Пропускать пустые тайлы - если да то вместо пустых тайлов будет пустота, это хорошо если карта не квадратная, если нет, то на этих местах тоже будут тайлы
    • Черт его знает что делает - лучше нет
    • Экспортировать только полные тайлы - конечно нет, т.к. иначе краев не будет
    • Создавать файлы привязки для тайлов - это нам тоже не надо
    • Делать цветность тайлов восьмибитной - нет
    • Экспортировать PNG для тайлов с прозрачностью - у нас и так уже.
В каких-то местах я могу и ошибаться в том как работает тот или иной пункт, и если не уверены, делайте как на картинке. И жмите ок. (Сверху есть еще одна вкладка, но она нужна если вы хотите экспортировать только часть карты)

Открывается окно для сохранения результата. Выбираете папку куда сохранять, лучше создайте новую пустую и вводите имя html файла. Жмите ок и ждите.

Дождались? Идите в ту папку куда все сохраняли. Видите HTML файл? Открывайте его и смотрите все ли хорошо.

Если карта как надо выглядит, при увеличении ничего не плавает, то идем дальше.

Добавление карты.

Как работать с программой локально будет отдельная статья. А теперь нам нужно полученный результат выгрузить в интернет. Чтобы с сайта пользоваться полученной картой. Зная что меня будут читать люди, которые с небольшой паранойей относятся к своим супер секретным картам, хочу сразу же оговориться. Ваших карт кроме вас никто и никогда не увидит. Если конечно вы этого сами не захотите. Вся система программы устроена так что ваши данные хранятся только на вашем компьютере, и более того только в том браузере в котором вы все настроите. Если вы откроете сайт в другом браузере, то он будет девственно чист. Все настройки конечно можно синхронизировать с внешней базой данных, но для этого нужно совершить определенные действия, а просто так ничего ни куда не отсылается. Убедил? Тогда идем дальше. Не убедил? Чтож, ждите статьи как работать локально и с выключенным интеренетом. А мы пока движемся дальше.

Чтобы добавить карту в программу вам нужно как минимум прочитать эту статью: http://kartofan-blog.blogspot.ru/2013/12/blog-post_28.html

Прочитали? Хорошо. Если нет - идите читайте. Никто не говорил что будет легко. Просто? Да. Но не легко. По крайней мере в первый раз.

Теперь чтобы работать с картой нам нужно получить ссылку вида ТРУЛЯЛЯ/{z}/{x}/{y}.png

Для этого идем в нашу получившуюся папку в которой видем подпапки типа Z10, Z11 и т.п. В этих папках и лежат наши кусочки карт.

Их нужно закачать в интернет.

Самый-самый простой способ это сделать - установить программу Dropbox (на самом деле подойдет любой сервис который может отдавать прямые ссылки).

Идите сюда - https://www.dropbox.com/install и следуйте всем инструкциям.

Установили? Отлично.

На компьютере теперь где-то у вас есть папка Dropbox. Ищите ее. В принципе во время установки она должна будет открыться.

ОБЯЗАТЕЛЬНО находите в ней папку Public. Эта папка по умолчанию открыта на весь интернет.

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

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

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

Выбираете пункт "Копировать общею ссылку"

Теперь у вас в буфере обмена ссылка с которой будем работать. Вставьте ее в какой-нибудь текстовый редактор.

Получилось что-то типа: https://dl.dropboxusercontent.com/u/какие-то цифры/папка что вы создали/Z какая-то цифра/цифра раз/цифра два.png

В этой строке меняете:
  • Z какая-то цифра -> Z{z}
  • цифра раз -> {y}
  • цифра два -> {x}
И получается что-то типа:

https://dl.dropboxusercontent.com/u/какие-то цифры/папка что вы создали/Z{z}/{y}/{x}.png

Все, теперь эту строку можно использовать в добавлении карты. И когда все это дело загрузится в интеренет можно будет полноценно работать.

CRS ставьте EPSG3857.Ext - в будущем когда будет коррекция привязки на лету пригодится.

Заключение

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

суббота, 4 января 2014 г.

Как работает кэширование карт

В версии 3.1.0 было добавлено кэширование карт. Для чего это нужно? Все просто, если у вас хороший интернет, да и сидите вы в мягком кресле у себя дома, за большим компьютером, то вам особо думать об этой функции не нужно.А вот если вы выезжаете в поля, где интернет то есть то нет, то вам стоит прочитать этот раздел до конца.

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

Как же включить эту чудесную функцию? Да проще некуда. На панели есть кнопка или в Меню - Настройки - Кэширование.


Появится окно:


И выбирайте тип кэширования:
  • Интернет - все карты качаются чисто из интернета, никаких кэшей
  • Интернет+Кэш - тайлы беруться из интернета, потом проверяется есть ли такой в кэше, если есть, то все хорошо, если же нет, то идет запись в кэш. Это единственный способ (пока) как можно добавить карты в кэш.
  • Кэш+Интернет - Сначала смотрится карта в кэше, если она там есть то грузится оттуда, если нет то из интернета.
  • Кэш - чисто из кэша, никакого трафика.
Для каждого режима в информационной панели (включается если ее не видно в настройках в меню) отображаются свои иконки (вам домашнее задание посмотрите какие) которые однозначно идентифицируют режим:


ВАЖНО!

Но есть одно замечание. Тайлы не будут записываться в кэш если у вас включено дополнение типа адблок (то что блокирует рекламу). Выключите его, рекламы-то все равно нет, или хотя бы разрешите доступ к katofan.info/server.php (что это ниже) и все должно стать хорошо.

Дальше идут технические подробности которые можно и не читать.

Ну во первых я написал сразу два кэширующих сервера. Зачем это нужно? Первый сервер на PHP.  Он простой как палка, тупо дергает картинку и отдает ее дальше в JSONP с картинкой закодированной в Base64. Если вам ничего это не понятно, но хочется сервер использовать свой (что только похвально), то тупо закидываете файл server.php из исходников на свой сервер с PHP и прописываете его в настройках программы. Все должно заработать.

Второй сервер написан на NodeJS. Это реализация Javascript на сервере. Я его писал в начале, но т.к. PHP несколько ближе основной массе населения, то решил написать и тот что выше. Но в чем прикол спросите вы? А прикол в том что этот сервер помимо кэширования сохраняет сами картинки карт. Это очень удобно если вы хотите во чтобы то ни стало сохранить какие-то карты. Т.е. он создает для каждого типа карт отдельную папочку и раскладывает там все скаченные тайлы. К тому же его очень просто запустить на локальном компьютере. Ставите NodeJS, с помощью npm ставите все зависимости и запускаете node app.js. Все сервер работает на 127.0.0.1:3000/cache (если нужно более подробно пишите в комментариях)

Теперь если вы решили сменить сервер, то нужно его прописать в программу. Нет ничего проще. Меню - Настройки - Установить кэширующий вервер. Пишите туда ваш адрес http://katofan.info/server.php или http://127.0.0.1:3000/cache и все.

Пока нет возможности импорта-экспорта кэша, но я работаю в этом направлении.


пятница, 3 января 2014 г.

Небольшие видео работы

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

Как пользоваться быстрыми перемещениями:

Как пользоваться измерителем расстояний:

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