【问题标题】:How to avoid overposting (overlapping) labels?如何避免过度发布(重叠)标签?
【发布时间】:2011-08-27 21:56:23
【问题描述】:

我必须在屏幕上显示大量标签而不重叠。标签位置应尽可能接近它们描述的特征。这些特征可能是屏幕上的点、线或多边形(想象任何种类的地图)。 我的申请必须满足以下要求:

  • 标签的位置必须避免与其他标签过度张贴(重叠)
  • 标签的位置必须避免与其他要素(多边形和线段)重叠
  • 标签的最佳位置在它们描述的特征的上方和右侧
  • 下方和右侧不太可接受
  • 最不可接受的位置在左侧

我需要想出一个方法来做到这一点。

在我开始随机尝试之前,我希望这里的某个人可能已经这样做了,并且能够就从哪里开始给我一些建议。

基本上,有了标签,我可以使用边界框将它们相互比较。虽然我不知道这样做的好方法。使用它们在屏幕上标记的线段和多边形,我真的不知道应该怎么做才能避免重叠。我希望在避免标签本身重叠的基础上不需要更多的努力。

如果我只需要处理与其他标签重叠的标签,我认为排斥会起作用。但是如果我在半个屏幕上绘制了一条线段,我不知道如何使用排斥技术避免与该线段重叠。

我使用的语言是 Actionscript 3 和 Flex 框架。我不相信 Flex 有任何像 Java Spring 中那样的布局管理器类可以为我完成这项工作。

无论如何,欢迎提供链接或建议。我可以允许一些蛮力;我不知道我怎么能做到这一点。谢谢!

PS 我相信这个问题的技术术语是“过度发布”。

【问题讨论】:

  • 请问您为什么需要这样做?
  • 当然。这是为了一张地图。可视区域是动态的。地图要素的位置是唯一提供的数据。但是必须显示标签来描述这些特征(特征可能是点、线或多边形)。显示标签的规则和我上面描述的一样。
  • 您真的要拥有这么多需要避免重叠的标签吗?屏幕上似乎有太多信息。这就像说当您在谷歌地图中搜索时,它不会添加标记,但也会添加信息气泡,对于所有它们......
  • 是的,当然。我只会告诉我的客户:“看起来你在屏幕上的信息太多了”。我相信他们会理解的。 ;-)

标签: flash apache-flex layout label overlap


【解决方案1】:

如果没有参考所有标签和您需要避免的其他形状/线条,我看不出有任何方法可以实现这一点。假设您有这些引用,只需绑定到 Flex 框架方法。

在 updateDisplayList() 循环你的标签;并将它们与屏幕上的其他所有内容一起放置。您可以使用 getExplicitOrMeasuredWidth() 和 getExplicitOrMeasuredHeight() 方法来确定相关项目所需的空间。

如果您使用内置的 Flex Container,例如 VBox 或 HBox,则标签和其他行将相互对齐。或者,如果您使用 Spark,VGroup 或 HGroup 将提供相同的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 2021-12-31
    • 2020-07-06
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多