Хотелось бы узнать, написал ли кто-нибудь из вас запрос на кластеризацию записей на основе перекрывающихся временных интервалов И местоположений.
Данные в моем приложении представлены как отдельные события человека, находящегося в любом заданном месте от времени начала до конца. Местоположение определяется как широта и долгота. В течение дня у одного человека будет несколько разных мест, а также время начала и окончания. Мне нужно собрать группы людей, которые были в одном месте и в одно и то же время. Один человек, скорее всего, будет в нескольких группах в течение дня.
<b>Example</b>:
Person A can be with Person B at the office from 10 AM to 11 AM.
Then Person A leaves the office for gym.
There he is with Person C from 12 noon to 1PM.
At 12:30 Person C leaves gym for the office.
At 1:30PM I have Person B and C at the office.
Persons B and C leave the office at 5PM.
В этом примере у меня есть
- Кластер 1 (Лица А и В в офисе) с 10:00 до 11:00,
- Группа 2 (Лица А и С в тренажерном зале) с 12:00 до 13:00 и
- Кластер 3 (лица B и C в офисе) с 13:30 до 17:00. * 10101 *
Местоположение каждого отдельного человека не будет точно соответствовать местоположению другого человека. Я использую тип точки географии SQL с STBuffer порога близости и проверяю STIntersects. Я также присоединяюсь к таблице на себя, чтобы проверить перекрытия времени. Но я испытываю некоторые странные формы поведения, когда Персона А сгруппирована сама по себе, когда другой человек никогда не присоединится к нему.
Мне интересно, есть ли шаблон проектирования для обработки подобных ситуаций. В идеале я хотел бы, чтобы набор записей был сгруппирован по «перекрывающемуся периоду времени» и «центроиду произвольной геометрии», но не могу понять, как получить перекрывающийся период времени и произвольную геометрию.
Любые идеи приветствуются и высоко ценятся.
P.S. Написание приложения для Windows не вариант, если только это не единственный способ.
РЕДАКТИРОВАТЬ: Не удалось указать, что места кластеризации никогда не известны заранее. Может быть неограниченное количество мест, где могут кластеризоваться два или более моих клиентов. Я не знаю, будет ли кластеризация происходить в офисе, спортзале, парке или на автобусной станции. Место кластеризации (я думаю) будет Центроид многоугольника, представленного широтами и долготами всех собравшихся людей.