SDK Embedding

Required roles: AIS Map SDK Access — Roles
Base endpoint: https://ais-map.ibosoft.net.tr/ais-map-loader.js
Reference documents: none
Attribution: show ibonav.aero wherever this data is displayed
Data sources: see the ibonav.aero User Guide; each layer's source is shown in the map's attribution
Last updated: 18 OCT 2026

Depending on your use, the original data sources may also need to be credited.

This page embeds the complete ibonav.aero Interactive Map. If you only need the map tiles or the aeronautical data (to show them in your own map or application), see the Tile Server (Layer Lists) and Geo Server sections instead.

SDK embedding builds the ibonav.aero Interactive Map directly in your own page, in a <div> you choose. Unlike frame embedding, the map runs inside your page: you can change its defaults with overrides, reach the OpenLayers map object and add your own layers and interactions on top of it.

One script, ais-map-loader.js, loads all SDK modules and the stylesheet. The map needs OpenLayers on the page and an API access token from your server.


1. Get an access token on your server

  1. On your account at https://auth.ibosoft.net.tr, the responsible person needs the AIS Map SDK Access (ais-data:map-sdk) role. In the ibonav.aero - API & Data Access card they create a personal API token (ibp_…). Keep it on your server only.

  2. Your server exchanges it for a 1-hour access token:

    POST https://auth.ibosoft.net.tr/api/gateway/token
    Authorization: Bearer ibp_...
    
    { "success": true, "token": "...", "expires_in": 3600, "roles": [] }
    
  3. Give your page an endpoint of your own (e.g. /my-server/ais-map-token) that returns { token, expires_in }.

Details of tokens and roles: Authorization.

2. Add the map to your page

<!-- OpenLayers (window.ol) — must be loaded BEFORE the loader -->
<link rel="stylesheet" href="https://ais-map.ibosoft.net.tr/openlayers/ol.css">
<script src="https://ais-map.ibosoft.net.tr/openlayers/ol.js"></script>

<div id="map" style="width: 100%; height: 600px;"></div>

<script>
  // 1. Overrides — defined BEFORE the loader
  window.AisMapConfigOverrides = {
    // Required: returns Promise<{ token, expires_in }> from your own server
    getAccessToken: function () {
      return fetch('/my-server/ais-map-token', { method: 'POST' })
        .then(function (r) { return r.json(); });
    },
    defaultDim: 30,
    addDefaultLayers: ['atsairspace_ctr', 'navaid_navaids']
  };

  // 2. Called once, after every SDK module has loaded
  window.AisMapOnReady = function () {
    AisMap.init({ target: 'map' });
  };
</script>

<!-- 3. The loader: all SDK modules + CSS -->
<script src="https://ais-map.ibosoft.net.tr/ais-map-loader.js"></script>
  • OpenLayers: the SDK uses the full OpenLayers build as the global window.ol (the map itself uses OpenLayers 10.8.0, served at https://ais-map.ibosoft.net.tr/openlayers/). You may load your own copy instead if it provides the same global.
  • Token: the SDK adds the token to every data request and calls getAccessToken() again about 5 minutes before it expires, or when a request is rejected. Without getAccessToken no data is loaded and the console shows [AisMap] SDK mode needs AisMapConfigOverrides.getAccessToken().
  • Roles: in SDK embedding roles are always off. Only the role locks that have an override (Surveillance, ATC broadcasts) can be opened; Google Earth / HGM base maps and the NATO charts stay locked.
  • Query strings are read from your page's address (window.location.search). Avoid using the same parameter names for your own purposes.

3. Wait for the map

The loader loads the modules asynchronously and calls AisMapOnReady once, after all of them have run. Code placed right after the loader tag cannot assume the map is ready. Put every use of AisMap inside AisMapOnReady, or behind a promise it resolves:

<script>
  var aisMapReady = new Promise(function (resolve) {
    window.AisMapOnReady = function () {
      AisMap.init({ target: 'map' });
      resolve(AisMap.getMap());
    };
  });
</script>
<script src="https://ais-map.ibosoft.net.tr/ais-map-loader.js"></script>

<script>
  aisMapReady.then(function (olMap) {
    // olMap is the ol.Map instance: add your own layers, listen to events …
    olMap.on('moveend', function () {
      console.log(olMap.getView().getCenter());
    });
  });
</script>

API

Call Description
AisMap.init(options) Builds the map. Call it once, inside AisMapOnReady.
AisMap.getMap() Returns the OpenLayers ol.Map instance (after init).

init options:

Option Type Description
target string Required. id of the element the map is drawn in.
center [lon, lat] Opening centre in decimal degrees. Wins over everything else, also over the remembered position and mapSetCenter.
resolution number Opening resolution (m/px, EPSG:3857). Wins over zoom.
zoom number Opening zoom level.

Overrides

window.AisMapConfigOverrides changes the SDK defaults without touching any SDK file. Define it before the loader. Unknown fields and wrong value types are ignored.

Access

Field Type Description
getAccessToken function → Promise<{token, expires_in}> Required. Returns an access token from your server (step 1).

Map view

Field Type Description
defaultCenter [lon, lat] Opening centre (decimal degrees).
defaultResolution number Opening resolution (m/px, EPSG:3857).
defaultZoom number Opening zoom level (used when no resolution is set).
rememberLastPosition boolean Default true: the viewer's last centre and zoom are saved and restored at the next opening. false: every opening starts from the defaults.
maxPixelRatio number Upper limit of the canvas pixel ratio. Default: 2 on desktop, 1 on touch devices (lighter rendering).

Layers

Field Type Description
overrideDefaultLayers boolean true: all layers that are on by default start off.
addDefaultLayers string[] Layers that start on. Same values as mapLayersAdd: layer code, or for layers without a code the title or Group/Layer path.
defaultBaseMap string Base map that starts selected (code as in mapLayersSelectBaseMap).

overrideDefaultLayers, addDefaultLayers and defaultBaseMap can be combined: first everything is turned off, then the listed layers are turned on.

Display

Field Type Description
defaultDim number Opening value of the dimmer, 0–100 (%).
defaultGrid boolean true: the latitude/longitude grid starts on.
disableProjectionSelection boolean true: projection choices in Settings are disabled ("Disabled by application."); the map stays in Web Mercator (EPSG:3857).
disableContext boolean true: the map's right-click menu is off; the browser's menu is shown.

Surveillance (ADS-B)

Field Type Description
disableSurveillance boolean true: the Surveillance module is removed completely (no button, no layer, no engine scripts loaded).
surveillanceRequiredRoles string[] Roles that unlock Surveillance (any one is enough). [] = no lock. Default ['atc-user', 'atc-permanent'], which is never met in SDK embedding, so set [] to offer it (see ATC data).
surveillanceDataBase string Base address of the surveillance data feed, without trailing /. Default: the ibonav.aero feed.

ATC broadcasts

Field Type Description
disableAtcChannels boolean true: the ATC broadcasts module is removed (no ATC button, no BROADCASTS tab data).
atcChannelsRequiredRoles string[] Roles that unlock ATC broadcasts (any one is enough). [] = no lock. Default ['atc-user', 'atc-permanent'].
atcChannelsUrl string Address of the channel list (channels.json). Default: https://ibonav.aero/atc-files/configurations/channels.json.
atcChannelsMax number Maximum number of channels played at the same time. Default 10.

Feature listing

Field Type Description
disableBackendCapabilities boolean true: the layer capabilities are read directly from the Geo Server instead of the PIB API cache (Geo Server Capabilities). Slow when the geo server cache is cold; leave it false unless told otherwise.

Server addresses

Normally not needed; all default to the ibonav.aero servers.

Field Default
wmsUrl https://ais-geoserver.ibosoft.net.tr:2087/cgi-bin/qgis_mapserv.fcgi.exe
mapproxyUrl https://ais-mapproxy.ibosoft.net.tr:2087
pibApiUrl https://ais-pib-api.ibosoft.net.tr:2087
websiteBase https://ibonav.aero
baseUrl https://ais-map.ibosoft.net.tr (SDK assets and media)

Order of precedence

AisMap.init(options)            highest (centre / zoom)
query strings                   one-time, not saved
AisMapConfigOverrides           your page
viewer's saved preferences      layers, dimmer, projection, last position
SDK defaults                    lowest

For layers: overrideDefaultLayers and defaultBaseMap apply only to layers the viewer has not changed; a saved choice wins. addDefaultLayers (and mapLayersAdd) always turn their layers on, also over a saved choice. When the viewer resets the layer settings, the saved choices are cleared and the overrides apply in full again.


ATC data

Surveillance (ADS-B) and live ATC broadcasts come through the same access token. The person who created the personal token needs the matching developer role as well:

Data Role
Surveillance ATC Surveillance Access (ais-data:atc-surveillance)
ATC broadcasts ATC Broadcasts Access (ais-data:atc-broadcasts)

Then turn off the map's own role locks, since access is checked by the server from the token:

window.AisMapConfigOverrides = {
  getAccessToken: function () { /* … */ },
  surveillanceRequiredRoles: [],
  atcChannelsRequiredRoles: []
};

D-ATIS and DCL in the aerodrome ATC tab need no extra role.


Examples

Start empty, satellite base map, a few layers:

window.AisMapConfigOverrides = {
  getAccessToken: getToken,
  overrideDefaultLayers: true,
  defaultBaseMap: 'web_esri_imagery',
  addDefaultLayers: ['navaid_navaids', 'atsairspace_ctr', 'atsairspace_tma']
};

Fixed view centred on Istanbul, no projection change, no remembered position:

window.AisMapConfigOverrides = {
  getAccessToken: getToken,
  defaultCenter: [28.97, 41.01],
  defaultResolution: 300,
  rememberLastPosition: false,
  disableProjectionSelection: true
};

Coverage of one group only (the same 10000 ft title exists in several groups, so the path is used):

window.AisMapConfigOverrides = {
  getAccessToken: getToken,
  addDefaultLayers: [
    'Ibosoft ATC 1090 MHz Coverage/10000 ft',
    'Ibosoft ATC 1090 MHz Coverage/30000 ft'
  ]
};