Кластер на стороне сервера?

Я отчаянно искал право решение, которое может обрабатывать до 50 000 маркеров (и почему бы не больше, если сервер справится с этим) будучи легким на моем сервере, и я делал это в течение нескольких дней.


Концепция примерно такая:

введите описание изображения здесь


  • Что было бы лучшим решением / языком для кластеризации сервера
    боковая сторона? Я не ищу огромный рабочий код, но мне нужно подтолкнуть в правильном направлении.
  • Как «Кэш» или же «отметка» уже загруженные кластеры / маркеры, чтобы вы
    не перезагрузит ли маркеры / кластеры, которые уже были загружены, когда карта увеличивается / уменьшается или панорамируется?

Теория:

Правильный путь выглядит примерно так:

  • Если карта уменьшена и имеется много маркеров, обработайте кластеризацию в сервер
  • Если карта увеличена до такой степени, что все маркеры больше не подходят для области просмотра, кластеризуйте только маркеры, которые находятся в области просмотра — также сервер
  • Если зум становится настолько большим, что количество маркеров в области просмотра становится маленьким (< 500 например), кластер в браузере через JS

Данные, которые я мог бы использовать на стороне сервера и которые я мог бы также отправить в браузер через JSON:

  • Границы карты, отправленные через ajax на сервер, когда сделан запрос
  • Общее количество маркеров из запроса к базе данных
  • Координаты маркеров из запроса к базе данных
  • Возможно, что-то еще важное / полезное, что я сейчас не понимаю

7

Решение

Я работаю с приложениями google maps с 50 000 100 000 полигонов. Очень полезной оказалась возможность организации полигонов в ряд областей (логика листов, области или аналогичные). Использование массива уже отображенных областей, который отправляется на сервер через ajax вместе с координатами, которые вы связали, позволило мне выбрать только те области, которые еще не отображались, и, таким образом, сократить как распределение полосы пропускания, так и время рендеринга полигонов,

В остальном стратегия верна. для более тщательной оценки следует получить углубленную техническую информацию, практически неосуществимую в соц.

Что касается языка на стороне сервера, то все в порядке, лично я сейчас использую PHP и фреймворк Yii2 с драйвером PDO для MySQL. Важно то, что использование среды делает ее очень простой и эффективный доступ к базе данных.

В этих условиях использование хорошей организации кластера и отображение полигонов в регионах, когда уровень масштабирования позволяет это сделать, делает приложения Google Maps очень эффективными.

Обратите внимание, что появление маркеров происходит быстрее, чем у полигонов, так как меньше количество задействованных координат и их графические характеристики.

Для общего вопроса, как ваш трудно найти хороший ответ в Интернете. Для регионов зависит размер области, которой вы управляете, и средняя плотность маркеров. Для области, не находящейся около полюса, вы можете использовать часть координат .. или, если у вашей географической точки есть некоторый атрибут, связанный с областью, вы можете использовать их. Вы можете найти формулы онлайн, чтобы связать масштаб с приблизительным размером области. Зависит также от того, как осуществляется сбор маркеров. В моем случае во время сбора я использовал какой-то атрибут для этого.

Для проверки есть маркеры или группа маркеров уже на картах, я использую просто вектор и использую это (через ajax) для динамического обмена с сервером. Первый раз вектор пуст и постепенно вектор содержит элемент для «знать», что уже отображается.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]