суббота, 28 декабря 2013 г.

Как добавить карту вручную

Попытаемся добавить карту вручную.

Перво наперво надо найти какую карту будем работать. Это сделать довольно просто. Сервисов которые предоставляют картографические данные полным полно. Начиная от спутниковых снимков заканчивая историческими картами или аэрофотосъемкой времен второй мировой. Можно взять и скачать бесплатную программу SASPlanet в которой уже собрано огромное количество карт и сплагиатить их оттуда. Можно самому нарезать на тайлы растровую карту и добавить ее. В не зависимости какой источник какрт и где вы его найдете алгоритм будет один и тот же.

Для начала для тех кто совсем не в теме коротенькая справка.

Все карты которые есть в интернете, грубо говоря, предоставляются в виде тайлов. Что за зверь такой? Это берется огромная простыня карт, в огромном разрешении и занимающая много места. И если вы попытаетесь разом загрузить такую, то ваш интернет провайдер не порадуется, да и места на дисках не хватит, это точно. Как же быть? Хитрые товарищи подумали-подумали и сделали очень просто - разрезали это полотно на маленькие кусочки и назвали их тайлами, ну или плитками по-нашенски. И теперь когда вы смотрите на какие-нибудь Яндекс карты, то вам не нужно грузить огромный объем данных, а хитрая программа просмотра, в зависимости от того места которое вы разглядываете, просто подгружает нужные тайлы на лету. И все довольны. Обычно тайлы это картинки размером 256 на 256 пикселей, ну это типа стандарта, хотя бывают и других размеров. Вся эта процедура делается для разных масштабов карт, чтобы мы могли крутить колесико мыши.

Где же эти тайлы нам взять? Тут все несколько запутаннее. Каждый сервис предоставляет тайлы по своему. Кто-то вообще запрещает использовать свои тайлы по прямым ссылкам. Но в основном открытые данные предоставляются в виде {адрес кокой-то}/{z}/{y}/{x}.png, где z - уровень масштаба, чем меньше тем обзорнее, x и y  координаты тайла, но не обычные а в проекции меркатора (грубовато выразился, но кому интересно копайте дальше). Эта проекция ужасна чуть более чем полностью, но отлично подходит для подобных вещей.

Что ж приступим.

Выбираем жертву. Находим формат тайлов в котором эта жертва отдает. Я выбрал такую вот симпотишную карту в виде акварельного рисунка http://maps.stamen.com/watercolor/#12/54.3303/48.3875

Выбирайте в меню - Карты - Сохранить карту


Появляется окно


Это окно по сути дела редактирует настройки активной карты. А так как у нас карта пока что та что по умолчанию, то и данные там по умолчанию. Итак по пунктам:

  • ID - это идентификатор карты, лучше его писать английскими буквами и без пробелов, а то мало ли какие ошибки могут вылезти. Двух карт с этим одинаковым полем быть не может, если вы попытаетесь сохранить карту а такой id уже есть в базе, то всплывает вопрос о перезаписи, это же касается и редактирования какой-либо карты, там тоже спросит. В общем нужно тут писать коротко и по сути.
  • Заголовок - Это то что будет в меню и в правом углу снизу.
  • Тип сервера - тут либо img, либо wms. В нашем случае это img - т.к. мы получаем информацию в виде обычных тайлов, статических картинок. А wms сервера это отдельная песня, которую мы споем попозже.
  • Слои - это для wms. Можете написать туда все что угодно и это ни на что не повлияет в данный момент.
  • Группа - это для удобства навигации в меню все карты разбиты по группам. В этом поле есть автодополнение по всем группам которые у вас уже имеются. Если ничего не напишите ничего страшного, просто будет группа Undefined
  • Источник - не знаю зачем вообще этот пункт был сделан, но он есть и ни на что не влияет, типа просто выбор откуда берутся карты.
  • CRS - это очень важный пункт. У каждой карты есть не только проекция но и система координат. Это очень обширная тема если есть желание почитайте в википедии статью про систему координат. Но слава макаронному монстру в мире есть определенные стандарты и в основном все сервисы предоставляют карты в WGS-84/сферический меркатор и для таких сервисов нужно это поле оставить пустым либо выбрать EPSG3857. 95% что все будет хорощо. Но яндекс например почему-то считает что это не их путь и все карту у них в системе WGS-84/цилиндрический меркатор. Тогда надо выбрать EPSG3395. К тому же в будущем будет функция коррекции привязки на лету и если вы добавляете карту сделанную вами то поставьте EPSG3857.Ext это будет все таже EPSG3857, но программа будет добавлять дополнительный функционал именно к этой карте.
  • Ссылка - в нашем случае пишем туда http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg - x,y,z - это уже обсудили, а вместо {s} подставляются случайным образом буквы a,b,c,d когда программа запрашивает тайлы с сервера. Это сделано для того чтобы можно было паралельно загружать сразу несколько картинок и не создавать излишнюю нагрузку на сервера. В общем балансировка. При этом в этот адрес можно вобще написать произвольные переменные например {foo} и забацать для нее функцию которая будет для каждого тайла вычисляться, но я пока не придумал как сделать добавление этих функций пользователем, поэтому если вам нужно сделать что-то нестандартное то напишите мне что-нибудь придумаем.
  • maxZoom - ограничитель на максимальный уровень увеличения.
  • minZoom - ограничитель на минимальный уровень увеличения.
  • maxZoom - стартовый масштаб, если карту открывают первый раз.


Получилось как-то так. Теперь жмите отправить. И можно карту выбирать из меню.


И вот что получилось в итоге.


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

Например чтобы не набирать данный пример в ручную просто выберите в меню пункт JSON - загрузить внешние карты. И когда появится окошко введите туда вот эту строку https://api.github.com/repos/starikan/kartofan-public-feed/contents/aquamap.json?callback и нажмите OK. Все теперь карту можно выбрать и пользоваться.

пятница, 27 декабря 2013 г.

Как работать с картами

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


Видите там внизу справа она даже называется Unknown Map. Типа не известная карта.

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

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

Не пугайтесь раньше времени, не все так плохо как кажется, и добавить карты с которыми можно работать очень просто (хотя есть и сложные способы). И на это есть несколько способов:

  1. Я заранее подготовил некоторые карты на мой вкус и цвет. Их можно очень легко добавить.
  2. Если вы знаете сервис который предоставляет карты в виде нарезки тайлов, то его тоже добавить очень легко.
  3. Можно добавить WMS сервис. Это разные карты погоды, действующих вулканов, пробок и т.п. вещей (к сожалению пока нельзя добавить как отдельный слой, но я работаю над этим)
  4. Можно сконвертировать какую-то растровую карту (например из OZI) и добавить ее.
  5. В будущем можно будет просто привязать какую-нибудь растровую карту.
Когда вы добавите свои карты, сделаете под себя все настройки, все эти данные можно будет экспортировать и поделиться с общественностью. Вдруг кому-то понадобится.

Сейчас опишу пункт первый, остальные как-нибудь попозже.

Делаем так:

Выбираем в меню JSON - Загрузить все из внешнего JSON файла

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

Вот и все.

Теперь нужно нажать кнопку для установки карт. Вылезет меню.


Это сгруппированые как мне понравилось карты, можете потом переделать. Щелкаете на группу она открывается:


Щелчок на карте устанавливает ее в активное окно (это то что с полосочкой сверху, т.е выделенное), я поставил OpenStreetMap:


Ну и в итоге можно сделать вот так:


По моему вполне не плохо.

3.0.2


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

Быстрые перемещения

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

Но это еще не все. Я вот, например, очень ленивый человек. А так как я очень даже люблю повозится с картами, мне приходится часто, скажем так, перескакивать с места на место на карте. Например между районами или населенными пунктами. Что обычно делается в таких случаях? Просто тупо мотать карту до нужного места? Не удобно. Обычно включают поиск, вводят название чего-то или координату и программа перескакивает в это место. Это удобно и это будет в этой программе, но так уж сложилось что мне нужно чаще всего не больше десятка таких мест, и к тому же одних и тех же. Это районные центры около города ну и еще несколько мест, на которые перепрыгнув уже можно просто и легко, сориентировавшись, перемотать карту куда надо.

Хватит болтать, вот как  это работает.


1. Открываем меню и выбираем пункт "Добавить быстрое перемещение"


2. Откроется окошко:
  • ID - это уникальный идентификатор места. Он генерируется автоматически. Можете его поменять, но проще не трогать. Главное чтобы не было нескольких мест с одинаковым значением иначе они просто перезапишутся
  • Заголовок - тут пишите все что хотите (но написать надо иначе какой смысл во всем этом), красное поле если пусто
  • Координаты - берутся текущие, можете менять, но если что напишите не то - поле станет красным и ничего не сохранится.
  • Группа - если собираетесь делать много точек то ради удобства можете раскидать их по разным группам, будет удобнее ориентироваться в меню, если не много то и не морочьте голову. Писать можно что угодно. (Кстати если вы уже перед этим вводили какую-то группу, то в этом поле работает автодополнение по первым буквам)

3. Все ввели? Жмите сохранить. Перетаскивайте карту в другое нужное место и все снова и опять. Повторите нужное число раз.
4. Теперь чтобы воспользоваться тем что получилось просто нажмите на того человечка что бежит или выберите пункт в меню (когда-то будут горячие клавиши еще)
5. Появится меню в котором нужно выбрать место, нажать на него и все карты переместятся в эту точку.

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

четверг, 26 декабря 2013 г.

3.0.1


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


Последняя стабильная версия приложения всегда теперь будет по адресу http://kartofan.info/

Ежедневные (ну в меру сил и времени) обновления будут появляться по адресу http://dev.kartofan.info/ и вся писанина которую я буду здесь писать относительно обновлений будет относиться именно к этой версии.