mars3d《getBasemaps》获取底图配置(map.basemap = baseMaps的id)去控制使用当前的底图

28 阅读2分钟

返回值结构

函数返回一个对象,包含两个关键属性:baseMaps 和 hasTerrain,具体含义如下:

1. baseMaps: map.getBasemaps(true)

  • 来源:调用 map.getBasemaps(true) 方法(Mars3D 地图实例的底图信息获取方法),传入 true 表示返回经过框架处理的结构化底图数据

  • 数据格式:一个数组,每个元素代表一个底图(或底图组),包含前端渲染所需的核心信息,例如:

    • id:底图唯一标识(对应 config.json 中底图配置的 id),用于切换底图时定位。
    • name:底图名称(如 “天地图影像”“高德电子”),用于 UI 显示。
    • options:底图的配置信息,包含 icon(图标路径)、type(底图类型,如 tdt/gaode)等。
    • show:布尔值,标识该底图当前是否处于显示状态(用于高亮选中的底图)。
    • isAdded:布尔值,标识该底图是否已添加到地图中。
  • 用途:在前端组件(manage-basemap/index.vue)中,通过遍历该数组渲染底图卡片列表,展示底图名称和图标,并根据 show 属性高亮当前选中的底图。

2. hasTerrain: map.hasTerrain

  • 来源:直接获取地图实例的 hasTerrain 属性(Mars3D 地图的地形状态属性)。
  • 含义:布尔值(true/false),表示当前地图是否启用了地形效果。
  • 用途:在前端组件中绑定到 “显示地形” 开关(mars-switch),用于展示和控制地形的启用状态(通过 changeTerrain 函数修改该值)。

实际应用场景

在 manage-basemap/index.vue 组件中,getLayers 函数的调用流程如下:

  1. 组件挂载时(onMounted),调用 mapWork.getLayers() 获取底图和地形数据。
  2. 使用返回的 baseMaps 数组渲染底图卡片列表(通过 v-for 循环,展示每个底图的图标和名称)。
  3. 根据 baseMaps 中 show 为 true 的底图 id,设置当前激活的底图(active.value = m.id),实现高亮效果。
  4. 将 hasTerrain 绑定到 “显示地形” 开关(chkHasTerrain.value),同步显示当前地形状态,并通过开关的 change 事件触发 changeTerrain 函数更新地形状态。
export function getLayers() {
  return {
    baseMaps: map.getBasemaps(true),
    hasTerrain: map.hasTerrain
  }
}

getLayers 函数是底图控制模块的 “数据中枢”,通过整合底图列表(baseMaps)和地形状态(hasTerrain),为前端组件提供了统一的数据接口,实现了底图切换、地形显示等交互功能与地图实例状态的同步。