2011-05-18 214 views
3

我必須在屏幕上顯示大量標籤而不重疊。標籤的位置應儘可能接近他們描述的特徵。這些特徵可以是屏幕上的點,線或多邊形(想象各種地圖)。 我必須滿足在我的申請下列要求:如何避免重疊(重疊)標籤?

  • 標籤必須被定位,以避免overposting(重疊)與其他標籤
  • 標籤必須被定位,以避免與其它的特徵重疊(多邊形和線段)
  • 用於標籤最佳位置是上方和功能右側它們描述
  • 下方和右邊是少可接受
  • 至少可接受的位置向左

我需要想出一個方法來做到這一點。

在我剛開始試圖隨意做這件事之前,我希望這裏有人可能已經這樣做了,並且能夠給我一些建議,從哪裏開始。

基本上,與標籤,我可以使用邊界框來比較他們彼此。雖然我不知道這樣做的好方法。在他們標記的線段和多邊形屏幕上,我真的不知道我應該怎麼做才能避免重疊。我希望在避免標籤本身重疊的情況下不需要更多的努力。

如果我只需要處理與其他標籤重疊的標籤,我認爲排斥會起作用。但是如果我在一半的屏幕上繪製了一條線段,我不知道如何避免與使用排斥技術的線段重疊。

我使用的語言是ActionScript 3和Flex框架。我不相信Flex有像Java Spring那樣的佈局管理器類可以爲我做這個工作。

無論如何,鏈接或建議將受到歡迎。我可以允許一些暴力行爲;否則我不知道我能做到這一點。謝謝!

PS我相信這個問題的技術術語是「overposting」。

+0

我可以問爲什麼你需要這樣做? – 2011-05-18 14:03:52

+0

當然。這是一張地圖。可視區域是動態的。地圖要素的位置是唯一提供的數據。但是必須顯示標籤來描述這些特徵(特徵可能是點,線或多邊形)。顯示標籤的規則如上所述。 – jpwrunyan 2011-05-18 23:51:39

+0

您是否真的有那麼多標籤需要避免重疊?似乎太多的信息在屏幕上顯示。這就像說當你在谷歌地圖上搜索,它不會添加標記,但信息氣泡,以及所有他們... – 2011-05-19 03:26:26

回答

0

我沒有看到任何方式來完成這個,而沒有參考所有標籤和其他形狀/線條,你需要避免。假設你有這些引用,只需綁定到Flex框架方法。

在updateDisplayList()循環顯示標籤;並將它們放置在屏幕上的其他所有位置。您可以使用getExplicitOrMeasuredWidth()和getExplicitOrMeasuredHeight()方法來確定相關項目所需的空間。

如果您使用內置的Flex容器,例如VBox或HBox,則標籤和其他行將按照彼此定位。或者,如果您使用的是Spark,則VGroup或HGroup將提供相同的功能。