Tile map service
Tile server for .NET8 with MBTiles, Filesystem, GeoTIFF, HTTP sources and XYZ, TMS, WMTS, WMS endpoints (protocols support) and various output formats
Simple and lightweight implementation of tile server basic features for .NET 8 platform. Provides access to tiles stored in several source types and serving them using various protocols. The project is written primarily in C#, distributed under the MIT License license, first published in 2021. Key topics include: geotiff, geotiffs, gis, mbtiles, mvt.
Tile Map Service for .NET 8
Simple and lightweight implementation of tile server basic features for .NET 8 platform. Provides access to tiles stored in several source types and serving them using various protocols.
Demo page

Features
- Supported tile sources:
| Source type | EPSG:3857 | EPSG:4326 | Notes |
|---|---|---|---|
| Local file system | ✓ | ✓ | Each tile in separate file in Z/X/Y.ext folder structure |
| MBTiles (SQLite) | ✓ | — | MBTiles 1.3 Specification |
| GeoTIFF local file | ✓ | ✓ | GeoTIFF basic support with EPSG:3857 or EPSG:4326 source image SRS only |
| XYZ tile service | ✓ | ✓ | XYZ with local cache for EPSG:3857 SRS |
| TMS tile service | ✓ | ✓ | TMS with local cache for EPSG:3857 SRS |
| WMTS tile service | ✓ | ✓ | WMTS with local cache for EPSG:3857 SRS |
| WMS service | ✓ | — | WMS, versions 1.1.1 and 1.3.0, cache for EPSG:3857 SRS |
| PostGIS database | ✓ | — | Mapbox Vector Tiles from geometry column with EPSG:3857 SRS only |
- Supported protocols (service endpoints) for serving tiles:
| Endpoint | EPSG:3857 | EPSG:4326 | Endpoint Url | Formats | Notes |
|---|---|---|---|---|---|
| XYZ (Tiled web map) | ✓ | ✓ | /xyz | png, jpeg, webp, mvt | Can be REST style url (/{z}/{x}/{y}.ext) or url with parameters (&x={x}&y={y}&z={z}) |
| TMS (Tile Map Service) | ✓ | ✓ | /tms | png, jpeg, webp, mvt | |
| WMTS (Web Map Tile Service) | ✓ | — | /wmts | png, jpeg, webp, mvt | Support both RESTful and KVP GetTile url syntax |
| WMS (Web Map Service) | ✓ | — | /wms | png, jpeg, tiff (geotiff) | WMS versions 1.1.1 and 1.3.0 |
- Coordinate system / tile grid support: Web Mercator / Spherical Mercator / EPSG:3857, basic support for geodetic
EPSG:4326. - Tile image formats: raster (
PNG,JPEG,WEBP) 256×256 pixels tiles, basic support ofTIFFoutput andPBF/MVT(vector tiles). - Local cache for tiles from external tile services sources (modified
mbtilesformat database file,EPSG:3857only), with blank tiles detection support. - Configuration in JSON file.
- Reading sources configuration using
/apiendpoint (local requests only).
Using
- Microsoft.Data.Sqlite for working with SQLite database.
- SkiaSharp for raster images processing.
- BitMiracle.LibTiff.NET for reading source GeoTIFF files and creating output TIFF images.
- Npgsql .NET data provider for PostgreSQL.
- OpenLayers with OpenLayers LayerSwitcher for displaying layers.
- NUnit for tests.
Configuration file
Tile sources are defined in appsettings.json configuration file.
Running framework-dependent deployment
Check if .NET 8 runtime is installed on target system:
dotnet --info
The Microsoft.AspNetCore.App 8.0.0 (or later versions) should present in list.
Run the application using command:
dotnet tms.dll
After start, it will listen on default TCP port 5000 (using in-process Kestrel web server)
and tile service with demo page will be available on http://localhost:5000/ address; to enable remote calls allow connections to this port in firewall settings.
Further improvements on Linux
Some improvements can be made for better using this application in real environment:
- Install
nginxand configure it as reverse proxy server for Kestrel server. - Configure application to run as a service, using
systemdservice manager.
TODOs
- .NET10 support.
- Use modern C# language features and code style.
- Support for more formats (image formats, vector tiles) and coordinate systems (tile grids).
- Flexible settings of tile sources.
- Configuration Web API / Web UI with authentication.
- WMS client in Web UI.
- Compare with reference implementations (servers and clients).
- Using metatiles for better tiles quality.
- Include test dataset(s) created from free data.
- Extended diagnostics, error handling and logging.
- Performance tests.
- Live demo.
Some MBTiles sample datasets
- World Countries MBTiles by ArcGIS / EsriAndroidTeam
- Satellite Lowres raster tiles Planet by MapTiler
- Custom vector tiles from Georaphy Class example MVT
All external tile sources (services) in the provided appsettings.json file are only for development / testing, not for production use.
References
Contributors
Showing top 1 contributor by commit count.
