在地图上,如何最好地算法来视觉分离靠近的重叠车辆?

5
我正在寻找一种算法,可以在地图上将任何两到四辆车可视化分开,这些车在地图上非常接近,以至于它们会相互遮挡。我需要过滤掉超过四辆车的情况,因为车辆会聚集在某些地方,数量很大,并且在这些情况下将它们分开是不重要的。该算法还应标记已经处理过的车辆。
在我的问题空间中,更重要的是知道车辆是否存在并能够查看有关它们的信息,而不是绝对准确地知道它们在哪里。
我的想法是添加约10码(根据使用的地图比例尺),以便可以看到单个车辆,而不是被附近其他车辆遮挡。
我已经想到了几种方法来做到这一点,但考虑到这里的答案质量和可能已经有人完成了这项工作,我想我应该发布这个问题。
我正在添加一个当前显示的图像,以帮助澄清,就像其中一条评论建议的那样(好吧,它不是一个图表,但这实际上是向用户显示的内容)。
其中几个答案需要更改用于指示给定位置有多少辆车(高尔夫球车)的视觉提示方式。我不想改变用户预期的视觉效果,并且必须向用户解释含义。使用正方形的答案最接近我所要寻找的,但这只是视觉部分。我还在寻找如何最好地遍历列表以找到彼此之间距离在n(比如5)码以内的2至4辆高尔夫球车的群组,同时忽略更大的群体(车库、小吃亭等)。图标上的数字对应于车号。
该应用程序还允许用户缩放地图,因此地图缩小时需要更多的车辆分离以使它们不会在视觉上重叠。
请注意图片中,车辆78和62正在遮挡它们后面的车辆。

你能更详细地描述一下吗?有一个图表会很好。 - Jacob
4个回答

1

我认为我会将每辆车都渲染成一个点(无论它们是否靠近)。在点上方,我会绘制车辆名称标签(为了易读性,您可以在标签后面绘制不透明或半透明的背景,或者用对比色来描边标签)。

对于靠近的车辆,我会绘制一个单独的、更大的点,并在其上方列出名称,或者如果这会遮挡地图或其他车辆,则从点发出一条线到地图的不显眼部分的突出框中列出名称。

E.g.:

                             V66
               V12           V07
V23             ·            V22
 ·                            
          V78             
           ·              |
                       +-----+
                       | V09 |
                       | V34 |
                       +-----+

1

谷歌术语是标签放置。一般来说,这本身就是一个完整的研究领域,没有真正好的通用解决方案,但对于像这样的具体场景,有几个适合的实现。维基百科/自动标签放置也是一个很好的起点。

根据您的图像,您期望非常少的重叠标签,那么您可以选择简单的贪心算法,以优化速度。


0

由于您不必担心超过四辆车的情况,因此正方形似乎是一个很好的选择。

我会取所有“重叠”接近度车辆的平均位置,并将其设置为正方形的“中心”,长度和宽度足够大,以便在每个角上放置一辆车时不会发生任何重叠。

然后,我会从左上角开始,顺时针绕着正方形的角落工作,将下一辆车添加到下一个角落。

简单而有效,您会失去一些准确性,假设这没关系(从您的帖子中看来是这样?)这就是我会做的事情。


0
一种常见的方法是使用备用标记。如果常规标记是图钉图像,则在其顶部使用一个带有“2”的图钉,表示同一位置上有两个项目。另一种方法是将第一个标记放在确切的位置上,并将后续标记“放置在”旁边(对于“旁边”的某种定义)。对于车辆的示例:在道路下方某个距离的地方放置第二个标记,以确保在当前比例下的视觉分离。用于测试是否使用备用放置的排除矩形现在被拉长以覆盖第二个标记,以便当放置第三辆车时,它将被放置在前两个标记后面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接