maptalks.js
maptalks.js copied to clipboard
从0.50.0开始的新调整
动机
maptalks目前已经发布了3年,3年间webgis主流渲染技术从dom,canvas进化到了webgl,接下来maptalks也计划改为主要采用webgl技术渲染。 这次的新调整,是为了理顺webgl图层体系和canvas图层体系,让他们各司其职,避免产生困惑。
现状
- 每个map实例拥有一个顶层canvas实例,渲染图层时会把图层的canvas绘制在这个顶层canvas上。
- 画布隔离机制:每个canvas图层都有独立的画布(canvas)实例,不相互影响。
- 优点:消除渲染逻辑的耦合
- 缺点:画布只能整体上下叠加,无法控制具体图形的叠加顺序。例如,图层A绘制2个面a1, a2,图层B绘制了2个面b1,b2:
- 无法实现 a1, b1, a2, b2的叠加顺序,只能a1, a2永远叠加在b1,b2上方,或者b1, b2永远叠加在a1,a2上方
- 画布隔离机制不适用于webgl图层
- webgl图形的遮蔽顺序(前景图形会挡住后面的图形)应由三维空间关系决定,但因隔离画布上的图形只能整体上下叠加,会破坏三维空间遮蔽顺序。
- 现有的VectorLayer和ParticleLayer(图中红框里的图层)因为只能用canvas渲染,无法融入webgl绘制体系。
目标
- 把图层体系分为各自独立的canvas和webgl体系,用户可以根据自己的场景来选择使用。
- maptalks的默认图层体系改为webgl图层体系,但在需求简单的场景(如纯2d地图应用),也可以采用canvas图层体系。
调整计划
- 对maptalks做现代化改造,改用lerna管理项目
- 把VectorLayer及DrawTool提取 maptals.draw2d 插件,不再默认放入核心库中,而是改为lerna packages
- VectorLayer接口保持不变,只是新版本中,除了maptalks核心库,额外引入maptalks.vectorlayer插件。
- Marker,LineString,Polygon等图形类依然保留在核心库中,也适用于webgl图层。
- 未来webgl中会提供独立的矢量图层,用于绘制上述图形,使用上和VectorLayer基本相同。
- 考虑到性能,webgl中矢量图层会有类型限制,分为PointLayer, LineStringLayer, PolygonLayer,分别用于绘制不同类型的图形。
继续安利推荐用 TypeScript
maptalks.cesium Move to maptalks
-
Existing layer dependencies
-
Layer dependencies in the future
geometry dependencies
Groupgllayer should be built into the core library instead of plug-ins, so that it can integrate with other gllayers, such as threelayer and cesiumlayer
不知道目前进展如何呢?现在的V1.0.0-beta版本又是什么情况呢?谢谢。