我正在寻找一种算法,这种算法可以让我在一张大型车辆列表中可视化地分离任意两到四辆车辆,这些车辆在地图上足够靠近,使得它们彼此模糊不清。我需要过滤掉车辆超过四辆车的情况,因为车辆将大量聚集在某些区域,在这些情况下将它们分开是不重要的。该算法还应标记已经处理过的车辆。
在我的问题空间中,更重要的是要知道车辆存在并且能够看到有关它们的信息,而不是获得关于它们所在位置的绝对准确的信息。
这个想法是增加大约10码(考虑到正在使用的地图比例),因此可以看到单独的车辆而不是被附近的其他车辆遮挡。
我想到了几种方法可以做到这一点,但考虑到这里答案的质量以及有人可能已经这样做的事实,我想我会发布这个问题。
我正在添加当前显示内容的图像,以帮助澄清所建议的评论之一(好的,它不是图表,但这是实际向用户显示的内容)。
有几个答案需要更改用于指示在给定位置有多少车辆(高尔夫球车)的视觉队列。我不想改变用户在视觉上的期望,并且必须向用户解释其含义。使用正方形的答案最接近我所寻找的但这只是视觉部分。我也正在寻找如何最好地遍历2到4个高尔夫球车的列表寻找组的算法,这些高尔夫球车在n(比如说5码)之内,而忽略了更大的分组(推车谷仓,小吃棚等)。图标上的数字对应于购物车编号。
此应用程序还允许用户缩放地图进/出,以便进一步缩小地图,汽车之间需要更多的分离,以便它们不会在视觉上重叠。
在图片中注意到汽车78和62遮挡了它们后面的汽车。
答案 0 :(得分:1)
我想我很想把每辆车都渲染成一个圆点(无论它们是否近在咫尺)。在点上方,我会绘制车辆名称标签(为了易读,您可以在labl后面绘制不透明或半透明的背景,或者以对比色将标签边界化)。
对于附近的车辆,我会绘制一个更大的点,并且上面有名称列表,否则,如果这会遮挡地图或其他车辆,则会有一条从点发出的线到一个更小的突破框带有名单列表的地图的突出部分。
E.g:
V66
V12 V07
V23 · V22
· •
V78 •
· |
+-----+
| V09 |
| V34 |
+-----+
答案 1 :(得分:0)
一个广场似乎是一个很好的候选人,因为你并不担心超过四辆车的情况。
我会将所有车辆的平均位置置于“重叠”的距离,并将其设置为方形的“中心”,长度和宽度足够大,将车辆放在每个角落不会导致任何重叠。
然后我将从左上方的车辆0开始,逆时针方向绕着方形的角落前行,将下一辆车添加到下一个角落。
简单而有效,你会失去一些准确性,假设可以(从你的帖子看起来好像?)这就是我所要做的。
答案 2 :(得分:0)
执行此操作的常用方法是使用备用标记。如果您的常用标记是推针图像,请使用顶部带有2的推针,用于同一位置的两个项目。另一种方法是将第一个标记放在准确的位置,然后将“标记”放在“下一个”的后面,以便对“下一个”进行定义。对于您的车辆示例:将第二个放在道路的一定距离处,根据当前比例,确保视觉分离。用于测试是否使用替代放置的排除矩形现在被拉长以覆盖第二个标记,这样当放置第三个车辆时,它将被放置在前两个标记后面。
答案 3 :(得分:0)
Google术语为label placement。一般来说,这是一个完整的研究领域,并没有真正好的通用解决方案,但对于这样的特定场景,有几个合适的实现。 Wikipedia/Automatic label placement也是一个很好的起点。
根据您的图像,您期望很少有重叠标签,那么您可以选择针对速度优化的简单贪婪算法。