软件经验|GDAL空间数据开源库开发介绍
GDAL(Geospatial Data Abstraction Library)是使用C/C++语言编写的用于读写空间数据的一套跨平台开源库。GDAL库可以读取、写入、转换、处理各种栅格数据格式,它打包的OGR库可以操作各类矢量数据,利用GDAL库(包括GDAL+OGR)可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持。如今这两个库对各种数据格式的支持相当强大,几乎所有的GIS/RS所要处理的数据格式类型都包括在内。现有的大部分GIS或RS平台,不论是商业软件ArcGIS、ENVI、Google Earth 还是开源软件GRASS、QGIS,都使用了GDAL作为底层构建库。
1、GDAL开发
GDAL提供了C/C++接口,并且通过Swig提供了Python,Java,C#等的调用接口。当我们在Python或C#中调用GDAL的API函数时,其实底层执行的是C/C++编译的二进制文件。
GDAL不但提供了API借口方便开发人员自定义自己的功能,而且还提供了一系列实用工具(Command Line Tools)可以实现方便快速的空间数据处理。我们可以使用这些实用工具,结合Linux Shell脚本或者Windows批处理脚本进行大批量空间数据的批量处理。
下面主要介绍GDAL下载使用以及常用实用工具(Command Line Tools)介绍。
2、GDAL下载使用
GDAL只是一个开源库,并不是一个单独的软件,而是C++写的源代码,需要编译成动态链接库(DLL)后才能为我们程序调用,如果需要在C#环境下调用,还需特别编译C#版的DLL,当然可以直接从GDAL官网上下载编译好的DLL,地址如下:http://www.gisinternals.com/sdk.php 。
下载VS版本对应的GDAL版本解压后,DLL文件位于\bin\目录:
C#调用的其他DLL以及部分exe应用程序位于\bin\gdal\csharp\目录:
C#调用的其他exe应用程序位于\bin\gdal\apps\目录:
C#使用GDAL库时,将上述DLL与exe应用程序全部拷贝至C#工程的Debug目录下,C#工程引用需要的DLL即可,无需安装。
3、GDAL实用工具介绍
GDAL提供了多个实用工具,主要是exe应用程序,C#可以在调用这些exe应用程序进行空间数据的批量处理,下面对部分实用工具功能进行简单介绍。
- gdalinfo.exe:显示GDAL支持的各种栅格文件的信息。
- gdal_translate.exe:在不同的格式间进行转换。同时,潜在的执行了一些切割、重采样和使像素比例变化的任务。
- gdalwarp.exe:投影转换和投影绑定,同时也可以进行图像镶嵌。这个程序可以重新投影所支持的投影,而且如果图像("raw" with)控制信息也可以把GCPs 和图像存储在一起
- gdaltindex.exe:创建栅格索引的SHP 文件。它能为每个栅格数据建立一个记录:一个包含栅格名称的属性,以及这个栅格的外边界所组成的多边形。
- gdal_contour.exe:从一个栅格DEM生成矢量的等值线。
- gdaltransform.exe :与PROJ相似。进行投投影转换。
- nearblack.exe 将栅格中接处黑\白的像元置成黑色或白色。这可以用来修补压缩丢失信息而造成的不准确,以便于在镶嵌时将其视为透明。
- gdal_grid.exe:从分散的点生成栅格,有插值的意思。
- ogrinfo.exe:显示OGR支持的矢量数据的信息。
- ogr2ogr.exe:进行不同简单矢量格式转换。
- gdaladdo.exe:在文件内建立金字塔,提高文件打开和浏览速度。
- gdalbuildvrt.exe: 为数据构建 VRT。
- gdaldem.exe:DEM分析与可视化工具,可进行坡度、坡向和山影分析,以及高程分色渲染功能。
另外,GDAL还提供有基于Python脚本的实用工具(.py文件,如下图),也可以用C#进行调用,但需要有Python运行环境。
- rgb2pct.py:将24bit的RGB图像转换为8bit颜色表图像。
- pct2rgb.py : 将8bit颜色表图像转换为24bit的RGB图像。
- gdal_merge.py : Build a quick mosaic from a set of images。
- gdal2tiles.py:生成 TMS瓦片结构,可用Google Earth(KML)或一般web浏览器进行浏览。
- gdal_rasterize:将矢量数据栅格化。
- gdal_retile.py:Retiles a set of tiles and/orbuild tiled pyramid levels。
- gdal_proximity.py : Compute a raster proximity map。
- gdal_polygonize.py:Generate polygons from raster。
- gdal_sieve.py:Raster Sieve filter。
- gdal_fillnodata.py:Interpolate in nodata regions。
GDAL基于Python脚本的实用工具由于需要有Python运行环境,等后续使用Python进行遥感影像处理软件开发时再介绍。接下来的文章主要介绍并分享C#调用GDAL库(主要是exe实用工具)开发的遥感影像批处理工具。
更多经验分享请关注微信公众号"海洋GISer成长记"。