SuperMap iClient的时态数据可视化方案

用户1:我需要把实时监控的车辆运行数据,利用GIS可视化表现出来,要支持查看车辆实时信息;

用户2:我有当月的气象历史数据,希望能够通过GIS展示出其历史变化情况,以辅助业务决策;

用户3:我有大量的地物数据,希望在GIS上全部显示出来,并且能够交互而且操作流畅。

以上这些都是比较典型和常见的用户场景,主要体现在用户的GIS数据具备时态性,这些数据要么是实时动态获得的,要么是历史观测积累的,而且数据相对都比较庞大,这类数据的可视化展现往往能为业务决策提供理论支撑。那么,当这个可视化的工作出现在Web端时,我们需要提供相应的解决方法。

矢量数据可视化技术

目前在SuperMap iClient 6R(2012)基于HTML5/Canvas和Apache Flex技术,提供了一种支持大数据量的矢量数据可视化技术,分别为JavaScript API中的SuperMap.Layer.Vector("",{renderers:["Canvas2"]})和Flex API中的com.supermap.web.mapping.GraphicsLayer()。通常意义上的地理矢量数据类型——点、线、面都可以直接加在图层中渲染显示。

丰富的符号系统

与矢量数据显示相配套的是符号系统,这里,iClient针对点、线、面分别提供了预定义的风格样式,并支持通过接口设定自定义的符号表达方式。

                                                                                                    Flex符号系统API表格

数据类型

预定义符号API

符号API


GraphicMarkerStyle(symbol:String,size:Number=12,color:Number=0x4272d7,alpha:Number=1,xOffset:Number=0,yOffset:Number=0,angle:Number=0,border:GraphicLineStyle=null,icon:Object=null)

同时还支持图片icon,三叶草CloverStyle、格网GridStyle等类型符号。

线


GraphicLineStyle(symbol:String,color:Number=0x5082e5,alpha:Number=1,weight:Number=2,cap:String=null,join:String=null,miterLimit:Number=3)


GraphicFillStyle(symbol:String,color:Number=0x4272d7,alpha:Number=0.4,border:GraphicLineStyle=null)

                                                     JavaScript符号系统API表格

数据类型

符号API

strokeColor,线边框颜色。一个十六进制的RGB值(如:”#ff0000”)。

strokeOpacity,边框透明度 (0-1)。

strokeWidth,边框像素宽度。

strokeLinecap,边框端点类型 (“butt”, “round”, or “square”)。

fillColor,十六进制RGB填充色 (如:”#ff0000”, 表示红色)。

fillOpacity,填充透明度 (0-1)。

pointRadius,像素点半径。

externalGraphic,用于渲染点的外部图形url。

graphicWidth,指定外部图形的宽度。

graphicHeight,指定外部图形的高度。

graphicOpacity,外部图形的透明度 (0-1)。

graphicXOffset,外部图形相对于x坐标的像素偏移量。

graphicYOffset,外部图形相对于y坐标的像素偏移量。

rotation,基于中心点顺时针旋转图形 (或者是任何指定x坐标、y坐标的偏移量的中心点)。

graphicName,渲染点时使用的风格名称。支持的值包含 “circle”, “square”, “star”, “x”, “cross”, “triangle”。

线

strokeColor,线边框颜色值。是一个RGB十六进制值 (如:”#ff0000” 代表红色)。

strokeOpacity,线边框透明度 (0-1)。

strokeWidth,边框像素宽度。

strokeLinecap,边框端点类型 (“butt”, “round”, “square”)。

strokeColor,线边框颜色值。是一个RGB十六进制值 (如:”#ff0000” 代表红色)。

strokeOpacity,边框透明度 (0-1)。

strokeWidth,边框像素宽。

strokeLinecap,边框端点类型 (“butt”, “round”, “square”)。

fillColor,RGB 十六进制填充色 (如: “#ff0000” 代表红色)。

fillOpacity,填充透明度 (0-1)。

由于提供了预定义的符号系统,所以在做矢量数据的渲染时,甚至可以不设置符号而使用默认的符号,快速编程。

借助丰富的符号系统,我们可以做出这样的Web端矢量渲染:

 

                                                                           Flex多种通信基站图 

 

                                                                JavaScript/HTML5组合符号——扇叶图

支持多种交互能力

通过可视化的GIS数据可以直观的体现出数据本身的时空特性,以此同时,如果要查看可视化背后的详细数据信息,就缺不了必要的交互操作——选择。

虽然这个交互是最为常见的功能,但是对于iClient所提供的这种矢量渲染技术却带来了一定的难度,因为我们的渲染过程是基于图像像素级别的,而不是基于可视化对象的,因此在提升了可视化效果和性能的同时,也损失了一点交互性。即便如此,该矢量渲染技术还是支持对象的选择和简单的编辑功能——包括增加、删除对象以及节点编辑功能。

特别需要说明的是,在矢量对象相对密集的叠加显示时,所作的选择操作可能会出现没有选择到的情况,原因是因为叠加后的图像在所基于像素级别的选择计算时,可能会出现干扰,一旦出现干扰,产品内部将不再反馈结果。这一点也是希望能够在实际使用中得到用户的体谅。 

 

                                                                                     可交互的操作图

高性能矢量动画

在性能方面,尤其是对于Web端可视化来说,大数据量的渲染性能和交互流畅度一直是困扰WebGIS的问题。SuperMap iClient初步解决了大数据量的性能问题,对于结点数据量为10000左右的点、线或面数据,加载和渲染的总时间可以达到1~2秒,同时浏览体验也比较平滑。

那么基于这个特点,我们也回到本文的主题——时态数据可视化的方案,也就是对时态数据使用矢量动画的表达方式,将具有时序特点的空间信息演化状态直观的表达出来。

那么如何来实现时态数据的动画效果呢?技术和原理就是上文提及的矢量数据可视化技术,将每个时段的空间数据用对应的符号系统渲染在某个图层中,借助“帧动画”的思想,下一时段数据在渲染前刷新或者清除上一时段的渲染数据即可。时间间隔可以控制,不过最好是确保在时间间隔内数据能够完全渲染。这样,我们也会发现,数据越少,渲染越快,时间间隔越短,动画效果越好,良性循环,当然最好的效果就是能够达到每秒24帧以上。(欲知具体的实现代码,请参见产品包示范代码) 

 

                                                                                                              模拟航班飞行动画图

 

                                                                               气温变化示意图

最后,对于SuperMap iClient的时态数据可视化做个小结。本文开头提及的三个用户典型场景,已经在一些领域的行业应用中使用该方案验证与实践了,包括通信、金融保险、气象等,我们也将继续在这方面不断的改善和加强,也希望这种可视化的方案能给大家带来一些新的Web体验。

Author:dulvyizhihua
原文地址:https://www.cnblogs.com/dulvyizhihua/p/2771657.html