Как стать автором
Обновить

Комментарии 41

Тепловые карты выглядят намного естественнее, если цвет и прозрачность убывают от центра не линейно
Градиент цвета задается специальной опцией gradient, поэтому вы сможете откорректировать его как вам захочется. Прозрачность же задается одна для всего слоя heatmap'а.
Я имею в виду прозрачность краёв кисти. Кроме того, приятно, когда даже без задания дополнительных опций всё работает хорошо.
Можно еще вспомнить о Metaball и расчетах в плавающей точке.
Квадратичное падение «яркости» от расстояния — это то, что легко сделать через более точную настройку «кисти» — можно даже алгоритически ее сгенерировать, без градиентов.
Но это не тот «внешний вид», который часто требуется задачам «подсветки» данных.
Вот я как раз алгоритмически кисти и генерировал, имитировал естественную светимость яркой точки, и выходило хорошо. Кстати, как раз на примеры Metaball и получалось похоже.
Опять же — 256 градаций для реального нормального «квадратичного спада» — это мало. При интерференции 3+ точек пойдут очень четкие градиенты, времен VGA.
Тут или webgl подключать, с float-point рендер-таргетами, или считать попиксельно самому — а это не совсем реалтайм.
если речь только о канале прозрачности, то даже 256 градаций дают довольно неплохой результат
В текущей версии прозрачность задается на весь слой и не изменяется от текущей «температуры» точки, это сделали для того, чтобы не уменьшать читабельность самой карты, возможно, это не идеальное решение, но показалось, что такое решение весьма удобно. А в целом, я готов к дискуссии и допиливанию;)

В качестве градиента по умолчанию используется самый стандартый градиент для всех тепловых карт, люди к этому привыкли и поэтому решили, что не стоит переворачивать с ног на голову представление пользователей о тепловых картах.
У кисти цвета задаются как RGBA. То есть, в них есть компонент «прозрачность». То есть, по краям кисть более прозрачная, чем в центре. Вот об этой прозрачности я и говорю.

Про стандарты на тепловые карты я не слышал. Даже если они есть, отказ от старых плохих стандартов с целью перехода на хорошие новые стандарты часто приносит компаниям хорошие дивиденты.
Аа, с этой прозрачностью, да, можно что-то сделать. Было бы здорово, если бы вы прислали нам pull-request c градиентом, который считаете более приятным, чтобы мы говорили не о каких-от абстрактных значениях, а о реальных цветах.
Мы были бы вам очень благодарны;)
Нравящийся мне вариант задаётся алгоритмически, и писать его самостоятельно ещё раз мне лень :)
Не совсем понятно, что именно меняет параметр dissipating
Это булевое значение, которое говорит нужно ли уменьшать пиксельный размер точек при уменьшении зума. Просто в некоторых случаях, если этого не делать, то на маленьких зумах все точки сливаются в одно большое красное пятно.
По словесному описанию как-будто понятно, но работа его в демке выглядит неочевидной…
Около года назад тоже понадобилась тепловая карта, и я наткнулся на решение на WebGL о котором говорилось следующее:
You can draw around 500'000 individual data points per second in realtime. Around 10'000 per frame are no problem.
Перевод
Можно рисовать 500к точек в реальном времени. 10к на кадр без проблем.

Использовать решение очень легко, по ссылке приведён пример и демо.
Это волшебно. Плюс библиотека поддерживает не только «вес» точки, но и размер.
Мне особенно понравилось медленное «угасание» (decay) старых точек — мне как раз нужна была динамичная карта (для статичной надо указать decay=0). Да и параметр «расброс» (spread) делает карту живее, что-ли…
Но и то, и то выходит за рамки задачи визуализации данных.
А что, наличие настоящей оси времени в визуализации превращает «задачу визуализации» в тыкву?
Фичреквест к Яндексу или тем разработчикам, которые не настолько ленивы, как я: сделайте кто-нибудь реальную тепловую карту на основе этого API и данных Погоды, реал-тайм.
Можно будет попробовать нафигачить, делать то почти ничего и не надо;)
Только вряд ли для этого Яндекс.Погода подойдет, насколько я знаю, API у них нет, а вот у
openweathermap можно получить данные вполне легально.
1) Я не уверен, что это не нарушает пользовательское соглашение.
2) Не стоит строить свои системы на хаках в чужих, это редко приводит к чему-то хорошему.
В общем, конечно, согласен.
Но какие тут системы, я ж просто красивую и интересную «демку» к новому API Я.Карт предлагаю. :) Тем более, обращение было, в т.ч., к самим яндексоидам. Ну и, на самом деле, в данном случае не принципиально, откуда данные брать.
А шкалу цветов почему не нарисовали?
Еще б добавление пользовательских (внешних) слоев добавили… как для ПК версии так и для мобильной особенно. Обсуждается уже 3 года, а результата так и нет…

Т.е. чтоб пользователь мог добавить кастомный (не яндексовый) слой указав его URL дабы подтянуть список объектов наносимых на карту.
По аналогии как сейчас сделан показ Яндекс.Фото на maps.yandex.ru.
Фотки работают на технологии активных областей, которая уже давно есть в апи. Недавно мы выпустили еще один модуль, который позволяет быстро показывать точечные объекты и подгружать их по требованию. Уточните, что вы имеете в виду под пользовательским слоем.
Пользовательский слой — набор объектов из внешнего источника (не Яндекс) для отображения на вашей карте. Повторюсь снова: URL на внешний вебсервис, который в определенном формате (к примеру json) выдает перечень объектов для отображения.
А уж активными областями или как то иначе их отображать — решать вам.

Грубо говоря на maps.yandex.ru и/или мобильном приложении добавить пункт меню «Подключить слой», выбрав который пользователь сам вводит источник данных.

В дальнейшем наиболее интересные источники данных сможете включить в одобренные Яндексом и т.п.
Это как у гула хотите, у которого поиск kml файла в гуловой карте просто показывает его содержимое поверх неё?
*гугла
Лучше бы расширили API линейки. А то ни хинт изменить, ни расстояние получить. Приходится городить свои велосипеды.
Если вы поделитесь с нами своим юз-кейсом и подробнее опишите функциональность, которую вам хотелось бы увидеть в линейке, мы с удовольствием добавим её в наши планы.
Ну что ж, приступим:
  • Нет возможности получить расстояние (нужно .getDistance());
  • Нет возможности изменить хинт (событие onHintRequested(ev, [ruler|distance])?);
  • Нет события изменения состояния линейки (изменения расстояния);
  • Нет возможности застайлить линейку (изменить вид точек, изменить цвет линии);
  • Нет возможности получить количество точек, через которые проходит линейка.


Q: Для чего это нужно?
A: Буквально пару недель назад мне понадобилось сделать штуку для расчета времени полета вертолета из произвольной точки A в точку B[,C[,D[,...]]] с учетом приземлений, и выводить в хинте (там, где сейчас выводится расстояние) информацию по времени и прочие вещи. Так как маршрут произвольный — Route не подходит, так как он привязывается к дорогам (и если реализовывать возможность кастомизации хинта — нужно делать это не только статическим шаблоном, т.к. содержимое оного может меняться от расстояния).
В итоге пришлось использовать обычную Polyline, и считать расстояние между всеми точками самому.
Также, эта возможность кастомизации поможет для карт для каких-либо расчетов связанных с пешеходными и морскими (не уверен в корректности этого слова, но думаю поймете) маршрутами. :)
интересно, Вам ответили?
Как видите — нет :)
ну, надеялся хоть в личку… эх
Существует ли возможность раскрасить не по количеству точек, а по некоторым параметрам для каждой точки?
Например. Есть 100 квартир, стоимость у квартир различается. Я размещаю все 100 квартир на карте и задаю для каждой точки определенное значение (стоимость квартиры) и в итоге получаю тепловую карту стоимости квартир по городу.
Данная реализация была бы значительно интересней, чем простое цветовое представление распределения точек.
У себя на проекте реализовать получилось, но хотелось бы, чтобы это отображалось прямо на вашей карте, т.к. используем именно Яндекс.Карты для поиска вариантов на карте.
Как это выглядит сейчас: http://kvarnado.ru/аналитика/
Как это реализовано:
  • Разбиваю карту на квадраты, смотрю среднюю стоимость какого-либо типа жилья в каждом квадрате.
  • В зависимости от максимального и минимального значения среди всех квадратов задаются зависимости стоимость->цвет
  • В зависимости от цвета данного района рисую на карте круг данного цвета.

Можно было бы еще дополнить это. Например, прозрачность цветного круга зависела бы от количества вариантов и т.д.
На данный момент такой функциональности нет, и я не уверен, что она появится, поскольку такой кейс использования тепловых карт все же реже. Но схожих картинок, как у вас в проекте, можно добиться и с нашим модулем несколькими методами:
  • отквантовать данные на несколько дискретных уровней, задать для каждого соответствующий градиент (изменяя в нем только прозрачность, но не цвет), для каждого уровня задать отдельный слой heatmap'а и наложить его на карту
  • расставить точки на большом расстоянии друг от друга, чтобы они минимально аффектили друг друга, задать каждой точке вес равный определенному значению (дополнительные данные, которые вы хотите отобразить)
они ж вроде механизм плагинов демонстрируют, типа можно свой по аналогии написать
Я уже за прошедшее время реализовал таки.
Может пост запилю. Интересно получилось, но боюсь, что мой быдло-код раскритикуют )
А как совместить Heatmap и LoadingObjectManager? Чтобы не все данные сразу грузить, а только для видимой области (для этого прекрасно подходит LoadingObjectManager), но отображать через Heatmap?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий