2012-12-02 37 views
0

我正在开发一个绘制3d地图的移动应用程序。我遇到的其中一个问题是试图在没有任何重叠的情况下绘制街道标签。我可以让文本沿着路径轮廓,但也有很多的,他们重叠的地方:Google如何为其3d地图绘制街道标签?

enter image description here

谷歌并绘制街道标志,没有任何交叉或重叠的一个非常伟大的工作。 Android移动版Google地图应用中的3D视图特别擅长演示此功能。

我已经能够想出的唯一想法是做碰撞检测(每个字母之间的封闭球体之间关闭的标签)。这在3D中非常昂贵,特别是一次在屏幕上显示许多标签。

我在寻找一些关于谷歌可能如何做他们的街道标签放置或我可以尝试比蛮力碰撞检测更便宜的其他想法的见解。当您缩放和平移显示器时,Google地图应用会实时更新标签的放置位置,因此他们使用的任何方法都非常高效。

回答

0

你说我有点过分了。而不是试图逐字逐句碰撞,将其简化为一连串的线条。用直线书写的名字可以用一条直线表示。最多可以使用2-3条线来近似弯曲道路内的一些文本。毕竟,它不一定是像素精确的。

您还可以建立其他街道与当前街道“碰撞”(也称为桥梁位置)的集合,然后确保您的名称不会重叠或靠近这些位置。

+0

在我已经展示的例子中,重叠的文字沿着根本不相交的线条。只是字体本身足够大,可以相互重叠。我认为这意味着我不得不缓冲文本所在的多段线进行交叉测试(所以比较每个标签的四条多段线),或者在两条线上的每段之间进行最小距离比较。对我来说,这两种方法似乎都比较复杂。但是你说对比同一线段的人物是很浪费的。 – Prismatic

+0

你的意思是大路标签?是的,你让我错了(我的回答有点误导)。简化你的文字到线条或一系列线条,然后确保它们不会相互交叉,也避免它们变得太靠近(如果两个相邻的话你可以合并它们)。 – Mario

相关问题