You are reading the Icon Map Pro documentation for version 1.1.0.11, which has not been released yet. Go to the latest version (1.1.0.10).

Self-hosted basemaps

With the self-hosted background maps pack, Icon Map Pro loads its basemaps and the icon library from your own web server instead of from Icon Map. Set up the air-gapped environment first, as described in Power BI Report Server (on-premises).

Host the Icon Map basemaps yourself

Without internet access the visual cannot load the built-in Icon Map basemaps, the icon library or the Icon Map Catalog, because they are hosted on Icon Map servers. The self-hosted background maps pack lets you serve the basemaps and the icon library from your own web server.

Contact sales@icon-map.com to purchase the pack. You receive a link to download a ZIP (or 7zip) file with the resources to deploy.

Web server requirements

The web server must support:

  • HTTP range requests
  • A CORS origin of * or null. This is needed because Power BI runs custom visuals in a sandbox.

Around 400 GB of disk space is required for all resources.

Suitable web servers include:

Point Icon Map Pro at your server

  1. In the Format pane, open Icon Map Pro > Customization.
  2. In Custom Styles URL, enter the address where the resources are hosted, ending with a /. For example:
http://powerbi.internal:9000/iconmaplocal/
  1. Choose an Icon Map basemap as usual.

The visual then loads the style list, the styles, map tiles, fonts, icons, and the hillshade and terrain tiles from that address.

End the address with a slash

With a trailing /, the visual looks for the style list at styles/styles.json under your address and loads fonts, icons and elevation tiles from the same place. Without it, the address is treated as the style list file itself and those other resources are not found.

You can set Custom Styles URL as a default in your Power BI report theme file, so that every Icon Map Pro visual in a report picks it up.

Settings

Both settings are in Format pane > Icon Map Pro > Customization.

Setting What it does Default
Airgapped Environment Disables external calls to Icon Map services Off
Custom Styles URL Custom URL for background map styles, for air-gapped or customized deployments Empty

IIS configuration

Extract the IconMapLocal folder into your web server, for example c:\inetpub\wwwroot.

Static content

Enable the Static Content IIS feature. It provides support for HTTP range headers. Use Server Manager > Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Common HTTP Features > Static Content, or this PowerShell command:

Install-WindowsFeature -Name Web-Static-Content

web.config

Static file types and CORS need configuring in web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <staticContent>
    <remove fileExtension=".pmtiles" />
      <mimeMap fileExtension=".pmtiles" mimeType="application/octet-stream" />
      <remove fileExtension=".pbf" />
      <mimeMap fileExtension=".pbf" mimeType="application/x-protobuf" />
      <remove fileExtension=".svg" />
      <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      <remove fileExtension=".json" />
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

MinIO configuration

This guide assumes the extracted IconMapLocal files are in C:\temp\iconmaplocal, MinIO stores its bucket data in C:\minio\iconmaplocal, and the bucket is served at http://localhost:9000/iconmaplocal/.

Download MinIO

Download the MinIO server (minio.exe) and the MinIO client (mc.exe) and place both in C:\minio\.

Create the data directory and start MinIO

mkdir C:\minio\iconmaplocal

$env:MINIO_ROOT_USER="admin"
$env:MINIO_ROOT_PASSWORD="ChangeThisPassword123!"

C:\minio\minio.exe server `
  C:\minio\iconmaplocal `
  --address ":9000" `
  --console-address ":9001"

The S3 API is then at http://localhost:9000 and the console at http://localhost:9001. Choose your own user name and password.

Configure the MinIO client

C:\minio\mc.exe alias set `
  iconmap `
  http://localhost:9000 `
  admin `
  ChangeThisPassword123!

C:\minio\mc.exe alias list

Create the bucket and make it readable

C:\minio\mc.exe mb iconmap/iconmaplocal
C:\minio\mc.exe ls iconmap

C:\minio\mc.exe anonymous set download iconmap/iconmaplocal
C:\minio\mc.exe anonymous get iconmap/iconmaplocal

Configure CORS

Create C:\minio\cors.xml:

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>

    <ExposeHeader>Accept-Ranges</ExposeHeader>
    <ExposeHeader>Content-Range</ExposeHeader>
    <ExposeHeader>Content-Length</ExposeHeader>
    <ExposeHeader>Content-Type</ExposeHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>Last-Modified</ExposeHeader>

    <MaxAgeSeconds>3600</MaxAgeSeconds>
  </CORSRule>
</CORSConfiguration>

Apply it and check the result:

C:\minio\mc.exe cors set `
  iconmap/iconmaplocal `
  C:\minio\cors.xml

C:\minio\mc.exe cors info iconmap/iconmaplocal

Upload the content

C:\minio\mc.exe cp --recursive --overwrite `
  C:\temp\iconmaplocal\ `
  iconmap/iconmaplocal/

C:\minio\mc.exe ls --recursive iconmap/iconmaplocal

Check the result

Confirm that the style list is in place:

C:\minio\mc.exe stat iconmap/iconmaplocal/styles/styles.json

It should be available at http://localhost:9000/iconmaplocal/styles/styles.json.

Then test HTTP range requests:

curl.exe -i `
  -H "Range: bytes=0-99" `
  http://localhost:9000/iconmaplocal/styles/styles.json

The response should start like this:

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 0-99/...

Tips and limits

  • If the map shows no Icon Map styles, check that Custom Styles URL ends with / and that styles/styles.json opens from a browser on the same machine.
  • A custom visual shown as blank space on Report Server usually means Power BI is still trying to reach AppSource. Recheck the environment variable and the EnableCDNVisuals property, and that the visual was imported from a file.
  • The Modern engine needs WebGL 2 on the machine that displays the report. See Supported environments and limits.