Mapbox架构

概述

本文是针对native sdk 4.0进行学习总结,以ios平台为例进行的架构总结,方便后续工作的开展。由于时间和认知原因,总结可能存在不当之处,随着后续的理解加深,将进行不断的完善和修正。

系统分层

系统分层图

如上图所示为,地图SDK的系统分层,总体上分为两层,地图内核层(图中虚线框部分)和SDK封装层(图中上部紫色框)。

  • 地图内核层:是地图显示与控制功能的实现层,主要是C++实现,部分平台相关的由各平台语言实现,内核层又可以分为数据IO层、资源管理层、渲染组织层、渲染接口层、地图控制层等。
    • 数据IO层:负责资源数据的加载、解析、数据缓存等,包括缓存数据和网络数据等;
    • 资源管理层:负责地图资源的管理调度,资源包括地图样式、图片、文字、地图数据等;
    • 渲染组织层:负责将地图数据和样式,生成渲染所需数据,渲染状态控制、渲染排序等;
    • 渲染接口层:负责对渲染API(OpenGL、gles)的封装,实现渲染的跨平台性;
    • 地图控制层:负责对地图的控制,包括位置、层级、风格等,负责事件的分发处理,负责对外(sdk层)接口的封装;
  • SDK封装层:负责地图引擎空间部分的实现,负责根据不同平台实现不同的语言的封装,如iOS的OC封装、Android的JNI封装等。

模块说明

在本节中,将对mapbox的模块进行说明,每个模块为一个工程或者为多个类和文件的集合。

模块图关系图

如上图所示,mapbox的模块逻辑图,图中箭头代表了模块间的依赖关系(由于在实现中大量使用的Bridge模式,所以依赖关系存在一些出入)。虚线框代表上一节所述对应颜色的分层。

每个模块的功能说明如下:

  1. 基础库:该部分封装一些与业务无关的公共库
  • Vendor:为一些第三方的开源库,如boost,geojson,sqlite等;
  • util:定义实现了一些基础的功能类。如Thread,timer,geometry,image,event,task等,这些基础功能与业务无关,为上层的业务模块所调用;
  • actor:任务的调度管理基础库,实现了不同的活动者(线程,或者线程池)之间的任务通知,分配以及处理机制;

2. 渲染接口

  • Gfx: 对渲染环境的抽象,对渲染概念的抽象和枚举定义,该模块不依赖opengl。如深度、模板测试等等的抽象定义;
  • gl:是对opengl相关对象的封装,依赖于opengl和gfx。如Vbo,Fbo,uniform等概念进行封装,真正与opengl进行交互;
  • Program:是对各种渲染shader的管理模块,包括shader的管理,calldraw调用等。(源代码中将shader独立为一个单独的模块,现改造为合并到program模块中)。

3. IO

  • Storage:负责数据的加载、下载、缓存等功能
  • Sprite:主要负责中图片资源的下载,解析等操作
  • conversion:在style模块下,负责样式文件json的解析等,包括图层、数据源、过滤器、表达式等;
  • Geometry:矢量瓦片数据解析的辅助模块、DEM数据的操作,该模块没有统一的功能集合,难以归纳;

4. 资源

  • Style:样式的管理模块,与样式文件相对应,包括图层(style::Layer)的管理,数据源(style::Source)的管理,各种样式组成的定义,如属性、表达式、灯光、图片等;
  • Tile:瓦片数据的定义管理模块,定义了各种瓦片以及相应操作,包括栅格瓦片、矢量瓦片、地形瓦片、json瓦片等;
  • Text:文字的管理模块,包括文字数据、文字纹理生成、碰撞检测等相关功能;
  • Algorithm:主要是瓦片ID相关的计算操作;

5. 渲染组织

  • Render:地图显示相关的在引擎的组织管理模块,包括渲染数据组织(renderlayer),渲染队列组织、渲染数据生成(bucket)、显示区域计算、渲染控制等功能;
  • Layermanger:工厂模块,负责创建对象style::Layer、RenderLayer、Bucket、Layout等;
  • <
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值