Skip to content

内置图层

SDK 提供了丰富的内置图层,包括基础图层、空域图层、航路图层等,可以直接使用而无需手动配置。

内置图层总览

SDK 提供了以下内置图层,可以直接通过 addBuiltInLayer() 方法添加使用:

图层ID图层名称说明
background背景图地图背景底图
water / lake水域湖泊水域湖泊图层
landLayer陆地图层陆地图层
countryline国家边界国家边界线图层
countryname国家名称国家名称标注图层
airspace空域空域图层,包含空域线和标签
controlled管制空域管制空域图层
restricted限制空域限制空域图层
ammAMM图层移动机场图图层
airline航路航路图层,包含航线、标签和航路点
airport机场机场图层
vorVOR导航台VOR导航台图层
ndbNDB导航台NDB导航台图层

内置图层详细说明

以下表格列出了每个内置图层组包含的真正图层ID及其说明,可以用于时间监听:

内置图层ID实际图层ID图层说明
backgroundbackground地图背景底图图层
water / lakelake水域湖泊图层
landLayerlandLayer陆地图层
countrylinecountryline国家边界线
stateline省/州边界线
countrynamecountrylabel国家名称标注
countrypoint国家名称点标记
provincelabel省份名称标注
statelabel首都名称标注
airspaceairspaceLayer空域线
airspace_label_side_layer空域线侧边文字
airspaceLayer_line空域线间隔线
airspace_label_center_layer空域中心名称标注
controlledcontrolledLayer管控区区域填充
controlled_line_label管控区区域文字
restrictedrestrictedLayer限制区区域填充
restricted_line_label限制区区域文字
airlineairline航线
airline_label航线名称标注
airline_point航路点
airportairport机场图标和文字
vorvor_iconVOR导航台图标
ndbndb_iconNDB导航台图标
amm_amm_airport_area_region机场范围边界
_amm_apron_element_region停机坪要素填充
_amm_apron_element_region_text停机坪要素标注
_amm_runway_element_region跑道元素填充
_amm_runway_element_region_text跑道元素文本
_amm_runway_displaced_area_region跑道入口内移区域
_amm_stopway_region停止道
_amm_painted_centerline_polyline跑道中心线
_amm_runway_mark_region跑道标志填充
_amm_taxiway_element_region滑行道要素填充
_amm_taxiway_center_line_polyline滑行道中心线
_amm_taxiway_center_line_polyline_text滑行道中心线文字
_amm_taxiway_guidance_line_polyline滑行道引导线
_amm_taxiway_intersection_marking_polyline滑行道交叉标志
_amm_taxiway_holding_position_polyline滑行道等待位置
_amm_stand_guidance_line_polyline停机坪引导线
_amm_ainstrument_landing_system_region_line仪表着陆系统
_amm_painted_delayline_polyline跑道延迟线
_amm_prohibition_mark_region_line禁行标记
_amm_hotspot_region_line冲突区域线
_amm_hotspot_region_area冲突区域填充
_amm_hotspot_region_line_text冲突区文字
_amm_vertical_polygonal_structure_region垂直面结构填充
_amm_vertical_polygonal_structure_region_text垂直面结构标注
_amm_parking_stand_location_point停机位位置点
_amm_runway_threshold_point跑道入口点

获取内置图层列表

获取所有内置图层

javascript
// 获取所有内置图层信息
const layers = sdk.getBuiltInLayers();
console.log("内置图层:", layers);

// 或者使用函数
const layers = navMap.getBuiltInLayers();

查看图层信息

javascript
const layers = sdk.getBuiltInLayers();

layers.forEach(layer => {
  console.log(`图层ID: ${layer.id}`);
  console.log(`图层名称: ${layer.name}`);
  console.log(`图层描述: ${layer.description}`);
  console.log(`图层类别: ${layer.category}`);
  console.log(`默认可见: ${layer.defaultVisible}`);
});

添加内置图层

添加单个图层

javascript
// 添加机场图层
await sdk.addBuiltInLayer("airport");

// 添加空域图层
await sdk.addBuiltInLayer("airspace");

// 添加航路图层
await sdk.addBuiltInLayer("airline");

批量添加图层

javascript
// 添加多个图层
await sdk.addBuiltInLayer([
  "airport",
  "airspace",
  "airline",
  "vor",
  "ndb",
]);

指定图层顺序

javascript
// 添加图层并指定 z-index
await sdk.addBuiltInLayer("airport", "10");
await sdk.addBuiltInLayer("airline", "20");

移除内置图层

移除单个图层

javascript
// 移除机场图层
sdk.removeBuiltInLayer("airport");

批量移除图层

javascript
// 移除多个图层
["airport", "airspace", "airline"].forEach(layerId => {
  sdk.removeBuiltInLayer(layerId);
});

切换图层显示

显示/隐藏图层

javascript
// 切换图层显示状态
sdk.toggleBuiltInLayer("airport");

// 或者手动控制
if (isVisible) {
  await sdk.addBuiltInLayer("airport");
} else {
  sdk.removeBuiltInLayer("airport");
}

内置图层列表

基础图层

background(背景图)

javascript
await sdk.addBuiltInLayer("background");
  • 类型: background
  • 描述: 地图背景底图
  • 默认可见: 是

water / lake(水域湖泊)

javascript
await sdk.addBuiltInLayer("water");
// 或
await sdk.addBuiltInLayer("lake");
  • 类型: fill
  • 描述: 水域湖泊图层
  • 默认可见: 是

landLayer(陆地图层)

javascript
await sdk.addBuiltInLayer("landLayer");
  • 类型: fill
  • 描述: 陆地图层
  • 默认可见: 是

空域图层

airspace(空域)

javascript
await sdk.addBuiltInLayer("airspace");
  • 类型: line + symbol
  • 描述: 空域图层,包含空域线和标签
  • 默认可见: 否
  • 包含图层:
    • airspaceLayer(空域线)
    • airspace_label_side_layer(侧边标签)
    • airspaceLayer_line(空域线)
    • airspace_label_center_layer(中心标签)

controlled(管制空域)

javascript
await sdk.addBuiltInLayer("controlled");
  • 类型: fill + line + symbol
  • 描述: 管制空域图层
  • 默认可见: 否
  • 包含图层:
    • controlledLayer(管制区填充)
    • controlled_line_label(管制区线标签)

restricted(限制空域)

javascript
await sdk.addBuiltInLayer("restricted");
  • 类型: fill + line + symbol
  • 描述: 限制空域图层
  • 默认可见: 否
  • 包含图层:
    • restrictedLayer(限制区填充)
    • restricted_line_label(限制区线标签)

amm(AMM图层)

javascript
await sdk.addBuiltInLayer("amm");
  • 类型: fill + line + symbol
  • 描述: AMM(Aeronautical Information Publication)图层
  • 默认可见: 否
  • 动态图层: 根据期数动态生成

航路图层

airline(航路)

javascript
await sdk.addBuiltInLayer("airline");
  • 类型: line + symbol + circle
  • 描述: 航路图层,包含航路线、标签和航路点
  • 默认可见: 否
  • 包含图层:
    • airline(航路线)
    • airline_label(航路标签)
    • airline_point(航路点)

导航设施图层

airport(机场)

javascript
await sdk.addBuiltInLayer("airport");
  • 类型: symbol
  • 描述: 机场图层
  • 默认可见: 否

vor(VOR导航台)

javascript
await sdk.addBuiltInLayer("vor");
  • 类型: symbol
  • 描述: VOR(VHF Omnidirectional Range)导航台图层
  • 默认可见: 否
  • 包含图层: vor_icon

ndb(NDB导航台)

javascript
await sdk.addBuiltInLayer("ndb");
  • 类型: symbol
  • 描述: NDB(Non-Directional Beacon)导航台图层
  • 默认可见: 否
  • 包含图层: ndb_icon

图层管理示例

图层控制面板

javascript
let sdk;

async function initMap() {
  sdk = new navMap.MapSDK({
    container: "map",
    center: [116.39, 39.9],
    zoom: 10,
  });

  sdk.on("loadComplete", () => {
    setupLayerControl();
  });
}

function setupLayerControl() {
  const layers = sdk.getBuiltInLayers();
  const panel = document.getElementById("layer-panel");

  layers.forEach(layer => {
    // 创建复选框
    const label = document.createElement("label");
    const checkbox = document.createElement("input");
    checkbox.type = "checkbox";
    checkbox.checked = layer.defaultVisible;
    checkbox.value = layer.id;

    checkbox.addEventListener("change", async () => {
      if (checkbox.checked) {
        await sdk.addBuiltInLayer(layer.id);
      } else {
        sdk.removeBuiltInLayer(layer.id);
      }
    });

    label.appendChild(checkbox);
    label.appendChild(document.createTextNode(layer.name));
    panel.appendChild(label);
  });
}

initMap();

按类别分组显示

javascript
function setupLayerControlByCategory() {
  const layers = sdk.getBuiltInLayers();
  const categories = {};

  // 按类别分组
  layers.forEach(layer => {
    if (!categories[layer.category]) {
      categories[layer.category] = [];
    }
    categories[layer.category].push(layer);
  });

  // 创建分类面板
  Object.entries(categories).forEach(([category, categoryLayers]) => {
    const section = document.createElement("div");
    section.className = "layer-category";
    section.innerHTML = `<h3>${category}</h3>`;

    categoryLayers.forEach(layer => {
      const label = document.createElement("label");
      const checkbox = document.createElement("input");
      checkbox.type = "checkbox";
      checkbox.value = layer.id;

      checkbox.addEventListener("change", async () => {
        if (checkbox.checked) {
          await sdk.addBuiltInLayer(layer.id);
        } else {
          sdk.removeBuiltInLayer(layer.id);
        }
      });

      label.appendChild(checkbox);
      label.appendChild(document.createTextNode(layer.name));
      section.appendChild(label);
    });

    document.getElementById("layer-panel").appendChild(section);
  });
}

图层样式自定义

更新图层样式

javascript
// 更新内置图层样式
sdk.updateLayerStyle("airport", {
  paint: {
    "icon-color": "#ff0000",
  },
});

// 或者使用 setStyle
sdk.setStyle({
  "airport": {
    paint: {
      "icon-color": "#ff0000",
    },
  },
});

批量更新样式

javascript
// 批量更新多个图层样式
sdk.setStyle({
  "airport": {
    paint: {
      "icon-color": "#ff0000",
    },
  },
  "vor": {
    paint: {
      "icon-color": "#00ff00",
    },
  },
  "ndb": {
    paint: {
      "icon-color": "#0000ff",
    },
  },
});

图层可见性控制

显示/隐藏图层

javascript
// 显示图层
sdk.showLayers(["airport", "airline"]);

// 隐藏图层
sdk.hideLayers(["airport", "airline"]);

根据缩放级别控制

javascript
sdk.on("zoom", () => {
  const zoom = sdk.getZoom();

  if (zoom < 8) {
    // 低缩放级别:只显示基础图层
    sdk.hideLayers(["airport", "airline", "vor", "ndb"]);
  } else if (zoom < 12) {
    // 中等缩放级别:显示机场和航路
    sdk.showLayers(["airport", "airline"]);
    sdk.hideLayers(["vor", "ndb"]);
  } else {
    // 高缩放级别:显示所有图层
    sdk.showLayers(["airport", "airline", "vor", "ndb"]);
  }
});

期数管理

某些内置图层(如 AMM)依赖于期数(Period)配置:

javascript
// 设置期数
sdk.setPeriod("202501");

// 获取当前期数
const period = sdk.getPeriod();
console.log("当前期数:", period);

注意事项

  1. 异步操作: addBuiltInLayer 是异步方法,需要使用 await.then()
  2. 图层顺序: 使用 zindex 参数控制图层叠加顺序
  3. 期数依赖: AMM 等图层需要先设置期数
  4. 性能考虑: 大量图层可能影响性能,考虑使用 LOD 配置
  5. 样式覆盖: 使用 setStyleupdateLayerStyle 可以覆盖默认样式