В настоящее время я ищу эффективный способ визуализации большого количества данных в JavaScript.Данные являются геопространственными, и у меня есть приблизительно 2 миллиона точек данных.
Теперь я знаю, что я не могу дать столько данных напрямую браузеру, иначе он просто потерпит крах большую часть времени (или время отклика будет очень большим).в любом случае медленно).
Я думал о том, чтобы окно javascript связывалось с питоном, который мог бы выполнять все операции над данными и передавать данные json обратно в приложение javascript.
Моя идея состояла в том, чтобы окно javascript отправляло в реальном времени ограничивающий прямоугольник карты (широта и долгота северо-восточной и юго-западной точки), чтобы скрипт Python мог пройти через все записи перед отправкойJSON только видимых объектов.
Я только что сделал очень простой скрипт, который может сделать то, что в основном
- Считывает весь CSV и сохраняет данные в списке с lat, lng и другими атрибутами (2 или 3)
- Наивная реализация для проверки того, находятся ли точки в ограничивающей рамке, отправленной javascript.
В настоящее время прохождение всех точек данных занимает приблизительно 15 секунд ...слишком долго, так как я также должен затем преобразовать их в объект geojson, прежде чем передавать их в мое приложение javascript.
Теперь, конечно, я мог бы прежде всего отсортировать свои точки в порядке возрастания lat и lng так, чтобыфункция, проверяющая, находится ли точка внутри ограничивающего прямоугольника, отправленного JavaScript, будет на порядок быстрее.Однако время обработки все равно будет слишком медленным.
Но даже если допустить, что это не так, у меня все еще есть проблема в том, что при очень низких уровнях масштабирования я получу слишком много очков.Ограничение min_zoom_level на самом деле не вариант для меня.Поэтому я подумал, что мне, вероятно, следует попытаться сгруппировать точки данных.
Поэтому мой вопрос, считаете ли вы, что этот подход является правильным?Если так, как можно вычислить кластеры ... Мне кажется, что мне нужно было бы создать много возможных кластеров (разные уровни масштабирования, разные места на карте ...), и я не уверен, что этоэффективный и умный способ сделать это.
Мне бы очень хотелось, чтобы вы внесли свой вклад в это, с возможными корректировками или совершенно другими решениями, если у вас есть некоторые.
Это почти языковая независимость, но я буду помечать как python, поскольку в настоящее время на моем сервере выполняется сценарий python, и я считаю, что python достаточно эффективен для больших наборов данных.
Последнее замечание:
Я знаю, чтовозможно предварительно вычислить плитки, которые я мог бы просто подать на визуализацию javascript, но так как я хочу иметь интерактивный контроль над тем, что отображается, это на самом деле не вариант для меня.
Редактировать:
Я знаю, что, например, mapbox обеспечивает кластеризацию точки данных, чтобы облегчить отображение чего-то вроде миллиона данныхточка.
Тем не менее, я думаю (и это связано с открытым вопросом ), хотя я могу легко отображать кластеры точек, я не могу создать стиль, управляемый данными для своего кластера.
Например, если мы возьмем теперь известный пример этнических карт, если я использую mapbox для кластеризации точек данных и кластер дает мне 50 человек на кластер, я не могу сделать кластер цветом наиболее представленной этнической принадлежности.в выборке из 50 человек.
Редактировать 2:
Также узнали о сверхскоплении, но я совершенно не уверен, может ли этот инструмент поддерживать несколько миллионов точек данныхбез сбоев либо.