Группировка объектов на карте
Здравствуйте, господа.
дабы избежать непоняток - напишу в первых строках и жирным: данный вопрос СОВЕРШЕННО не касается клиент-сайда
Так вот, ситуация. Допустим, у нас есть группа объектов, которые нужно отрисовать на карте. Область карты представлена двумя координатами (topleft, bottomright)
Проблема: в текущей области может быть очень много объектов. соответственно - их нужно сгруппировать (для простоты представим - что объекты изначально одинакового типа).
Моё решение (очевидное, простое, мне не очень нравится): разбиваем область на квадраты. в каждом квадрате считаем число объектов. если в квадрате объектов > 1 - вычисляем для них центр масс (среднее арифметическое по каждой из координат).
решение не очень хорошее, потому что:
1. если в квадрате 2 объекта на противоположных углах - тогда после взвешивания получим один групповой маркер, в середине квадрата (хотя можно было бы показать оба, ибо они отставлены "далеко")
2. если в двух рядом стоящих квадратах в верхнем все точки были сосредоточены в нижней части (соответственно среднее значение - будет на нижней грани), а в нижнем - в верхней части, тогда получим два групповых маркера, очень близко расположенных (хотя - можно было бы, например, всю огромную пачку объектов в одной группе оставить).
Ваши варианты?
Я уверен, что существуют алгоритмы, но нагуглить не получается.
Здравствуйте, господа.
дабы избежать непоняток - напишу в первых строках и жирным: данный вопрос СОВЕРШЕННО не касается клиент-сайда
Так вот, ситуация. Допустим, у нас есть группа объектов, которые нужно отрисовать на карте. Область карты представлена двумя координатами (topleft, bottomright)
Проблема: в текущей области может быть очень много объектов. соответственно - их нужно сгруппировать (для простоты представим - что объекты изначально одинакового типа).
Моё решение (очевидное, простое, мне не очень нравится): разбиваем область на квадраты. в каждом квадрате считаем число объектов. если в квадрате объектов > 1 - вычисляем для них центр масс (среднее арифметическое по каждой из координат).
решение не очень хорошее, потому что:
1. если в квадрате 2 объекта на противоположных углах - тогда после взвешивания получим один групповой маркер, в середине квадрата (хотя можно было бы показать оба, ибо они отставлены "далеко")
2. если в двух рядом стоящих квадратах в верхнем все точки были сосредоточены в нижней части (соответственно среднее значение - будет на нижней грани), а в нижнем - в верхней части, тогда получим два групповых маркера, очень близко расположенных (хотя - можно было бы, например, всю огромную пачку объектов в одной группе оставить).
Ваши варианты?
Я уверен, что существуют алгоритмы, но нагуглить не получается.