Каков наилучший алгоритм для визуального разделения перекрывающихся транспортных средств в непосредственной близости от карты? - PullRequest
5 голосов
/ 14 октября 2010

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

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

Идея состоит в том, чтобы добавить приблизительно 10 ярдов (учитывая масштаб карты, который используется), чтобы можно было видеть отдельные транспортные средства вместо того, чтобы быть скрытыми другими транспортными средствами в непосредственной близости.

Я думал о нескольких способах сделать это, но учитывая качество ответов здесь и тот факт, что кто-то, возможно, уже сделал это, я подумал, что опубликую вопрос.

IЯ добавляю изображение того, что в настоящее время показано, чтобы помочь уточнить, как один из предложенных комментариев (ОК, это не диаграмма, но это то, что на самом деле показано пользователю).

Некоторые ответы требуют изменения визуальных очередей, используемых для указания количества транспортных средств (автомобилей для гольфа) в данном месте.Я не хочу менять то, что пользователи ожидают визуально, и должен объяснить пользователям, в чем смысл.Ответ с использованием квадрата ближе всего к тому, что я искал, но это только визуальная часть.Я также ищу алгоритм, как наилучшим образом пройти по списку и найти группы из 2–4 гольф-машин, которые находятся в пределах n (скажем, 5) ярдов друг от друга, игнорируя при этом большие группировки (сарай для тележки, закусочная и т. Д.).Числа на значках соответствуют номерам тележки.

Это приложение также позволяет пользователю увеличивать / уменьшать карту, поэтому чем больше масштабируется карта, тем больше расстояние между автомобилями необходимо, чтобы они невизуально перекрываются

Обратите внимание на изображение, что автомобили 78 и 62 скрывают автомобили, которые позади них.

alt text

Ответы [ 4 ]

1 голос
/ 14 октября 2010

Я думаю, что у меня будет соблазн отобразить каждое транспортное средство как точку (независимо от того, находятся они в непосредственной близости или нет). Над точкой я нарисую ярлык с названием транспортного средства (для разборчивости вы можете нарисовать непрозрачный или полупрозрачный фон за лабиринтом, или же ограничить ярлык контрастным цветом).

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

например:.

                             V66
               V12           V07
V23             ·            V22
 ·                            •
          V78             •
           ·              |
                       +-----+
                       | V09 |
                       | V34 |
                       +-----+
0 голосов
/ 14 октября 2010

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

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

0 голосов
/ 14 октября 2010

Обычный способ сделать это с помощью альтернативных маркеров. Если ваш обычный маркер представляет собой изображение с канцелярской кнопкой, используйте канцелярскую кнопку с цифрой 2 в верхней части для двух элементов в одном месте. Другой способ - поставить первый маркер в нужное место и поставить более поздние маркеры «рядом» с ним для определения «следующего». Для вашего примера транспортных средств: поместите второй на некотором расстоянии вниз по дороге, что, учитывая текущий масштаб, обеспечивает визуальное разделение. Прямоугольник исключения, используемый для проверки того, следует ли использовать альтернативное размещение, теперь вытянут, чтобы покрыть второй маркер, чтобы при размещении третьего транспортного средства он располагался за первыми двумя маркерами.

0 голосов
/ 14 октября 2010

Квадрат кажется хорошим кандидатом, поскольку вы не беспокоитесь о случаях с более чем четырьмя транспортными средствами.

Я бы взял среднее местоположение всех транспортных средств в "перекрывающейся" близости и установил бы это как "центр "квадрата, длина и ширина которого достаточно велики, чтобы размещение транспортного средства на каждом углу не приводило к перекрытию.

Тогда я бы начал с транспортного средства 0 в левом верхнем углу и обошел углыквадрата против часовой стрелки, добавляя следующий автомобиль в следующий угол.

Простой и эффективный, вы теряете некоторую точность, предполагая, что это нормально (из вашего поста кажется, что это так?) Это то, что я буду делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...