二维、三维地图的底图一般都是用图片切片(瓦片),将大的影像数据,或是矢量配色好的图层集合,通过工具,切成地图切片,以文件的形式存放,或者是存放到mbtiles数据库中;数据发布工具Arcgis Server或Geoserver也可将影像数据,实时的按照客户端地图范围,切成地图切片,返回到客户端进行显示。

切片数据可以直接按照目录发布,也可发布成tms、wmts服务,开源的二维地图引擎leaflet、openlayers等,或商用的高德、百度地图引擎,都能直接利用api进行加载显示。

开源切片工具

分享一款开源的地图切片类库,使用python语言进行调用,使用方法比较简单,地图的切片效率也比较高。

开源类库的网址是:https://github.com/tehamalab/gdal2tiles

开发的时候,需要先安装python的gdal类库,可通过conda或者pip进行安装,接着需要安装gdal2tiles的类库,通过pip install gdal2tiles进行安装。

调用的方式比较简单,其中需要配置一些参数,具体可参见网站上的说明。

切片配置说明:

python实际调用代码

importgdal2tiles#设置需要切图的级别,设置恢复模式,显示生成切片的输出options = {'zoom': (11, 12), 'resume': True,'verbose':True}

gdal2tiles.generate_tiles('输入的影像文件', '输出的切片文件夹', **options)

生成的切片是按照目录进行组织:

文件夹中,有3个网页文件,可直接在浏览器中,打开进行数据预览。

引言二维、三维地图的底图一般都是用图片切片(瓦片),将大的影像数据,或是矢量配色好的图层集合,通过工具,切成地图切片,以文件的形式存放,或者是存放到mbtiles数据库中;数据发布工具Arcgis Server或Geoserver也可将影像数据,实时的按照客户端地图范围,切成地图切片,返回到客户端进行显示。切片数据可以直接按照目录发布,也可发布成tms、wmts服务,开源的二维地图引擎leafle... 一直以来,作为一个GIS开发者,都想自己去实现栅格 切片 和矢量 切片 。前面的博文中,已经介绍了如何实现矢量 切片 ,刚刚进入GIS行业的人一般都是用GeoServer进行栅格 切片 ,速度效率很低。这里介绍一下如何 使用 代码高效地进行栅格 切片 ,主要是依赖 gdal 2tiles这个python 。 我的电脑环境是 python3.9.5 GDAL 3.3.0 执行下面的安装命令 安装 gdal 2tiles pip install gdal 2tiles 切片 代码 def qie(): #tif所在位置,存放位置(文件夹不在则自动创建, 切片 格式) gdal 2tiles.generate_tiles('E:/job/hy/hy00.tif', 'E:/job/raw3/', np_processes=2,zoom='2-17') if __name__ == '__main__': qie() 错误显示需要用RB/RGBA格式的tif 下面我们 使用 Global Mapper再次对tif进行绘制修改 gdal 2tiles(以下简称g2t),这个历史悠久的 脚本依然能发挥其功用,因为它稳定的做好了它应做的东西.相比前面说过的 gdal 2mbtiles(以下简称g2m),我倒是更喜欢它,单文件脚本,运行只安装一个 GDAL 足矣.同样因为有了g2m,我也是带着对比的心态提出几个问题: 从表现来看,g2t更慢 慢的原因是什么 可以采用g2m加速吗 与g2m对比,其算法有何差异
gdal .Warp工具可以用于坐标系转换、投影变换、 像合并与镶嵌、地理范围 剪、更改分辨率、矢量 剪等方面,关键的参数在于options,可参考文档 gdal .Warp的说明,通过文档中osgeo. gdal .Warp、osgeo. gdal .WarpOptions这两个模块的说明,可以了解到 gdal .Warp的具体应用方式,本文主要是针对矢量 剪的功能进行说明。 options的主要参数如下: WarpOptions(options=None, format=None, outputBounds=None,
打开矢量 层,并显示基本信息。 层数,驱动名, 层网格范围,属性表结构信息,矢量元素,及矢量元素的属性 public static void info(String srcFile) { // 读取原 DataSource srcDataSource = ogr.Open(srcFile, 0); if (srcDataSource == null) { System.err.println(" GDAL Open failed - " + gd driver = gdal .GetDriverByName(“ENVI”) dataset = driver.Create(resultname, line, sample, 1, gdal .GDT_Float32) dataset.GetRasterBand(1).WriteArray(d
使用 Java GDAL 进行 切片 ,可以按照以下步骤进行: 1. 安装 GDAL 。可以从 GDAL 官方网站下载适合您的操作系统的安装程序,并按照说明进行安装。 2. 在 Java 项目中引入 GDAL 。可以 使用 Maven 或手动下载并添加 GDAL Java 绑定 。 3. 使用 GDAL Java API 进行 切片 。以下是一个基本的示例代码,它将一个 GeoTIFF 格式的文件 成多个小的 JPEG 格式的文件: import org. gdal . gdal .Dataset; import org. gdal . gdal .TranslateOptions; import org. gdal . gdal . gdal ; import org. gdal . gdal const. gdal constConstants; public class GDAL Tile { public static void main(String[] args) { gdal .AllRegister(); Dataset dataset = gdal .Open("input.tif", gdal constConstants.GA_ReadOnly); int width = dataset.GetRasterXSize(); int height = dataset.GetRasterYSize(); int tileSize = 256; int tileColumns = (width + tileSize - 1) / tileSize; int tileRows = (height + tileSize - 1) / tileSize; for (int i = 0; i < tileRows; i++) { for (int j = 0; j < tileColumns; j++) { int x = j * tileSize; int y = i * tileSize; String outputFilename = String.format("tile_%d_%d.jpg", i, j); TranslateOptions options = new TranslateOptions(new String[] { "-of", "JPEG", "-outsize", String.format("%d", tileSize), String.format("%d", tileSize), "-srcwin", String.format("%d", x), String.format("%d", y), String.format("%d", tileSize), String.format("%d", tileSize) gdal .Translate(outputFilename, dataset, options); dataset.delete(); 请注意,此示例代码仅适用于 GeoTIFF 格式的文件。如果您需要处理其他格式的文件,您需要相应地更改代码。