Максимальное количество точечных объектов в векторном слое OpenLayers

27

По вашему опыту, сколько точечных объектов можно добавить в векторный слой OpenLayers (новый OpenLayers.Layer.Vector ("Point Layer")), прежде чем он станет необычайно медленным?

Мой вариант использования для отображения точек из таблицы базы данных. Пользователь может решить, какой период времени визуализировать. Следовательно, результат может быть от очень небольшого до потенциально 100 000 баллов. Я хотел бы ввести разумное ограничение и предупредить пользователя, если его запрос вернет больше возможностей.

Подземье
источник
Используется ли стандартный браузер? Предел, вероятно, будет отличаться в зависимости от того, какой браузер вы используете.
Дерек Суингли
В основном Firefox. Это не должно работать в старых IE.
Подземье
1
Вместо предупреждения пользователя вы можете переключиться с запроса векторных данных на возврат точек в виде WMS / изображения.
география
@geographika: Обычно я делаю это. Но пользователь также решает, к какой базе данных подключаться. Я должен был бы знать все возможные базы данных и сделать их доступными через WMS. У них даже не установлен PostGIS, я просто выбираю столбцы широты и долготы.
Подземье

Ответы:

38

У меня нет однозначного ответа для вас, но я собрал страницу, на которой вы можете поиграть с разным количеством точек на карте OL: http://derekswingley.com/lab/olpts/

Дерек Суингли
источник
5
Дерек, для этого должен быть значок «Великий ответ с практическим примером». Приятно видеть разницу в скорости нахождения точек.
Mapperz
3
Очень интересно! Это заставляет меня думать о геоипсуме. В качестве альтернативы его также можно использовать для тестирования производительности: craigmmills.com/geoipsum (я не знаю, существует ли ограничение числа полигонов)
simo
1
@ So4ne, что сайт Google App Engine умер в какой-то момент, тот же (почти 5-летний) код здесь: derekswingley.com/lab/olpts
Дерек Свингли
1
Обновление @nospor от перехода на https обновлено, и сайт вернулся.
Дерек Свингли
1
@DerekSwingley Я сделал обновленные сэмплы, основываясь на вашей идее, используя Leaflet, MapboxGL JS & OpenLayers 4 medium.com/@ThomasG77/… Я положил кредиты на ваш сэмпл
ThomasG77
5

Если отображение идет медленно из-за слишком большого номера функции, это означает, что отображаемые данные не подходят для уровня масштабирования. Обычно, когда плотность функций становится слишком высокой, дисплей больше не может быть читаем (см. Этот пример ). Даже если бы не было предела обработки, и все устройства отображения могли отображать 1000000000000 функций за 0,001 с на небольшом экране, визуализация оставалась бы невозможной.

Закон радиуса Тёпфера гласит, что плотность объектов должна оставаться под постоянным порогом независимо от уровня масштабирования. Чтобы решить эту проблему и адаптировать данные к масштабу визуализации, нужно преобразовать их, используя операции обобщения, подобные этой или этой другой .

жюльен
источник
На ту же тему: gis.stackexchange.com/q/4096/162
julien
2
Очень верно. Что касается Openlayers, он использует кластерную стратегию, чтобы справиться с этим. Смотрите пример: openlayers.org/dev/examples/strategy-cluster.html
simo
1
Для моего текущего приложения я просто соединил точки (GPS) с линиями (треками). Это уже значительно улучшает время рендеринга.
Подземье
3

Я не думаю, что невозможно дать твердый ответ на этот вопрос. Точка рендеринга / полигоны полностью зависят от браузера и аппаратного обеспечения (процессор и память), а не от OpenLayers. У меня были проблемы с Openlayers и IE6 для одного из рендеринга Lake (Polygon). но он прекрасно загружается в Firefox. И лучшим вариантом было бы контролировать использование памяти и процессора с помощью Chrome или лучше использовать некоторые инструменты.

Senthil
источник
1

Как и у других, у меня нет ответа на этот вопрос, но применение стратегии BBox может помочь вам сохранить только необходимые данные, поскольку они отображают только функции, расположенные в пределах данного ограничивающего прямоугольника.

Симо
источник
1

В OpenLayers 6 есть средство рендеринга точек WebGL, которое должно позволять вам отображать сотни тысяч объектов с фильтрацией по времени. Возможно, вы захотите ознакомиться с последней версией официального семинара по адресу https://openlayers.org/workshop/en/webgl/ .

С OpenLayers 2, который я действительно не рекомендую использовать больше, максимальная допустимая частота кадров будет составлять всего несколько сотен функций.

ahocevar
источник
0

Я наткнулся на аналогичный вариант использования, не уверенный, будет ли он соответствовать вышеупомянутым потребностям, но Clusteringв OL 5 я принял это решение .

Кластеризация, как предлагают слова, берет группу точек и объединяет их вместе в одну точку, например, у вас есть 100 точек в конкретном городе, все точки будут видны как одна точка, скажем, с увеличения, 4но как отдельные точки с увеличения Скажем 10так, что вы можете сделать, когда при масштабировании 4вы можете объединить эти точки как единое целое, что помогает уменьшить количество точек, которые будут отображаться в определенной области.

Другими словами, допустим, у вас есть 10000 точек, которые должны быть отрисованы на карте, и они довольно близки друг к другу, поэтому вы можете создавать из них кластеры и уменьшать рендеринг, а когда пользователь увеличивает масштаб, вы продолжаете разбивать кластеры. Это обеспечит меньший рендеринг и лучшую производительность.

Удовлетворительное представление. Ссылка на примеры кластеризации на Openlayers

Jashanpreet Bhullar
источник
Не могли бы вы добавить краткое резюме страницы, на которую ссылаются? Ссылки могут порваться со временем, оставляя ваш ответ бесполезным, как сейчас.
Кантан