maptalks.js icon indicating copy to clipboard operation
maptalks.js copied to clipboard

从0.50.0开始的新调整

Open fuzhenn opened this issue 4 years ago • 6 comments

动机

maptalks目前已经发布了3年,3年间webgis主流渲染技术从dom,canvas进化到了webgl,接下来maptalks也计划改为主要采用webgl技术渲染。 这次的新调整,是为了理顺webgl图层体系和canvas图层体系,让他们各司其职,避免产生困惑。

现状

image

  • 每个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,分别用于绘制不同类型的图形。

fuzhenn avatar Jan 28 '21 04:01 fuzhenn

继续安利推荐用 TypeScript

wang2lang avatar Jan 28 '21 12:01 wang2lang

maptalks.cesium Move to maptalks

deyihu avatar Jan 28 '21 13:01 deyihu

  • Existing layer dependencies @L(6CE {EHCDU~DLCP77J7N

  • Layer dependencies in the future }LB@BQ4C`)O8SX$PZ0R(7OG

deyihu avatar Jan 28 '21 14:01 deyihu

geometry dependencies

GOFG8_(5VG14B9FC~NJ4X

deyihu avatar Feb 01 '21 02:02 deyihu

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

deyihu avatar Feb 04 '21 12:02 deyihu

不知道目前进展如何呢?现在的V1.0.0-beta版本又是什么情况呢?谢谢。

ok958726 avatar Jan 03 '22 13:01 ok958726