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
*ornull. 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:
- Microsoft Azure Blob Storage (cloud)
- Amazon S3 buckets (cloud)
- Internet Information Services (IIS) (Windows, on-premises). See IIS configuration
- MinIO (Windows or Linux, on-premises). See MinIO configuration
- LocalStack (Docker, on-premises)
Point Icon Map Pro at your server
- In the Format pane, open Icon Map Pro > Customization.
- In Custom Styles URL, enter the address where the resources are hosted, ending with a
/. For example:
http://powerbi.internal:9000/iconmaplocal/
- 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.
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 thatstyles/styles.jsonopens 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
EnableCDNVisualsproperty, 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.