Simple and lightweight implementation of tile server basic features for .NET 5 / .NET 8 platforms. Provides access to tiles stored in several source types and serving them using various protocols.
- 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:3857orEPSG:4326source image SRS only | 
| XYZ tile service | ✓ | ✓ | XYZ with local cache for EPSG:3857SRS | 
| TMS tile service | ✓ | ✓ | TMS with local cache for EPSG:3857SRS | 
| WMTS tile service | ✓ | ✓ | WMTS with local cache for EPSG:3857SRS | 
| WMS service | ✓ | — | WMS, versions 1.1.1 and 1.3.0, cache for EPSG:3857SRS | 
| PostGIS database | ✓ | — | Mapbox Vector Tiles from geometrycolumn withEPSG:3857SRS 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 RESTfulandKVPGetTileurl syntax | 
| WMS (Web Map Service) | ✓ | — | /wms | png, jpeg, tiff (geotiff) | WMS versions 1.1.1and1.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).
There are two separate solutions and corresponding projects, sharing the same source code files:
| Property | .NET 5 | .NET 8 | 
|---|---|---|
| SDK | .NET 5.0 | .NET 8.0 | 
| MS Visual Studio | 2019 | 2022 | 
| Status | Legacy | Active | 
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.
Tile sources are defined in appsettings.json configuration file.
Check if .NET 5 or .NET 8 runtime is installed on target system:
dotnet --info
The Microsoft.AspNetCore.App 5.0.3 / 8.0.0 (or later versions) should present in list.
There is known issue for .NET 5 and libssl 3.x compatibility on Linux systems, use .NET 8 in this case.
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.
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.
- 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.
- 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.
