Skip to content

引擎适配器概览

GMap SDK 通过 EngineAdapter 接口抽象底层地图引擎,支持运行时切换。

支持的引擎

引擎包名维度特点
OpenLayers@gmap/shim-openlayers2D功能全面,投影丰富
MapLibre@gmap/shim-maplibre2D矢量瓦片,Mapbox 样式
Cesium@gmap/shim-cesium3D地形、3D Tiles、场景效果

注册引擎

ts
import { EngineRegistry } from '@gmap/core';
import OlAdapter from '@gmap/shim-openlayers';

// 静态注册
EngineRegistry.register('ol', () => new OlAdapter(), { default: '2d' });

// 懒加载注册(大体积引擎推荐)
EngineRegistry.registerLazy('cesium', () => import('@gmap/shim-cesium'), { default: '3d' });

运行时切换

ts
const map = await createMap({ engine: 'ol', mode: '2d' });
// ... 添加图层、数据 ...

// 切换到 3D 引擎(保留视图和数据)
await map.switchEngine('cesium', { keepView: true, keepLayers: true });

能力声明

每个引擎通过 capabilities 声明支持范围:

ts
const adapter = new OlAdapter();
console.log(adapter.capabilities);
// {
//   dimensions: ['2d'],
//   raster: true,
//   vectorTile: true,
//   geojson: true,
//   terrain: false,      // ← 不支持
//   tiles3d: false,      // ← 不支持
//   ...
// }

不支持的能力自动降级为 no-op + warnOnce。

EngineAdapter 接口

生命周期

  • load(options) — 加载引擎资源
  • mount(container, options) — 挂载到容器
  • isMounted() — 是否已挂载
  • resize() — 调整大小
  • destroy(options) — 销毁
  • getNative(options) — 获取原生对象

视图/相机

  • getViewState() — 获取视图状态
  • setViewState(state, options) — 设置视图状态
  • flyTo(target, options) — 飞行到目标
  • fitExtent(extent, options) — 适应范围
  • project(coord) — 坐标转像素
  • unproject(pixel) — 像素转坐标
  • getResolution() — 获取分辨率
  • getScale() — 获取比例尺
  • setConstraints(options) — 设置约束

数据源

  • createSource(spec) — 创建数据源
  • updateSource(handle, patch) — 更新数据源
  • removeSource(handle) — 移除数据源
  • refreshSource(handle) — 刷新数据源

图层

  • createLayer(spec, options) — 创建图层
  • updateLayer(handle, patch) — 更新图层
  • removeLayer(handle) — 移除图层
  • reorderLayer(handle, options) — 重排序图层
  • setLayerVisibility(handle, visible) — 设置可见性
  • setLayerOpacity(handle, opacity) — 设置透明度

要素

  • addFeatures(layer, features, options) — 添加要素
  • updateFeatures(layer, features) — 更新要素
  • removeFeatures(layer, ids) — 移除要素
  • clearFeatures(layer) — 清空要素
  • setFeatureState(layer, id, state) — 设置要素状态
  • queryFeatures(layer, options) — 查询要素

样式

  • applySymbol(layer, symbol, options) — 应用符号
  • applyRenderer(layer, renderer) — 应用渲染器
  • applyMapboxStyle(style, options) — 应用 Mapbox 样式
  • setPaintProperty(layerId, name, value) — 设置绘制属性
  • setLayoutProperty(layerId, name, value) — 设置布局属性
  • addImage(id, image, options) — 添加图片
  • removeImage(id) — 移除图片
  • hasImage(id) — 是否有图片

交互/事件

  • on(type, handler, options) — 监听事件
  • off(type, handler) — 移除监听
  • pick(at, options) — 拾取要素
  • enableInteraction(kind, options) — 启用交互
  • disableInteraction(handle) — 禁用交互
  • setCursor(style) — 设置光标
  • setInputEnabled(input, enabled) — 设置输入启用

覆盖物/控件

  • createOverlay(spec) — 创建覆盖物
  • updateOverlay(handle, patch) — 更新覆盖物
  • removeOverlay(handle) — 移除覆盖物
  • createControl(spec) — 创建控件
  • removeControl(handle) — 移除控件

三维

  • setTerrain(source, options) — 设置地形
  • setLighting(options) — 设置光照
  • addSceneEffect(spec) — 添加场景效果
  • removeSceneEffect(handle) — 移除场景效果
  • setClippingPlanes(planes) — 设置裁剪平面

诊断

  • exportImage(options) — 导出图片
  • getStats() — 获取统计

扩展

  • extensions — 扩展对象
  • invoke(method, ...args) — 调用扩展方法

共存接口

所有适配器实现了以下共存接口:

方法用途
setInputEnabled(input, enabled)暂停/恢复交互(dragPan、scrollZoom 等)
view:change 事件相机变化时发射,供 CameraSync 监听
createOverlay/updateOverlay/removeOverlayDOM overlay 管理

四川省交通运输综合地理服务平台 地图开发框架