Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Группировка точек на карте.  [new]
AnaceH
Member

Откуда:
Сообщений: 109
Здравствуйте.
Картина маслом: есть карта, на карте пользователь делает метки, метки сохраняются в базу. Каждой метке назначается рейтинг 1-100. При отрисовке карты метки загружаются из базы. Проблема в том, что меток много и их отрисовка идет долго. Для ускорения процесса необходимо как-то группировать (вероятно, на базе) метки в группы, и выводить вместо к примеру 5-10 близкорасположенных меток 1 с усредненным рейтенгом. На данный момент координаты сделаны ввиде пары даблов, планирую заменить на geography.
Итак:
1. Стоит ли решать задачу группировки-усреднения на базе?
2. Если да, то какими способами? Вижу несколько вариантов.
a. Рассчитывать близость динамически в запросе. Находим точки с наибольшим количеством соседей в каждой области(STBuffer, STIntersects) и выводим только ее (вот тут у меня начинает закипать мозг. Как определить точку с наибольшим количеством соседей просто, не пойму как декларативно выбирать именно ее среди соседей).
b. Хранить близких соседей каждой точки в отдельной таблице, а дальше опять геморой из пункта a.
c. Ввести сущность суперточка и каждую новую метку соотносить с ней, корректируя координаты этой суперточки. Тоже не сахар + черевато ночными пересчетами.
Пожалуйста, подскажите в каком направлении копать. Никогда ни с чем подобным не сталкивался.
Заранее благодарю.
16 июл 12, 20:13    [12874521]     Ответить | Цитировать Сообщить модератору
 Re: Группировка точек на карте.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Перенести в форум программирование.
Это никак базу не трогает.
Вы б ещё скрины рендерили на скуле, ага.
17 июл 12, 03:03    [12875455]     Ответить | Цитировать Сообщить модератору
 Re: Группировка точек на карте.  [new]
drakest
Member

Откуда:
Сообщений: 64
AnaceH,
Пользователь именно ставит их или это gps-координаты?
Если координаты, то я делаю срез с частотой n-минут и выдаю только эти координаты
19 мар 13, 17:28    [14068863]     Ответить | Цитировать Сообщить модератору
 Re: Группировка точек на карте.  [new]
pirovindos
Member

Откуда:
Сообщений: 517
Не касаясь места (sql, ...) реализации, только алгоритм.

Нужно знать отображаемый участок карты и размер метки.
1. Разбить отображаемый участок на прямоугольные участки, большие чем размер метки в Х раз (от 1.5 до 3).
2. Сгруппировать метки по попаданию центра в прямоугольный участок. Вместо всех попавших в один участок, выводить одну обобщенную метку с указанием размера группы и с усредненными координатами (не перебор - такое быстро считается).

Вариации:
- координаты не усредненные, а одной из меток.
- при выводе проверять, нет ли перекрытия обобщенных меток с соседями (их всего 8) и подвинуть метки немного ближе к ценртам прямоугольников, если есть перекрытие
- ...
22 мар 13, 15:58    [14083286]     Ответить | Цитировать Сообщить модератору
 Re: Группировка точек на карте.  [new]
pirovindos
Member

Откуда:
Сообщений: 517
Не касаясь места (sql, ...) реализации, только алгоритм.

Нужно знать отображаемый участок карты и размер метки.
1. Разбить отображаемый участок на прямоугольные участки, большие чем размер метки в Х раз (от 1.5 до 3).
2. Сгруппировать метки по попаданию центра в прямоугольный участок. Вместо всех попавших в один участок, выводить одну обобщенную метку с указанием размера группы и с усредненными координатами (не перебор - такое быстро считается).

Вариации:
- координаты не усредненные, а одной из меток.
- при выводе проверять, нет ли перекрытия обобщенных меток с соседями (их всего 8) и подвинуть метки немного ближе к ценртам прямоугольников, если есть перекрытие
- ...
22 мар 13, 16:00    [14083305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить