交互式地图的思考

转自:http://blog.csdn.net/dizuo/article/details/8206419

一、最自然的交互方式

nature user interface,最自然的交互方式,用户直接操作数据。微软的kinect sdk中的gui名字就叫NUI,可见微软对nature ui的关注。之前我实现的NodeComposer的所见即所得交互方式,也是类似思想。
android中的ListView 非常之方便,用户直接在ListView上用slider。。。传统ListView控件中,用户必须用鼠标精准拾取scrollbar 才能滚动视图,旁边大片的显示区域不能直接操作。。
 

二、交互式地图的思考

1.  地图中的内容

点、线、面:point of interest,road,area。

poi / label, road 主要元素,都有一个作用范围,都有一个显示级别的生命区间,[begLevel, endLevel] 从这个区间之内它们才显示。

地图显示典型的LOD,level of detail,而且各个level之间的数据往往不同:level越大显示的细节越多,数据量越大 且更加真实;level越小屏幕区域的比例尺越大。数据处理过程是从BigLevel 的数据开始逐层抽稀。最终是一个倒棱锥模型

栅格地图暂且不说了,已经out了,各家矢量地图的渲染 使用瓦片,图片缓存 加快速度和节省电量。不可交互的内容以瓦片形式渲染,做缓存,可交互的内容在客户端以opengl / system sdk绘制。瓦片理论上是图像,可以图像处理做些艺术效果,当然这是另外一个话题。

如果要实现交互式地图,所有内容必须由客户端实时绘制,或者以逻辑数据结构而不是图片为粒度缓存。实时渲染所有元素,速度已经不是问题:nvidia_path_rendering 基于gpu硬件加速的矢量渲染,速度是传统软件矢量渲染的100+倍。实时绘制带来的耗电是个关键问题,每次手机打开3D 游戏,一会手机就发烫。。。

2. 交互的设计

交互,另一个层面即开放性,开放的东西越多,一则用户可能会更加迷茫(对于专业用户可能是好事情),再则软件也越危险。防止用户的暴力操作的最佳方式,交互行为上增加约束,适度的约束设计至关重要。

forever drive中用户创建驾车路线时,编辑路线操作:均匀显示一些角点,选择角点可以编辑,最关键的一点是用户并不能任意地拖动角点,每个角点作用范围都被限制在一个圆中,这个圆以当前角点为圆心,到旁边角点的一半距离为半径构造,这个限制很适合。

三、交互式设计的难点

手机屏幕太小。在有限的手机屏幕内实现高效、精准的交互操作着实重要。想到的一种解决方案:

手机局部放大技术:1)以图片层面放大,直接放大鼠标点击区域的帧缓存中内容;2)矢量数据层面放大,放大同时增加更多细节。

个性化定制 也是趋势,用户可以定制样式,添加个性化内容 通过ugc放方式给自己熟悉的3D pillar 贴图,定制路况 都离不开直接且高效地交互方式。

四、参考

1. NV Path Rendering : https://developer.nvidia.com/nv-path-rendering

2. My NodeComposer :http://blog.csdn.net/dizuo/article/details/7186442

原文地址:https://www.cnblogs.com/LCGIS/p/3205348.html