【无标题】BruTile提供原始图像流形式的瓦片

BruTile介绍

GitCode - 全球开发者的开源社区,开源代码托管平台

GitCode - 全球开发者的开源社区,开源代码托管平台

BruTile是一个针对.NET Standard 2.0的库,用于访问OpenStreetMap和Bing等瓦片服务。这类服务存储了特定区域不同详细级别的预渲染瓦片。BruTile帮助确定在地图的特定视口下需要获取哪些瓦片。

BruTile提供原始图像流形式的瓦片,并不依赖于特定的客户端平台。它本身并不显示这些瓦片,你需要使用如SharpMap、ArcBruTile或Mapsui这样的映射库,或者编写自定义代码来展示瓦片。

BruTile的功能包括:

  1. 协助构建瓦片源对象,该对象包含关于瓦片服务的所有信息。
  2. 根据地图范围和地图分辨率(像素单位)计算所需瓦片。
  3. 帮助获取这些瓦片。

BruTile是.NET Standard库

BruTile V4 包括两个支持.NET Standard 2.0的NuGet包:

库名目标框架
BruTile.NET Standard 2.0
BruTile.MbTiles.NET Standard 2.0
  • 对.NET Framework 4.5的支持已被移除(示例和测试也已迁移到.NET Core)。
  • BruTile.Desktop和BruTile.Desktop.DbCache已被删除,其内容已移动到BruTile NuGet包中。

演示

要查看各种数据源的演示,请下载源代码并在样例文件夹中运行BruTile.Demo。

开始使用

1) 创建应用并添加BruTile NuGet包

在Visual Studio中创建一个.NET控制台应用程序。然后通过Visual Studio的NuGet包管理工具或从包管理器控制台安装BruTile包:

PM> install-package BruTile 

2) 创建瓦片源

// 这是一个创建OpenStreetMap瓦片源的例子:
var tileSource = new HttpTileSource(new GlobalSphericalMercator(0, 18),
    "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
    new[] {"a", "b", "c"}, "OSM");

3) 计算所需的瓦片

// 可以假设可视地图范围会发生变化,但让我们先用整个世界为例
var extent = new Extent(-20037508, -20037508, 20037508, 20037508);
var screenWidthInPixels = 400; // 映射在屏幕上的宽度(像素)
var resolution = extent.Width / screenWidthInPixels;
var tileInfos = tileSource.Schema.GetTileInfos(extent, resolution);

4) 从服务中获取瓦片

Console.WriteLine("显示瓷砖信息");
foreach (var tileInfo in tileInfos)
{
    var tile = await tileSource.GetTileAsync(tileInfo);

    Console.WriteLine(
        $"瓦片列:{tileInfo.Index.Col}, " +
        $"瓦片行:{tileInfo.Index.Row}, " +
        $"瓦片级别:{tileInfo.Index.Level} , " +
        $"瓦片大小:{tile.Length}");
}

输出:

瓦片列:0, 瓦片行:0, 瓦片级别:1 , 瓦片大小:11276
瓦片列:0, 瓦片行:1, 瓦片级别:1 , 瓦片大小:3260
瓦片列:1, 瓦片行:0, 瓦片级别:1 , 瓦片大小:10679
瓦片列:1, 瓦片行:1, 瓦片级别:1 , 瓦片大小:4009

5) 尝试一些已知的瓦片源

// 你可以使用一行语句轻松为多个预定义的瓦片服务器创建ITileSource:
var tileSource1 = KnownTileSources.Create(); // 默认为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);

预定义的瓦片源定义在一个文件中。查看这个文件链接,了解如何创建任何瓦片源。

6) 使用MBTiles(用于存储在设备上的瓦片数据的SQLite格式)

var mbtilesTilesource = new MbTilesTileSource(new SQLiteConnectionString("Resources/world.mbtiles", false));
var mbTilesTile = await mbtilesTilesource.GetTileAsync(new TileInfo { Index = new TileIndex(0, 0, 0) });
Console.WriteLine($"这是一个从MBTiles加载的图像文件字节数组,大小为:{mbTilesTile.Length}");

输出:

这是一个从MBTiles加载的图像文件字节数组,大小为:27412

上述代码可在本仓库样例文件夹中的BruTile.GettingStarted找到。

支持的瓦片服务协议:

发展路线图

  • 当前我们的主要关注点是稳定性。

使用BruTile的项目

许可证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值