基于缩放确定哪些点应在地图上可见的算法

时间:2010-03-26 13:11:02

标签: java maps gis algorithm

我正在为我的Uni课程制作类似谷歌地图的应用程序(不是复杂的,它应该加载城市的地图,例如,而不是整个世界)。地图可以有很多层,包括标记(餐馆,医院等) 问题是当你有很多点而你缩小地图时它看起来不正确。在此缩放级别,只需要显示一些点(并且在最大地图大小,所有点)。 问题是:如何确定指定缩放级别应该可见哪些点?

因为我已经实现了PR四叉树来加速渲染,所以我认为我可以定义一些“高优先级”标记(总是可见的,在地图编辑器中定义)并将它们放入队列中。在每个步骤中,从队列中移除标记,并且选择所有至少D单位的邻居(D取决于缩放级别)并将其插入队列中,依此类推。 有没有比我想到的算法更好的方法?

提前致谢!

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,无论将某些图标标记为高优先级的方法,都无法避免重叠图标。

我做了什么(在你的情况下应用可能并不容易 - 在我的情况下,地图是在桌面应用程序中呈现的,在渲染过程之上有更多的控制)是基于优先级进行排序,并且仅绘制标记不重叠 - 显示“XXX重叠标记已删除”等消息。通过这种方式,用户不会被信息所淹没,他仍然可以看到最重要的信息。

我希望这会有所帮助。

答案 1 :(得分:0)

我不确定我完全理解,但也许您可以根据从每个点到其最近邻居的平均距离的倒数为每个图层指定“邻域密度”。对于特定的缩放级别,您可以计算出可以轻松查看的最大密度,并将其用作阈值。

答案 2 :(得分:0)

我有从头开始设计地图应用程序的一些经验我建议你将整个世界分成16个缩放级别。缩放级别0应显示整个世界,缩放级别15应覆盖街道数据。

通常,您必须使用缩放级别0到3来拥有国家/地区的边界。并且每个缩放级别的变焦范围应为前一变焦范围的1/4。您可以缩放到表格地图(假设您使用数据库存储空间相关数据)。一旦定义了缩放级别和缩放级别到表映射的范围,就可以更好地控制查询数据。并建议为您的地图数据构建R-Tree索引。

每次获得图层/表格(假设图层可以是国家边界或铁路轨道或街道)时,建议您自己定义缩放级别,而不是花时间寻找算法,因为层数不会很大。

我可以坚持下去,但如果你想要具体的答案,我也可以解决它们。