логин: 
<< предыдущая заметкаследующая заметка >>
16 октября 2015
Ау, IT-специалисты, нужна помощь зала.

Задача: есть большие массивы данных — точки GPS (иногда каждые 100 метров) и некоторое измерение в них (радиация). Надо отображать это на картах (например Google.map, но не столь принципиально). Отображение должно идти разной палитрой — цветом в зависимости от измеренного. У Гугла есть красивая библиотека, которая показывает размытые пятна «теплоты». Там есть даже возможность выставлять каждой точке весовой коэффициент, но «теплота» в итоге все равно строится на факте присутствия измерений — чем больше помечено соседних точек, тем Гугль покажет краснее место. А нам бы хотелось получать карты «теплоты» исключительно по данным измерений, а не их кучности.

Собственно, вопросы:

1) Существует ли какой-то метод в API Google или вид других карт, которому в JS задается массив точек, а он рисует красивые пятна в зависимости от замеров в точках этой местности?

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

3) Есть ли еще какие-то идеи?

Выглядит сейчас примерно так:

Кому интересно — там в HTML все тестовые данные. Но это не то, что хотелось, потому что если увеличивать масштаб, пятна меняют цвет — кучность измерения типа падает. Да и тормозит, кстати, адски — а ведь тут только один короткий тестовый трек, что будет, когда район такими треками будет исчеркан вдоль и поперек?

PS: На вопрос, что это за фигня, нафига это нужно, и почему бы вам не купить вместо этого телевизор со встроенным компасом, отвечаю: просто товарищ делает GPS-дозиметрию в некоммерческом проекте, а я ему немножко пытаюсь помочь с серверной частью. Задача именно такая, нужно именно это. На вопрос, что на карте делают все эти кнопки, отвечаю: это чисто моделька с попыткой управлять параметрами отображения. Если вы программист, знакомый с API Google.map, вам не составит труда глянуть в HTML. А если нет, то я и объяснить не смогу.

UPD: Мне вот уже два человека прислали ссылки на различные heatmap. Друзья, так и в примере — гугловский heatmap. Но это не то, потому что heatmap показывает цветом плотность точек, а не измерение в них. Вы можете предложить такую настройку heatmap, чтобы точка оставалась зеленой даже если в нее и вокруг нее скопилось не 1, а 10000 измерений с фоновым значением? Если да — буду благодарен. Но я такого для heatmap пока не нашел, он создан показывать кучность, а не измерения.


Заранее спасибо за дельные советы.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Linux Ubuntu Firefox
 Кемерово
0
0
Oreolek
Вот плагин для библиотеки Leaflet специально для heatmaps:

https://github.com/Leaflet/Leaflet.heat
http://leaflet.github.io/Leaflet.heat/demo/ - демо грузит координаты 10 000 точек и тут же их строит
Linux Opera
 Москва
0
0
Leonid Kaganov
Ну так и у Гугля есть heatmaps. Но подсвечивать красным надо не там, где тесно от количества многократных измерений, а там, где выше измеренный параметр. А это уже не heatmaps.
Linux Safari Chrome
 Москва
2
0
Dmitry Kirillov
Самый простой способ обхода проблемы - свести её к heatmaps с помощью ресэмплинга имеющейся у вас выборки.
Вначале каким-либо образом смоделируйте двумерное распределение интенсивности излучения, а затем нагенерите побольше случайных точек по следующему принципу: чем выше интенсивность излучения в некоторой области, тем больше в этой области должно быть точек.
После проведения такого ресэмплинга heatmaps будет выдавать корректную картинку, т.к. кучность этих случайных точек будет отражать интенсивность излучения, а не измерений.

Каким образом смоделировать двумерную плотность распределения излучения в каждой точке и нагенерить случайных точек из этого распределения - отдельный вопрос.
Я бы начал с какого-нибудь ядерного метода восстановления плотности (Парзена-Розенблатта c гауссовыми ядрами), а затем произвёл бы сэмплинг из данного распределения.
Всё это достаточно легко можно сделать на Python с помощью библиотеки scikit-learn. Болеее конкретно тут:
[1] http://scikit-learn.org/stable/modules/density.html
[2] http://scikit-learn.org/stable/modules/generated/sklearn.nei[...] (вам нужны методы fit и sample)
Linux Safari Chrome
 Москва
1
0
Dmitry Kirillov
Кстати, если интенсивность излучения восстановлена, в целях оптимизации можно попробовать и напрямую сгенерировать растровый слой. Но первую часть задачи - восстановление плотности распределения излучения - вам всё равно нужно как-то решать.
Linux Safari Chrome
 Москва
0
0
katsuk
Жутко тормозит
Linux Safari Chrome
 Москва
0
0
Dmitry Kirillov
Насчёт хитмапсов согласен, поэтому комментом ниже и предложил напрямую отрисовать растровый слой прямо по восстановленной интенсивности. Причём рисовать можно тоже хитро как-нибудь: например, двигаясь не по равномерной сетке, а по центрам ядер, чтобы на каждой итерации накладывать сразу гауссово пятно на карту. Тут надо поработать с задачей "в железе", чтобы понять, как оптимальнее.
А сама по себе задача восстановления интенсивности считается один раз. Можно и подождать.
Windows Safari Chrome
 Великобритания
3
0
mithron
В leaflet.heat массив точек может иметь третью координату - altitude - которая и определяет интенсивность цвета вместо плотности точек. Так что посоветовали тебе правильно. Это heatmap - он что надо heatmap.
Linux Safari Chrome
 Москва
0
0
katsuk
Жутко тормозит
Windows Firefox
 Израиль
1
3
Павел бывший Пашка
Вы извините, что встреваю.
Но я практик.
Ежели Гугль умеет показывает только плотность точек, и вы уже умеете с этим работать, то вот и напишите сперва на чем угодно, хоть на трехногой табуретке, конвертор, любую каку-бяку, которая у вас там на площадке намеряна, именно в плотность точек и переводящий! Генератор воображаемых точек, удобных для гугля, понимаете мою мысль? И скормите ему.
Главное результат.
Гы, если бы кто заглянул в мои творения, как я там изъебываюсь не по правилам высокого искусства... Но ведь работает же сука!
Мне лично было бы проще придумать алгоритм (жопой чую, задача решаемая) и написать конвертор, нежели искать чужое, а потом еще ебаться с чужим кодом и с гуглем.
Windows Firefox
 Москва
0
0
Katsuk
кстати, очень быстро работает
Windows Safari Chrome
 Москва
0
0
chmyrnovich
Нужно взять измеренные данные, нанести их на сетку. (Останутся пустые узлы)

Потом по этим данным построить разложение функций в ряд Тейлора на всей сетке и заполнить по нему пустые узлы.

Новые данные будут почти бессмысленны в смысле информативности, но кучность повысят.

Должны существовать программы, где этот рецепт уже реализован как-нибудь.
Windows Firefox
 Москва
0
0
Katsuk
Мне видится, что для каждой точки надо вычислить круг, в котором уровень (цвет) на радиусе падает по Гауссу. Если в площадь одного круга попадает площадь другого, то гауссы в точках пересечения интегрируются.
Linux Safari Chrome
 city: Singapore
1
0
Трестмуравейстрой (#5304179)
Это называется гауссовым размытием и считается так: каждый пиксел заменяется на взвешенную сумму соседей. Гуглить «свёртка с гауссовым ядром».
Linux Firefox
 Москва
2
0
phmagic
Раскраска областей с такими данными обычно делается построением мозаики Вороного по множеству точек. Только для таких структурированных данных (когда множество точек состоит из "треков") их нужно немного "встряхивать" и вообще там есть много тонкостей, связанных с неустойчивостью задачи. Большого опыта у меня самого нет, я работал уже с готовыми триангуляциями Делоне (это "обратная сторона" мозаик Вороного). Что касается Google maps API, то тут я счастлив в своём неведении, но в картографии такие задачи, по идее, должны возникать часто.
UPD: Размывать по Гауссу (или с другим колокольчатым ядром -- с целью уменьшения количества вычислений), как советуют в предыдущем комментарии, может для таких данных оказаться лучшей идеей.
Windows Opera
 Мытищи
0
0
DGN LTD BBS (#5564786)
на хабре был пост на эту тему. логично считать значение до другой точки измерения.
Windows Firefox
 Москва
0
0
Katsuk
еще одна из проблем состоит в том, что даже при одинаковых коодинатах значения уровня могут различаться на порядок! То прибор был в кармане, то в бардачке машины, а то его на землю положили. Так что надо осреднять всё.
Linux Opera
 Москва
0
0
Leonid Kaganov
Ну это как раз не проблема - какой бы ни был в итоге алгоритм, наибольшее значение вызовет красный цвет.
Windows Firefox
 Москва
0
0
Katsuk
В 20 метрах, возможно, уровни выше гораздо, но там никто не клал прибор на землю
Windows Safari Chrome
 Великобритания
0
0
mithron
Не обязательно. Часто можно указать градиент какой использовать.
Windows Safari Chrome
 Москва
2
0
Ш.К. Мышь (#5480115)
Размножьте точки в соответствии с измеренным параметром.
И будет вам красивая картинка на хитмапсах.
Windows Firefox
 Москва
0
0
Katsuk
гугл уже с сотней точек тормозит безбожно, особенно на планшетах. А что будет с миллионом?
Windows Firefox
 Израиль
1
0
garik64
А разве нельзя заранее сделать картинку с этой картинки и наложить её на гуглокарту? А пользователю отдавать результат?
Windows Opera
 Москва
1
0
Toxa
не нужен миллион точек. вообще, не нужно ВСЕ измерения грузить в хитмап. нужно взять все измерения, построить на их основе сетку с некоторым регулярным шагом, и в каждом узле сетки передать хитмап столько точек, сколько нужно чтобы получить шкалу от 0 до 10, например.
Windows Opera
 Москва
0
0
Toxa
из-за этого линии, правда, будут не линиями, но можно усложнить задачу и сначала уменьшить кол-во точек, оставляя их там, где больше кучность (в каждом квадрате найти центр масс точек, попавших в него, либо любым другим способом, их очень много), затем в этих точках рассчитать средневзвешенное значение, а на карту поставить столько точек, сколько соответствует этому среднему значению.
Linux Ubuntu Firefox
 Владимир
1
0
Adamos
Подобная задача - линия на карте по GPS-координатам, цвет зависит от одного параметра - вроде бы успешно решена, например, на FlightRadar.org
Linux Safari Chrome
 Москва
3
0
Svami Dhyan Nataraj
Windows Safari Chrome
 Новосибирск
0
0
Antonx (#5476911)
Google Maps позволяет выводить на карте произвольное изображение: https://developers.google.com/maps/documentation/javascript/[...]
То есть, надо самостоятельно сгенерировать изображение (способов уже напредлагали много), положить на сервер и выводить.
Windows Firefox
 Новая Зеландия
0
0
Torvin
На всякий случай, вдруг пригодится: ваша задача в общем виде называется "интерполяция на неравномерной сетке".
Linux Safari Chrome
 Москва
0
0
katsuk
А еще "двумерная сплайновая интерполяция"
Linux Safari Chrome
 Германия
2
0
_N_E_R_O_
у меня видно только чистую карту и никаких точек на ней. Так должно быть?
Windows Firefox
 Россия
0
0
Traun (electro2005)
Поддерживаю. У меня Огнелис и Хром видят только кнопки и фрейм.
Windows Firefox
 Россия
0
0
Anatoliy Uglov
Ну, то есть, надо считать не количество точек, а средний вес. Вот тут люди бились над этой проблемой, с переменным успехом: http://stackoverflow.com/questions/14461954/heatmap-based-on[...]

По первой ссылке, кажется, годный пример: https://github.com/pa7/heatmap.js

Чуть ниже есть прием - менять радиус точки, в зависимости от масштаба. Наверное, тоже как-то работает. Надо пробовать.
Windows
 Los Angeles
1
0
Александр
Способ, который гарантировано подойдет, но возможно потребует некоторого времени на обучение - использовать D3.js

D3.js это java script библиотека сделанная специально для обработки и визуализации данных. Возможностей там миллион, и для описанной задачи должно хватить.

Почитать можно тут:
http://d3js.org/
http://habrahabr.ru/company/datalaboratory/blog/217905/

А здесь куча примеров с Гитхаба, где можно поискать подходяший и глянуть код:
https://github.com/mbostock/d3/wiki/Gallery
Linux Ubuntu Firefox
 Москва
1
0
Leonid Kaganov
Спасибо! Не уверен, что подойдет, но зато теперь буду знать, что есть такие библиотеки!

Единственное, чего я не нашел (а вот очень хотелось бы) - это JS-библиотеку, способную отрисовывать (а желательно и визуально создавать) АЛГОРИТМЫ. Ведь я почему-то уверен, что такая давно есть! А будь у меня эта JS-библиотека, я бы на базе 2$ WiFi-чипа сделал для ребенка программируемого робота. Это ж прекрасно: заходишь любым браузером хоть со смартфона по вебу ПРЯМО НА РОБОТА, а там - АЛГОРИТМЫ :) Какой нахер ЛЕГО? Какие нахер навороченные дорогущие программные конструкторы? Насовал по ножкам чипа копеечных датчиков и моторчиков, дал каждому имена, состряпал простенький интерпретатор шитого кода и вебку, которая позволяет визуально в виде квадратиков и ромбиков ветвления конструировать алгоритмы. "Левый датчик видит темноту? Да - крутить левым мотором. Нет - зажечь лампочку и вернуться к началу цикла..."
Windows
 Los Angeles
1
0
Александр
Нарисовать схему алгоритма и даже редактировать ее в браузере, кажется, можно.

Алгоритм в данном случае думается будет простой блок-схемой с действиями, условиями и переходами.

Это гуглится по ключевому слову flowchart и навскидку находится кучка библиотек, которые это умеют (сам я их не пробовал):

https://adrai.github.io/flowchart.js/ - редактирования нет, зато выглядит просто

библиотеки GoJS (к сожалению не бесплатная, но можно скачать "для ознакомления"):
http://gojs.net/latest/index.html

Умеет редактирование в браузере, есть разные нотации:
http://gojs.net/latest/samples/flowchart.html
http://gojs.net/latest/samples/stateChart.html
http://gojs.net/latest/samples/records.html


Еще можно попробовать нотацию BPMN 2.0 Она создана для описания бизнес-процессов, но алгоритмы тоже можно, чем не процесс-то.

Есть вполне приятный open source редактор (и даже возможность исполнения процесса есть где-то в недрах их движка):

http://bpmn.io/
http://demo.bpmn.io/

Про саму нотацию BPMN можно тут посмотреть: http://www.bpmb.de/images/BPMN2_0_Poster_RU.pdf
Windows Safari Chrome
 Исландия
0
0
a214365b (#5691784)
https://ru.wikipedia.org/wiki/Скретч_(язык_программирования)
Linux Safari Chrome
 Санкт-Петербург
1
0
Артем Павлов
Интересная задача, делал что-то подобное для Яндекса не так давно, но пришлось свой кастомный плагин для их апи писать.

Попробую на выходных поковырять, если успею.
Windows Safari Chrome
 Москва
0
0
Alexander
Придётся придумать отдельное обозначение для областей, в которых нет адекватных данных из-за отсутствия измерений вблизи.
Например уровень радиации от красного до зелёного, там, где ничего не известно, прозрачный.
Windows Firefox
 Москва
1
0
Кирилл
> 3) Есть ли еще какие-то идеи?

Можно вместо мучения с веб-технологиями попробовать создать нужный график в каком-нибудь MathCAD/MATLAB/Mathematica/Maxima или даже gnuplot и полученный SVG наложить на карту.
Linux Safari Chrome
 Москва
0
0
katsuk
В реальном времени, по мере подгрузки точек с сотни-другой приборов?
Windows Safari Chrome
 Washington
2
0
Serg Pososhenko (#1520660)
несколько лет назад делал аналогичный проект для отображения качества сигнала сотовой связи зарегистрированной телефоном в автоматическом режиме. Гугл заткнулся при превышении 15 тыс. обьектов на карте (через API). Пришлось сооружать кастомный сервер генерации "tiles" - имеджей привязанных к гугловой картографической сетке. API позволяет определить такой слой и он сам начинает ходить за картинками при изменении положения или уровня увеличения. Этим же подходом пользуются при отображении карт погоды (облачность/осадки). Минус у подхода - данные становятся не интерактивными - просто картинка, никаких всплывающих подсказок или выделения текущей точки. Проект возможно сохранился в загашниках - найду перешлю исходники.
Linux Safari Chrome
 Mount Laurel
0
0
Gena Kukartsev
Леня, я бы использовал pandas в питоне, чтобы подготовить данные в том формате как надо. Судя по вашему описанию, ваша версия heat map не особенно подходит. Я бы использовал bokeh для отрисовки карт: начал бы с их примера, и менял бы как надо.
Linux Chrome
 New York
4
0
Дачнег (#5479255)
В советское время за такое грозила бы статья за шпионаж.
Потому что вот вы сейчас карту измерений радиации сделаете, а вероятный противник увидит замаскированные ракетные шахты!

По сути вопроса:
- есть карты, есть слой точек или полигонов.
- ваша задача - создать слой с требуемыми параметрами.
- про Гугль не скажу, а вот ОСМ позволяет легко это сделать.
- Leaflet - базируется на ОСМ (OpenLayers).

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

Скрипт, выдающий нечто вроде XML. Разбираться с OpenLayers и писать.

А использовать heatmaps в данном случае - примерно то же самое, что покупать новую машину ради чистой пустой пепельницы, и удивляться, что дорого, тяжело, и места много занимает.
Windows Safari Chrome
 Москва
0
1
glew
Вы тут как маленькие дети, ей-богу. Советские времена - это ужос. А сейчас все можно. А мужики - то не знают..
- "носители сведений, составляющих государственную тайну, - материальные объекты, в том числе физические поля, в которых сведения, составляющие государственную тайну, находят свое отображение в виде символов, образов, сигналов, технических решений и процессов;"
- Припоминаю не столь уж древний советский шпионский фильм про гражданина Епифана, который засовывал под рельсы специальный кирпич, который доблестные чекисты (ну, которые теперь "кровавая гэбня"), специально облучали (чтоб ввести в заблуждение, понятно).
- Интересно представить себе дальнейшую судьбу человека, бродящего с дозиметром по прериям Невады.
В общем, стремно все это, Леонид.
А задачка тривиальная. Сплайны.
Linux Chrome
 New York
1
0
Дачнег (#5479255)
В советское время на военных объектах висела инструкция с расписанием пролета вражеских разведывательных спутников.
В это время запрешалось проводить передислокацию техники и личного состава, чтобы не демаскировать объект, проходящий даже по военным генштабовским картам как "пионерлагерь".

А сейчас в гугломапсе без проблем можно найти несколько интересных объектов, с ангарами, техникой, шахтами...
Даже не потому что теперь можно, а просто потому что оно уже есть, и пытаться запрещать это - все равно что придумывать 100500 версию сбития Боинга инопланетянами с Альфы Центавра портативным кобальтовым лучеметом.
Windows Firefox
 Израиль
7
0
Павел бывший Пашка
Чрезмерная секретность объективно вредит.
Так например, я знаю одного мужичка, он отслужил а оные времена 5 лет на Новой Земле, это, как известно, полигон испытаний ядерного оружия. Но полигон флотский. Там были подземные взрывы, множество, там была и царь-бомба...
После одного взщрыва они просидели в противогазах трое суток. Была утечка из-под земли. Но что - кормили прекрасно. По полкурицы давали, даже квас был - на кухне делали огромную бочку...
Короче.
Когда произошел Чернобыль, этому мужику стало завидно - ликвидаторы там чего-то получают, а как же я, я ж наверно тоже обдученный?
Написал в министерство обороны. Оттуда пришел интереснейший ответ: военной части с таким номером у нас нет и никогда не было! Только он хотел попросить, чтобы его отдали под трибунал в таком случае, за клевету и подделку документов, как Совок распался и его посолали нахуй, т.е. предложили в дальнейшем все свои дела вести с новыми республиканскими властями!...
Что мужик сделал? Правильно: открыл рот и начал громко жаловаться! В конце-концоы прослышал про него немецкий журналист, приехал и цельный день его расспрашивал, и так заинтересовался, что остался еще.
А тот, имея на руках официальную бумагу, что его службы, оказывается, блядь, никогда не было, и вторую - что страна от него отказывается, а следовательно, его воинская присяга теперь недействительна, вывалил ему со зла абсолютно все, и что сам знал и чего только издаля слыхал!
Далее. Когда утонул "Курск", то норвекжцы открыли проект, по мониторингу вообще всех советско-российских атомных загрязнений в Арктике. Проект вроде как экологический, гражданский... Сайт Беллона известный - он до сих полр существует, хотя материалы тех времен там в архиве сложены.
Там я видел список всех радиационных аварий с АПЛ (а с АПЛ любая авария потенциально радиационная!) за все советские годы. Нашел и ту, после которой умер мой одноклассник, домой его умирать отправили...
Все в подробностях, с именакми и местами и датами...

один из основных источников - ОБРАЩЕНИЯ на Беллону
обиженных и кинутых государством отставных моряков!
Тоже, наверно, "такой чпсти никогда не было"...

Вот так-то Опасно на людей хер-то класть! Они ж теперь могут и ответить!
Windows Firefox
 Казань
2
0
list/timurkin (timurkin)
А теперь прикиньте, как проходили испытания первого атомного вооружения на живых людях на Тоцком полигоне... До 40 000 военных участвовали в учениях, четверть прогнали через эпицентр взрыва!!! Да еще мирные жители никуда не делись...
А когда военные начали через некоторое время жаловаться на здоровье и кровотечения, то никакой помощи не получили... Ни выслуги лет, конечно.... Ибо по документам все во время учений находились ну очень далеко, но ни как не на учениях...
Windows Firefox
 Израиль
5
0
Павел бывший Пашка
Хотя да, надо учесть, что система работает весьма тупо.
ЦРУ может знать про объект абсолютно все 100 раз, он может лежать на гугле в картах, но если оно узнает про него в 101-й раз именно от вас, и это попадет куда надо, то ваша судьба может быть на год-другой общего режима легче, чем в 1-й, а может быть и не легче... Это как посмотрят.
А в свете тенденций ваших - как бы не тяжелее...
Или есть сомнения?
Windows
 Москва
0
0
m (ngs-govno)
а пересчитать данные, чтобы родной гугловский heatmap показывал правильно?

Toxa вон выше такое же советует
Linux Safari Chrome
 Santa Rosa
0
0
[email protected] (dlazerka)
Так Google API же поддерживает вес каждой точки, см. https://developers.google.com/maps/documentation/javascript/[...]
Linux Ubuntu Safari Chrome
 Германия
0
0
kirushik
Этот вес — не тот вес который надо.
Он нужен просто чтобы 100 близких точек на одну с весом 100 заменять, чтобы клиент прирендеринге не перетруждался.

Мне кажется, что вариант со своим картиночным оверлеем поверх карты — единственный по-настоящему подходящий, увы.
Linux Opera
 Москва
1
0
Leonid Kaganov
И что? Вот рядом упали три точки с весом 10 мкр, он их честно просуммирует и покажет вес 30 мкр - а это уже красный цвет.
Windows Firefox
 Россия
0
0
Traun (electro2005)
Как-то кажется, что движок в этом случае должен честно отобразить средние 10 мкр ...
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
Вообще забудь. Это очень старая заметка, все вопросы в ней решены, не до неё.
Windows Firefox
 Россия
0
0
Traun (electro2005)
Да, заметил уже когда ответил. Просто почему-то она у меня выскочила как свежая после заметки с хачапури. Извините, что побеспокоил.
Windows Safari Chrome
 Москва
1
0
teegaar
Попробовал сделать на плагине Leaflet.heat -http://teegaar.github.io/radmap/demo.html - получилось быстро, но не совсем правильно - плотность точек влияет на цвет (это особенность отрисовки heatmap'а). Польза есть только если точки расставлять равномерно на карте.

Сделал свой плагин с интерполяцией данных через кригинг - картинка получилась красивая, но довольно медленная - http://teegaar.github.io/radmap/demo2.html. Раскрашиваются только точки близкие к точкам измерений, но без проблем можно раскрасить и всю карту - http://teegaar.github.io/radmap/demo3.html.

PS: с кригингом модель строится не по исходным точкам, а по склеенным усрёдненным, поэтому при изменении масштаба картинка может несколько отличаться от интуитивно ожидаемой.
Linux Opera
 Москва
0
0
Leonid Kaganov
Что такое кригинг не знаю, но судя по всему, картинка получилась тоже зависящей от плотности - светлые участки наметились там, где машина двигалась быстрее и число замеров на дюйм карты оказалось чуть-чуть меньше. Это в принципе заведомо неверный алгоритм для нашего случая, число замеров не должно вообще никак влиять на результат.
Windows Safari Chrome
 Москва
5
0
teegaar
От плотности точек не зависит, но модель строится по усредненным точкам - все точки, попадающие в некоторую окрестность заменяются на одну среднюю. При изменении масштаба размеры окрестностей меняются и результат может получиться немного другим.

Возможно цвета вводят в заблуждение - добавил легенду
http://teegaar.github.io/radmap/demo2.html
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
О, как!
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
Только не убирайте это пожалуйста никуда пока! Изучаю...
Linux Ubuntu Firefox
 Москва
1
0
Leonid Kaganov
А вы вообще кто, волшебник?
Linux Safari Chrome
 Москва
1
0
teegaar
Только учусь )
С картами никогда не сталкивался, но давно хотел попробовать
Windows Firefox
 Днепропетровск
0
0
Theoristos1 (#5514894)
В мат. пакетах типа Wolfram Mathematica такое делается несложно и довольно разнообразно. Проблема только как это прикрутить к нету.
Разве что размытие по Гауссу, с усреднением по весам точек.
Linux Opera
 Москва
1
0
Leonid Kaganov
Что такое кригинг не знаю, но судя по всему, картинка получилась тоже зависящей от плотности - светлые участки наметились там, где машина двигалась быстрее и число замеров на дюйм карты оказалось чуть-чуть меньше. Это в принципе заведомо неверный алгоритм для нашего случая, число замеров не должно вообще никак влиять на результат.
Linux Safari Chrome
 Белоруссия
0
0
md (#5692036)
пример http://www.patrick-wied.at/static/heatmapjs/example-heatmap-[...]
переопределяя valueField: 'count' можно задавать собственные параметры лоя отображения
Linux Opera
 Москва
0
0
Leonid Kaganov
Сразу вопрос: на что надо переопределить эту переменную (если это 1 настроечная переменная), чтобы Хитмап перестал быть Хитмапом (т.е. перестал усиливать цвет в случае тесного соседства множества точек)? Мне кажется, ни я, ни вы не знаете ответа на этот вопрос. В Хитмапе все устроено просто: если в землю воткнуты кучно 10 грудусников, и каждый показывает 20 градусов, то Хитмап считает, что в этом месте температура 200 градусов.
Windows Safari Chrome
 Москва
0
0
snjax_ (#5430100)
То, что вам нужно, называется
2D spline interpolation.

Есть в матлабе, есть в julia language. Реализация на js в принципе тоже может быть.
Windows Safari Chrome
 Санкт-Петербург
0
0
BigLeo (#5307050)
1. - в google api такого нет
2. - двумерная сплайн (или не сплайн, в принципе, без разницы) -интерполяция. Не на java script'е! Я бы взял что-нибудь геодезическое, прогнал бы сквозь усредняющий фильтр (бессель?) и конвертировал бы уровни в цвет.
3. Убрать все это с backend'a. Пререндинг и в базу. Чтоб шелестело побыстрее, в качестве базы взял бы redis.
Mac Safari
 Киев
0
0
Dr.Sokoloff (#5705499)
Есть такой проект, http://blog.safecast.org, там как раз делают то что вы хотите - собирают данные с мониторов радиации установленных на автомобилях и отображают на карте. Япония все изъезжена, но спорадически есть замеры по всему миру, в Чернобыле по крайней мере точно. И публичный API тоже есть.
Mac Safari
 Киев
0
0
Dr.Sokoloff (#5705499)
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
Это вообще стационарные станции-точки. А KSM Ильина - трекер, он путешествует и каждые 100 метров делает измерения.
Linux Ubuntu Firefox
 Москва
0
0
Leonid Kaganov
Спасибо, но не то, не так, не под наши задачи, не под нужные типы измерений (у нас не только гамма, но и бета отдельно), и вообще чужой проект, который не переделать, не изменить под нужное, и вообще в любой момент хозяин его закроет. Яечь шла о решениях, а не сервисах. Я про жизни не юзер и под чужим хозяином не живу - вы это можете видеть даже по моему сайту ;)
Windows Firefox
 Москва
0
0
Дмитрий
Не знаю насколько уместно писать здесь с таким запозданием, но может кому-то будет полезен мой опыт по теме, описанный здесь: https://habrahabr.ru/post/324596

всего комментариев: 75

<< предыдущая заметка следующая заметка >>