Status | |
---|---|
Build | |
NuGet |
- 2020 june 7: published a couple of new releases. They are based on just four PRs but because of semver they came out as three separate releases.
- 2.1.3 with a small fix to allow case insensitive style in wmts.
- 2.2.0 in which HttpTileSource.PersistentCache now has a setter.
- 3.0.0 which has two breaking changes.
- In MbTiles there is a change in the default behavior that some users might notice. Zoom levels are not calculated from the 'tiles' table by default.
- The TileIndex.Level is now int instead of string. Most users will not notice this unless you write logic around tiling itself.
BruTile is a .NET Standard 1.1 library to access tile services like OpenStreetMap and Bing. Such tile services store pre-rendered tiles for a certain area and for various levels of detail. BruTile helps to determine which tiles to fetch for a certain viewport of a map. BruTile returns tiles as raw image streams and has no dependency on a specific client platform. BruTile does not display those tiles. You need to use a mapping library like SharpMap, ArcBruTile or Mapsui or write your own code to display tiles.
What BruTile does is:
- Helps to construct a tile source, an object that has all information about a tile service.
- Helps to calculate which tiles you need, given a certain map extent and a map resolution (units per pixel).
- Helps you fetch those tiles.
BruTile 2.0 supports .NET Standard. The Profiles by NuGet package:
Library | Targeted Framework |
---|---|
BruTile | .NET Standard 1.1 |
BruTile.MbTiles | .NET Standard 1.1 |
BruTile.Desktop | .NET Standard 1.6 |
BruTile.Desktop.DbCache | .NET Standard 2.0 |
All the above libraries additionally target .Net Framework 4.5
For a demo showing various data sources download the source code and run BruTile.Demo in the Samples folder
Create a .NET Console app in Visual Studio. The the BruTile NuGet package. Use the package manager tools in Visual Studio or add it from the package manager console:
PM> install-package BruTile
// This is an example that creates the OpenStreetMap tile source:
var tileSource = new HttpTileSource(new GlobalSphericalMercator(0, 18),
"http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
new[] {"a", "b", "c"}, "OSM");
// the extent of the visible map changes but lets start with the whole world
var extent = new Extent(-20037508, -20037508, 20037508, 20037508);
var screenWidthInPixels = 400; // The width of the map on screen in pixels
var resolution = extent.Width / screenWidthInPixels;
var tileInfos = tileSource.Schema.GetTileInfos(extent, resolution);
Console.WriteLine("Show tile info");
foreach (var tileInfo in tileInfos)
{
var tile = tileSource.GetTile(tileInfo);
Console.WriteLine(
$"tile col: {tileInfo.Index.Col}, " +
$"tile row: {tileInfo.Index.Row}, " +
$"tile level: {tileInfo.Index.Level} , " +
$"tile size {tile.Length}");
}
Output:
tile col: 0, tile row: 0, tile level: 1 , tile size 11276
tile col: 0, tile row: 1, tile level: 1 , tile size 3260
tile col: 1, tile row: 0, tile level: 1 , tile size 10679
tile col: 1, tile row: 1, tile level: 1 , tile size 4009
// You can easily create an ITileSource for a number of predefined tile servers
// with single line statements like:
var tileSource1 = KnownTileSources.Create(); // The default is OpenStreetMap
var tileSource2 = KnownTileSources.Create(KnownTileSource.BingAerial);
var tileSource3 = KnownTileSources.Create(KnownTileSource.BingHybrid);
var tileSource4 = KnownTileSources.Create(KnownTileSource.StamenTonerLite);
var tileSource5 = KnownTileSources.Create(KnownTileSource.EsriWorldShadedRelief);
The predefined tile sources are defined in a single file. Take a look at that file here to learn how you could create any tile source.
var mbtilesTilesource = new MbTilesTileSource(new SQLiteConnectionString("Resources/world.mbtiles", false));
var mbTilesTile = mbtilesTilesource.GetTile(new TileInfo { Index = new TileIndex(0, 0, 0) });
Console.WriteLine($"This is a byte array of an image file loaded from MBTiles with size: {mbTilesTile.Length}");
Output:
This is a byte array of an image file loaded from MBTiles with size: 27412
The above code can also be found in the BruTile sample called BruTile.GettingStarted in the Samples folder of this repository.
- WMTS
- TMS
- OSM (Like TMS with inverted y-axis)
- WMS (tiled requests to a regular WMS)
- ArcGIS Tile Server
- WMS-C
- Stability is currently our primary focus.
- ArcBruTile a plugin for ArcGIS
- SharpMap a GIS library
- Mapsui a MapComponent for Xamarin.Android. Xamarin.iOS, UWP and WPF
- DotSpatial a GIS library that is used in HydroDesktop