Как избежать перехлеста (перекрытия) ярлыков?

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

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

Мне нужно найти способ сделать это.

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

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

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

Я использую язык ActionScript 3 и платформу Flex. Я не верю, что у Flex есть какие-либо классы диспетчера компоновки, такие как в Java Spring, которые могут выполнять эту работу за меня.

В любом случае, ссылки или предложения приветствуются. Я могу допустить грубую силу; Я не понимаю, как я могу добиться этого иначе. Спасибо!

PS Я считаю, что технический термин для обозначения этой проблемы - «перегрузка».


person jpwrunyan    schedule 18.05.2011    source источник
comment
Могу я спросить, зачем вам это нужно?   -  person J_A_X    schedule 18.05.2011
comment
Конечно. Это для карты. Видимая область динамическая. Положение объектов карты - единственные предоставленные данные. Но для описания этих объектов должны отображаться подписи (объекты могут быть точками, линиями или полигонами). Правила отображения меток такие же, как я описал выше.   -  person jpwrunyan    schedule 19.05.2011
comment
Неужели у вас будет столько ярлыков, чтобы избежать дублирования? Похоже, слишком много информации для вывода на экран. Это все равно, что сказать, когда вы ищете в картах Google, он не добавляет маркер, но также добавляет информационный пузырь для всех них ...   -  person J_A_X    schedule 19.05.2011
comment
Да, конечно. Я просто скажу своему клиенту: похоже, у вас слишком много информации на экране. Я уверен, они поймут. ;-)   -  person jpwrunyan    schedule 20.05.2011


Ответы (1)


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

В updateDisplayList () переберите ваши ярлыки; и разместите их вместе со всем остальным на экране. Вы можете использовать методы getExplicitOrMeasuredWidth () и getExplicitOrMeasuredHeight (), чтобы определить пространство, необходимое для рассматриваемого элемента.

Если вы используете встроенный контейнер Flex, такой как VBox или HBox, метки и другие строки будут располагаться в соответствии друг с другом. Или, если вы используете Spark, VGroup или HGroup предложат ту же функциональность.

person JeffryHouser    schedule 18.05.2011