至校招来公司已有一年多时间了,记录下在这一年多时间里工作经历。2014.7.14,以C++语言技能作为生产力入职开始第一份工作,主要职责参与地图引擎研发及维护。起初在老大的指导下熟悉引擎(MapEngine)中各个功能模块的执行流并据需求完成功能上的扩充。后来项目需求,改造MapEngine供Chrome浏览器使用,现有的MapEngine代码不够模块化重用度不高,里面包含了ATL简单窗口对象(响应鼠标事件)以及渲染代码混杂在Model代码(COM对象)中并且都是使用OpenGL的路径渲染完成绘制,这在浏览器OpenGLES的环境下无法支持。所以决定重新开发新的版本MapEngineES供浏览器,项目交付后该版本就停止更新。2015.3开年部门决定做平台,我的工作再次继续为该平台做地图插件,这次是在MapEngine的基础之上进行代码重构,移除里面的ATL窗口对象(因为含有窗口的控件在WPF显示中有"空域"问题,并且使用”离屏渲染"后续再聊这个块内容),将响应鼠标事件交给WPF UserControl去做并且支持JSON命令交互。到2015.11由于诸多原因部门宣布平台项目失败了,重构后的MapEngine也就弃用了。
再后续思考着将PC端与浏览器端地图引擎整合在一起,将代码模块化,便于复用。
功能规格说明:
地图引擎(文中另一种叫法地图组件)基于事件驱动来构架,事件产生消息主要分为两大类:窗口鼠标输入消息和JSON指令消息。
响应指令事件是本组件主要任务,MapEngine作为一个二维的地图渲染引擎,功能上需要完成对二维图片、点、线、面的显示。组件中使用图层的逻辑概念作为渲染的基本单位。图层分为底图层、点层、线层、面层,针对不同的图层组件向上提供了相应的操作接口。
底图层:被设计用来显示不同类型的地图,目前支持Arcgis与Pgis两种格式的地图。功能上响应用户拖拽平移、大小缩放。
点层:显示几何图元点,并可叠加不同的显示样,配置样式在不同的地图显示级别上的可见性。功能接口上提供对热点数量添加及删除、改变热点的空间位置、查询指定的热点及响应用户空间操作的几何区域计算,完成点选、线选、框选、面选、圈选。
线层:显示几何图元线段,支持配色并可配置在相应的地图级别上线段显示的宽度。功能接口上提供实时更新线段空间位置及配色和类似点层中增、删、改、查。
面层:对任意多边形(凸、凹、自交)填充显示。
临时标绘图层:自由绘笔、图片标注、空间操作轨迹。
整体架构图如下:
接口层负责与前端及远程服务交互。