Skip to content

Built-in Layers

The SDK provides rich built-in layers, including basic layers, airspace layers, route layers, etc., which can be used directly without manual configuration.

Built-in Layer Overview

The SDK provides the following built-in layers that can be added directly using the addBuiltInLayer() method:

Layer IDLayer NameDescription
backgroundBackgroundMap background base layer
water / lakeWater BodiesWater bodies layer
landLayerLand LayerLand layer
countrylineCountry BoundaryCountry boundary line layer
countrynameCountry NameCountry name label layer
airspaceAirspaceAirspace layer, includes airspace lines and labels
controlledControlled AirspaceControlled airspace layer
restrictedRestricted AirspaceRestricted airspace layer
ammAMM LayerAMM
airlineAir RouteAir route layer, includes route lines, labels, and waypoints
airportAirportAirport layer
vorVOR Navigation StationVOR (VHF Omnidirectional Range) navigation station layer
ndbNDB Navigation StationNDB (Non-Directional Beacon) navigation station layer

Built-in Layer Details

The following table lists the actual layer IDs and descriptions for each built-in layer group:

Built-in Layer IDActual Layer IDLayer Description
backgroundbackgroundMap background base layer
water / lakelakeWater bodies layer
landLayerlandLayerLand layer
countrylinecountrylineCountry boundary line
statelineState/province boundary line
countrynamecountrylabelCountry name label
countrypointCountry name point marker
provincelabelProvince name label
statelabelCapital name label
airspaceairspaceLayerAirspace line
airspace_label_side_layerAirspace line side label
airspaceLayer_lineAirspace line interval line
airspace_label_center_layerAirspace center name label
controlledcontrolledLayerControlled airspace area fill
controlled_line_labelControlled airspace area label
restrictedrestrictedLayerRestricted airspace area fill
restricted_line_labelRestricted airspace area label
airlineairlineAir route line
airline_labelAir route name label
airline_pointAir route waypoint
airportairportAirport symbol and label
vorvor_iconVOR navigation station icon
ndbndb_iconNDB navigation station icon
amm_amm_airport_area_regionAirport area boundary
_amm_apron_element_regionApron element fill
_amm_apron_element_region_textApron element label
_amm_runway_element_regionRunway element fill
_amm_runway_element_region_textRunway element text
_amm_runway_displaced_area_regionRunway displaced threshold area
_amm_stopway_regionStopway area
_amm_painted_centerline_polylineRunway centerline
_amm_runway_mark_regionRunway marking fill
_amm_taxiway_element_regionTaxiway element fill
_amm_taxiway_center_line_polylineTaxiway centerline
_amm_taxiway_center_line_polyline_textTaxiway centerline label
_amm_taxiway_guidance_line_polylineTaxiway guidance line
_amm_taxiway_intersection_marking_polylineTaxiway intersection marking
_amm_taxiway_holding_position_polylineTaxiway holding position
_amm_stand_guidance_line_polylineStand guidance line
_amm_ainstrument_landing_system_region_lineInstrument landing system line
_amm_painted_delayline_polylineRunway delay line
_amm_prohibition_mark_region_lineProhibition mark line
_amm_hotspot_region_lineHotspot conflict area line
_amm_hotspot_region_areaHotspot conflict area fill
_amm_hotspot_region_line_textHotspot conflict area label
_amm_vertical_polygonal_structure_regionVertical structure fill
_amm_vertical_polygonal_structure_region_textVertical structure label
_amm_parking_stand_location_pointParking stand location point
_amm_runway_threshold_pointRunway threshold point

Get Built-in Layer List

Get All Built-in Layers

javascript
// Get all built-in layer information
const layers = sdk.getBuiltInLayers();
console.log("Built-in layers:", layers);

// Or use function
const layers = navMap.getBuiltInLayers();

View Layer Information

javascript
const layers = sdk.getBuiltInLayers();

layers.forEach(layer => {
  console.log(`Layer ID: ${layer.id}`);
  console.log(`Layer name: ${layer.name}`);
  console.log(`Layer description: ${layer.description}`);
  console.log(`Layer category: ${layer.category}`);
  console.log(`Default visible: ${layer.defaultVisible}`);
});

Adding Built-in Layers

Add Single Layer

javascript
// Add airport layer
await sdk.addBuiltInLayer("airport");

// Add airspace layer
await sdk.addBuiltInLayer("airspace");

// Add route layer
await sdk.addBuiltInLayer("airline");

Batch Add Layers

javascript
// Add multiple layers
await sdk.addBuiltInLayer([
  "airport",
  "airspace",
  "airline",
  "vor",
  "ndb",
]);

Specify Layer Order

javascript
// Add layer and specify z-index
await sdk.addBuiltInLayer("airport", "10");
await sdk.addBuiltInLayer("airline", "20");

Removing Built-in Layers

Remove Single Layer

javascript
// Remove airport layer
sdk.removeBuiltInLayer("airport");

Batch Remove Layers

javascript
// Remove multiple layers
["airport", "airspace", "airline"].forEach(layerId => {
  sdk.removeBuiltInLayer(layerId);
});

Toggle Layer Display

Show/Hide Layers

javascript
// Toggle layer display state
sdk.toggleBuiltInLayer("airport");

// Or manually control
if (isVisible) {
  await sdk.addBuiltInLayer("airport");
} else {
  sdk.removeBuiltInLayer("airport");
}

Built-in Layer List

Basic Layers

background (Background)

javascript
await sdk.addBuiltInLayer("background");
  • Type: background
  • Description: Map background base layer
  • Default Visible: Yes

water / lake (Water Bodies)

javascript
await sdk.addBuiltInLayer("water");
// Or
await sdk.addBuiltInLayer("lake");
  • Type: fill
  • Description: Water bodies layer
  • Default Visible: Yes

landLayer (Land Layer)

javascript
await sdk.addBuiltInLayer("landLayer");
  • Type: fill
  • Description: Land layer
  • Default Visible: Yes

Airspace Layers

airspace (Airspace)

javascript
await sdk.addBuiltInLayer("airspace");
  • Type: line + symbol
  • Description: Airspace layer, includes airspace lines and labels
  • Default Visible: No
  • Contains Layers:
    • airspaceLayer (Airspace line)
    • airspace_label_side_layer (Side label)
    • airspaceLayer_line (Airspace line)
    • airspace_label_center_layer (Center label)

controlled (Controlled Airspace)

javascript
await sdk.addBuiltInLayer("controlled");
  • Type: fill + line + symbol
  • Description: Controlled airspace layer
  • Default Visible: No
  • Contains Layers:
    • controlledLayer (Controlled area fill)
    • controlled_line_label (Controlled area line label)

restricted (Restricted Airspace)

javascript
await sdk.addBuiltInLayer("restricted");
  • Type: fill + line + symbol
  • Description: Restricted airspace layer
  • Default Visible: No
  • Contains Layers:
    • restrictedLayer (Restricted area fill)
    • restricted_line_label (Restricted area line label)

amm (AMM Layer)

javascript
await sdk.addBuiltInLayer("amm");
  • Type: fill + line + symbol
  • Description: AMM (Aeronautical Information Publication) layer
  • Default Visible: No
  • Dynamic Layer: Dynamically generated based on period

Route Layers

airline (Air Route)

javascript
await sdk.addBuiltInLayer("airline");
  • Type: line + symbol + circle
  • Description: Air route layer, includes route lines, labels, and waypoints
  • Default Visible: No
  • Contains Layers:
    • airline (Route line)
    • airline_label (Route label)
    • airline_point (Route waypoint)

airport (Airport)

javascript
await sdk.addBuiltInLayer("airport");
  • Type: symbol
  • Description: Airport layer
  • Default Visible: No

vor (VOR Navigation Station)

javascript
await sdk.addBuiltInLayer("vor");
  • Type: symbol
  • Description: VOR (VHF Omnidirectional Range) navigation station layer
  • Default Visible: No
  • Contains Layer: vor_icon

ndb (NDB Navigation Station)

javascript
await sdk.addBuiltInLayer("ndb");
  • Type: symbol
  • Description: NDB (Non-Directional Beacon) navigation station layer
  • Default Visible: No
  • Contains Layer: ndb_icon

Layer Management Examples

Layer Control Panel

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 => {
    // Create checkbox
    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();

Group by Category

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

  // Group by category
  layers.forEach(layer => {
    if (!categories[layer.category]) {
      categories[layer.category] = [];
    }
    categories[layer.category].push(layer);
  });

  // Create category panels
  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);
  });
}

Layer Style Customization

Update Layer Style

javascript
// Update built-in layer style
sdk.updateLayerStyle("airport", {
  paint: {
    "icon-color": "#ff0000",
  },
});

// Or use setStyle
sdk.setStyle({
  "airport": {
    paint: {
      "icon-color": "#ff0000",
    },
  },
});

Batch Update Styles

javascript
// Batch update multiple layer styles
sdk.setStyle({
  "airport": {
    paint: {
      "icon-color": "#ff0000",
    },
  },
  "vor": {
    paint: {
      "icon-color": "#00ff00",
    },
  },
  "ndb": {
    paint: {
      "icon-color": "#0000ff",
    },
  },
});

Layer Visibility Control

Show/Hide Layers

javascript
// Show layers
sdk.showLayers(["airport", "airline"]);

// Hide layers
sdk.hideLayers(["airport", "airline"]);

Control Based on Zoom Level

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

  if (zoom < 8) {
    // Low zoom level: only show basic layers
    sdk.hideLayers(["airport", "airline", "vor", "ndb"]);
  } else if (zoom < 12) {
    // Medium zoom level: show airports and routes
    sdk.showLayers(["airport", "airline"]);
    sdk.hideLayers(["vor", "ndb"]);
  } else {
    // High zoom level: show all layers
    sdk.showLayers(["airport", "airline", "vor", "ndb"]);
  }
});

Period Management

Some built-in layers (such as AMM) depend on Period configuration:

javascript
// Set period
sdk.setPeriod("202501");

// Get current period
const period = sdk.getPeriod();
console.log("Current period:", period);

Notes

  1. Async Operations: addBuiltInLayer is an async method, need to use await or .then()
  2. Layer Order: Use zindex parameter to control layer stacking order
  3. Period Dependency: Layers like AMM need period set first
  4. Performance Considerations: Large numbers of layers may affect performance, consider using LOD configuration
  5. Style Override: Use setStyle or updateLayerStyle to override default styles