二维地图引擎

转自:https://www.cnblogs.com/rhinoxy/p/4997884.html


  至校招来公司已有一年多时间了,记录下在这一年多时间里工作经历。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作为一个二维的地图渲染引擎,功能上需要完成对二维图片、点、线、面的显示。组件中使用图层的逻辑概念作为渲染的基本单位。图层分为底图层、点层、线层、面层,针对不同的图层组件向上提供了相应的操作接口。

  1. 底图层:被设计用来显示不同类型的地图,目前支持Arcgis与Pgis两种格式的地图。功能上响应用户拖拽平移、大小缩放。
  2. 点层:显示几何图元点,并可叠加不同的显示样,配置样式在不同的地图显示级别上的可见性。功能接口上提供对热点数量添加及删除、改变热点的空间位置、查询指定的热点及响应用户空间操作的几何区域计算,完成点选、线选、框选、面选、圈选。
  3. 线层:显示几何图元线段,支持配色并可配置在相应的地图级别上线段显示的宽度。功能接口上提供实时更新线段空间位置及配色和类似点层中增、删、改、查。
  4. 面层:对任意多边形(凸、凹、自交)填充显示。
  5. 临时标绘图层:自由绘笔、图片标注、空间操作轨迹。

整体架构图如下:

接口层负责与前端及远程服务交互。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值