Візуалізація великих наборів даних за допомогою Leaflet


35

Використовуючи Leaflet для візуалізації великого набору даних (GeoJSON з 10 000 точковими функціями), не дивно, що браузер виходить з ладу або зависає. Підвибірка з 1000 функцій з одного набору даних працює бездоганно. На жаль, я не можу поділитися набором даних для інших, щоб спробувати.

Хтось має кращі рішення для візуалізації таких великих наборів даних? (Кінцевою метою є масштабування цього рівня до 2 мільйонів функцій) Я навіть готовий розглянути рамки візуалізації в режимі офлайн у випадку, якщо альтернативи на базі браузера, такі як Polymaps або d3.js тощо, вважаються недіючими .

Редагувати: забути згадати, користувач повинен мати можливість фільтрувати набір даних за атрибутами. Таким чином, з N функцій, динамічно потрібно відображати лише відповідні n <= N ознаки.


3
Подібні дискусії: gis.stackexchange.com/questions/4096/ gis.stackexchange.com/questions/14882 gis.stackexchange.com/questions/6954
жюльєн

Перепроведенні посилання , так що вони будуть працювати gis.stackexchange.com/questions/4096 / ... gis.stackexchange.com/questions/14882 / ... gis.stackexchange.com/questions/6954 / ...
Рафаїл

Відповіді:


23

Я автор листівки. Для цього існує дивовижний кластерний плагін, Leaflet.markercluster . Це дуже швидко і ефективно (подивіться на прикладі маркерів 50k), виглядає і працює дуже гладко з приємною анімацією, і має безліч варіантів, що відповідають вашим потребам.


3
Також PruneClusterвиглядає перспективно.
TLama

1
Я хотів би розширити оригінальне запитання. Мені потрібно зробити щось на кшталт цього: matall.in/posts/deep-insights-visualizing-1m-flight-routes Як я можу кластеризувати шляхи з позначенням маркерів?
guilhermecgs

16

Ви можете використовувати TileMill і відображати точки як растрові зображення з швидкою інтерактивністю від UTFGrid . Він масштабується до мільйонів пунктів і полігонів, як ця карта перепису , оскільки він інтелектуально надсилає лише ті дані, необхідні для конкретних областей, саме тоді, коли це потрібно.

Наскільки я знаю, немає інших швидких методів для цього, крім наявності дуже швидкого сервера WFS, який досить важко підтримувати / масштабувати для багатьох глядачів.

Розкриття: працюйте для MapBox , написав зовсім небагато коду. Але TileMill є безкоштовним / відкритим кодом тощо.


1
Я забув згадати, що користувач повинен мати можливість фільтрувати набір даних за атрибутами та відображати лише відповідні записи. Так, скажімо, із 10000 записів, лише 500 можуть бути фактично потрібні для даної справи. Можна (або як би я) це зробити з TileMill?
Імад

3
Ні. Можливо, ви захочете спробувати CartoDB , але ви повинні знати, що зробити речі динамічними та зробити речі ефективними - це протилежні цілі.
tmcw

1
посилання на карту перепису мертве!
drho

Усі посилання датовані.
LeeGee

9

Ви заглядали в кластерів з листівками? Автор статті в блозі описує його тут

Інший варіант , варто подивитися , може бути використання листівка в поєднанні з ГІС - Клу . Погляньте на цю демонстрацію, щоб побачити, що вона дуже швидко обробляє багато геометрій. Дуже вражає. Я жодним чином не пов'язаний з GISCloud.


7

Ніколи не слід відображати мільйони точок на карті. Не тільки через основні проблеми з продуктивністю, але і з точки зору користувача, оскільки для них, безумовно, буде важко інтерпретувати ці дані. Використовуйте деякі засоби агрегування даних (кластеризація, агрегація до полігонових областей тощо) у поєднанні з різними типами відображення на різних рівнях масштабування (наприклад, показуйте "необроблені" дані точок лише на дуже високих рівнях масштабування та використовуйте зведені дані скрізь в іншому місці). Прикладом може бути сайт нерухомості, такий як zillow.com .


8
Ніколи не слід говорити "ти ніколи не повинен". Місцеві жителі та туристи - чудовий приклад такого розуміння, яке може дати візуалізація мільйонів (або мільярдів у цьому випадку) балів.
Джозеф Шеді

1
Погодьтеся з w / @velotron, наприклад, шість мільйонів балів красиво і швидко надані: mapbox.com/blog/supercluster
Макс фон

1
Так, але в цьому випадку ці точки також кластеризуються (залежно від рівня масштабування), що робить їх дуже легко інтерпретувати та розуміти дані.
chriserik

2
@chriserik вірно, тому правильною відповіддю буде "вам слід використовувати кластеризацію або теплові карти, якщо у вас є стільки точок, і ось як це зробити ..."
Макс фон Гіппел

3
Моя думка полягала в тому, що нерозбірливі сюжети мільйонів балів можуть дати зрозуміти.
Джозеф Шеді

0

Я пропоную вам зменшити відображену кількість точкових особливостей: людське око не зможе побачити 10000 балів, не кажучи вже про 2 000 000.

Що ви можете спробувати, це динамічно запитувати набір даних на користувальницький сервер (який вам доведеться налаштувати), наприклад

    map = ...
    map.on('moveend', function(e) {
        getGeoJson(e);
    });
    map.on('zoomend', function(e) {
        getGeoJson(e);
    });
    map.setView([2,3], 2);

    function getGeoJson(event) {
        // todo determine current viewport
        $http.get('someGeoJsonDataProvider.someLanguage?currentView=[lat0,lon0,lat1,lon1]').then(function (resp) {
            // todo clear layers
            // new layer
            map.addLayer(
                L.geoJson(resp.data)
            );
        });
    }

Потім ваш сервер обчислить, які точки повертати, залежно від того, що користувач хоче бачити зараз. Залежно від коефіцієнта масштабування і відсікання, вам потрібно буде повернути дуже невеликий відсоток балів, не погіршуючи користувальницький досвід.

Недоліки: Налаштування сервера (ви повинні знайти бібліотеки для фільтрації геоточок) і повільніше надання (після кожного масштабування або перетягування потрібно зробити запит сервера)


-5

У мене були рішення, щоб намалювати від 50 до 100 мільйонів записів, вам потрібно використовувати серверні рішення, щоб робити сіткові та динамічні основи. Ви не можете відповідати на API веб-карт (Google чи інших), щоб робити візуалізацію на стороні клієнта ....

[http://96.231.36.9:8080/rbgis/google_map.html обвинувачений1] спробуйте наведені вище посилання та подивіться, як


2
Розгорніть свою відповідь, тому це буде корисно навіть у тому випадку, коли ваш сервер недоступний.
lynxlynxlynx

Так, це іронічно. Оскільки ваше посилання на стороні сервера не працює.
Макс фон Гіппель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.