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: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 ofTIFF
output andPBF
/MVT
(vector tiles). - Local cache for tiles from external tile services sources (modified
mbtiles
format database file,EPSG:3857
only), with blank tiles detection support. - Configuration in JSON file.
- Reading sources configuration using
/api
endpoint (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 (17.8.3) |
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
nginx
and configure it as reverse proxy server for Kestrel server. - Configure application to run as a service, using
systemd
service 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.