Клуб API Карт

Тепловые карты

Пост в архиве.
TomshaPavel
14 октября 2013, 14:23

Всем привет!

Скажите, есть ли возмоность создать тепловую карту с помощью Яндекс.Карт? Под тепловой картой понимается нечто такое:  ,

только натянутое на карту города.

10 комментариев

Встроенной поддержки нет, но есть много внешних библиотек, которые могут сгенерировать слой из ваших данных и его можно добавить на карту

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

У меня есть заказ на такой пример, так что вот прям сейчас я им занимаюсь.

Пример будет для версии АПИ 2.1-beta

Пока в таком виде.

Все еще требует оптимизации производительности, но уже можно пользоваться

C помощью Яндекс.Денег? Найти исполнителя и заплатить ему? Теоретически, можно, да.

Хах! С помощью Яндекс.Карт, конечно!:) Исправил.

А так — бабулька самое хорошее решение вам подсказала Бабулька с отдельным своим слоем.

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

То есть, по сути, генерировать картинки своими силами, а потом накладывать их на карту?

Если углублятся в тему, то да.

Фактически, проще всего генерировать кучу картинок с координатами наложения, затем накладывать их на слой (одну большую картинку), либо сразу одну большую, если иначе никак. Затем нарезаете их на кусочки — тайлы (tile). Все это делаете для каждого зума. Раскладываете в папочки в виде /{zoom}/{x}/{y}.png и создаете слой, с указанием как грузить эти самые тайлы. В общем-то, все.

Тулзы для нарезки есть в опенсорсе, тулзы для генерации тоже есть, но они специфические, ну и создание слоев описано в доке карт. Кстати, для гугла и openstreet механизмы те же самые, но апи немножко другое — т.е. создание слоя будет выглядеть чуть иначе, просто другой js.

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

upd: А, да. Часто бывает удобно генерировать тайлы сразу из кусочков, которые входят в этот тайл. Часто это бывает даже быстрее, чем создавать общий слой — выигрышь, как минимум, по памяти.

И еще есть нюанс при загрузке тайлов, на которых ничего нет. Либо отдавать 1px gif вместо них (например, через http://wiki.nginx.org/HttpEmptyGifModule), либо возвращать 204 код (return 204 в nginx) — нет контента. Первый вариант работает для всех АПИ карт, второй может криво работать в ие (хорошо бы уточнить).

Еще инфа по теме.

Поиск по "Генератор тайлов": например, http://habrahabr.ru/qa/16818/

Как работают Яндекс.Карты (в принципе, все апи карт): http://api.yandex.ru/maps/doc/theory/yandex-maps-theory.pdf — ищите Слоёв, Слои, и т.д.

Библиотека для работы с картинками и консольные тулзы Imagemagick

В конце концов, можно собрать карту нужного зума в любом редакторе (photoshop, gimp, ...) и порезать на тайлы силами редактора.

Если я правильно помню, у тайла постоянный размер 256х256px.

upd:

Отсутствие тайлов, ограничение по min/max zoom 

Нарезка слоя на тайлы и др. инфа по ссылкам: http://webmap-blog.ru/google-maps/ispolzuem-programmu-maptiler-dlya-podgotovki-tajlov-dlya-google-maps