书籍
《GDAL源码剖析与开发指南.pdf》
链接:https://pan.baidu.com/s/1VBWgAhf8h_Gr2nx6BnB3gg
提取码:s6tv
学习目的
- 初级:了解GDAL能做什么事情
- 中级:能搭建GDAL C#、C++开发环境和最简单demo
- 高级:了解GDAL常用功能,形成代码demo;
简介
GDAL
- Geospatial Data Abstraction Library 地理空间数据抽象库 MIT协议
- 读写空间数据(栅格、矢量)的开源库
- 包含:
- 利用抽象数据模型表达各种文件格式
- 一系列命令行工具进行数据转换和处理
- 很多著名GIS产品使用了GDAL/OGR库
- 特点
- GDAL提供多种栅格数据支持
- OGR提供矢量数据的读写支持
- GDAL库提供一系列算法:矢量栅格化、栅格矢量化、图像校正算法、DEM相关算法接口
- 可以进行矢量图形之间的常用操作:求交、求并、缓冲区等(基于开源库GEOS:Geometry Engine,Open Source实现)
- 可以进行投影和坐标转换(基于PROJ4库来实现)
- 使用配置文件来对GDAL库支持的数据格式进行扩展
PROJ4
投影坐标转换库
GEOS
矢量图形算法库
OGR
GDAL项目的一个分支、功能和GDAL类似,提供对矢量数据的读写支持
OSGeo
-
OpenSourceGeospatialFoundation 开源空间信息基金会
-
OSGeo开源库
- GDAL
- PROJ4
- GEOS
- QGIS:跨平台
- GRASS
- OSSIM
- OPenLayers:WebGIS客户端的JavaScript包
- MapServer:实时地图发布系统
RasterIO
基于GDAL库二次封装,更符合Python风格,空间栅格数据处理的Python库
遥感概念
遥感
运用现代光学、电子学探测仪器,不与目标物体接触,远距离把目标物的电磁波特性记录下来,通过分析、解译揭示出目标物本身的特征、性质及其变化规律
一景数据
- 卫星拍摄一次所拍摄到的画面
- 资源三号一景:50公里*50公里
- 高分一号一景:32.5公里*32.5公里
- 高分二号一景:23.5公里*23.5公里
遥感影像数字图像处理
- 图像恢复
- 数据压缩
- 影像增强
- 信息提取
常见栅格数据格式
- GeoTIFF:最常见,支持地理坐标系、投影坐标系、高程数据,广泛用于卫星遥感、地形分析和数字地图领域
- GRID:Esri格网格式,常用于ArcGIS
- JPEG2000格式:基于波let变换的图像压缩技术,可用于压缩撒喊个数据。支持多分辨率、多波段和空间元数据,广泛用于卫星遥感和数字地图领域
常见矢量数据格式
- dwg:AutoCAD图形文件,转么用于存储矢量图形的标准文件格式
- shp:ArcView GIS软件特有数据格式,存储地理信息空间和属性信息
- gpx:gps设备记录下来的GPS点文件,xml格式;
SWIG
- Simplified Wrapper and Interface Generator
- 将c或c++编写的软件与其他各种高级语言进行嵌入联接
Doxygen
- 生成C++注释文档的标准工具
- 也支持:C、Object-C、C#、Java等
空间参考
概念
大地水准面
- 静止海水面向大陆延伸所形成的不规则的封闭曲面
- 重力等位面,即物体沿该面运动时,重力不做工
- 是海拔高程系统的起算面
- 大地水准面通过确定它与参考椭球面的间距来实现的
- 地球质量并非均匀分布,重力的方向也会相应发生变化,所以大地水准面的形状是不规则的
- 反应了地球内部物质结构、密度和分布等信息
地球椭球体
- 为了测量成果的计算和制图需要,选用近似大地水准面的椭球体代替
- 规则的曲面、测量和制图的基础,长半轴、短半轴、扁率表示
- 由于是近似大地水准面,所以地球椭球体可以有多个
基准面
- 特定区域内与地球表面极为吻合的椭球体
- 通过基准面的原点对椭球体进行定位
- 基准面的坐标系原点往往距地心有一定偏移
地图投影
- 利用一定数学法则,把地球表面的任意点,转换到地图平面上的理论和方法
- 地理坐标系GCS
- 确定地图在地球位置的坐标,经纬度表示
- GCS包括:基准面、角度测量单位、本初子午线
- 投影坐标系
- 投影坐标=地理坐标系(北京54、西安80、WGS84)+ 投影方法(高斯-吕迪格、Lambert投影、Mercator投影)+线性单位
GDAL算法
大图像处理策略
对大图像分块,每次只处理一块数据,直到处理完所有的块
图像重采样
目的是将图像放大或者缩小
图像裁切
矩形的规则裁切
使用AOI(Area of Interesting)的不规则裁切
图像镶嵌
将有重叠区域的多个图像根据其地理坐标拼接成一个图像的过程
图像重投影
将图像从一个投影通过坐标转换成另外一个投影
依赖PROJ4库
图像校正
将一组没有投影的数据校正到某种投影中去
本质上是建立一种从原始图像行列号到某种投影的数学关系
和图像重投影类似
DEM地形分析
坡度坡向分析
地形指数
地形耐用指数
地形位置指数
粗糙度
山体阴影
模拟太阳光照射地形所引起的明暗对比,然后对地形图进行渲染,使之看起来具有立体效果的一种方式,常用于地图的渲染
彩色渲染
- 根据地面高度划分的高程层,逐层设置不同颜色
- 蓝色表示海洋
- 绿色表示平原
- 黄色表示低山、丘陵
- 棕、灰、紫、白,表示高山
立体彩色渲染
山体阴影+彩色渲染图组合=立体感的彩色地形图
格网插值
使用离散的数据点创建一个栅格图像的过程
小碎斑去除
将图像中的细小图斑移除,使用周围的像元值替代
矢量栅格化
栅格矢量化
生成等高线
通过DEM数据和制定的等高距生成等高线矢量文件
CPL库
-
Common Portability Library、 GDAL核心库
-
封装大量通用函数:
-
常用的数据结构(四叉树、哈希表、链表)
-
文件读写(二进制、文本、csv、xml、zip)
-
数据库操作
-
网络数据读取
-
多线程
-
文件系统
-
GDAL工具
GDAL库提供一些很实用的命令行工具、脚本工具,可完成目前遥感图像处理中的大部分内容
Exe工具
gadlinfo
用于输出GDAL支持的栅格图像的相关信息:坐标系统、四至坐标、行列数、波段描述
gdal_translate
用于格式转换,同时还可以实现图像矩形裁切、重采样、数据类型转换等功能
gadladdo
为大多数支持的格式建立或者重建金字塔
gdalwrap
对图像进行重投影、校正、镶嵌等操作
gadltindex
生成栅格数据的矢量落图文件(根据四至范围生成矩形矢量)
gdalbuildvrt
生成vrt虚拟文件
gdal_contour
从DEM文件中提取等高线矢量文件
DEM:Digital Elevation Model 数字高程模型,地形表面形态的数字化表示
gdaldem
-
用于对DEM数据进行处理
-
包括生成
- 山体阴影图
- 坡度图
- 坡向图
- 彩色渲染图
- 地表耐用指数图
- 地形位置指数图
- 粗糙度图
gdal_rasterize
将矢量文件转为栅格文件
gdaltransform
坐标转换
nearblack
近白色、近黑色、自定义颜色像元转换成白色或黑色
gdal_grid
将OGR支持的离散数据插值成一个规则的栅格数据
gdallocationinfo
查询图像制定位置的像元值
gdalsrsinfo
把指定的控件参考信息按照不同的格式进行显示
gdal-config
查看关于GDAL安装信息
gdalmanage
栅格数据管理:查看数据格式、删除数据、重命名、复制
ogrinfo
输出矢量数据信息
ogr2ogr
矢量信息格式转换、重投影等功能
ogrtindex
生成矢量数据落图矢量文件(四至范围生成矩形矢量框)
Python脚本工具
rgb2pct.py
24位RGB真彩图像转换为带有颜色表的单波段数据
pct2rgb.py
颜色表的单波段数据转24位RGB真彩图像
gdal_merge.py
图像镶嵌处理
gadl2tiles.py
切片并生成地图简单网页
gdal_retile.py
生成金字塔或者瓦片
gdal_polygonize.py
栅格矢量化
gdal_sieve.py
去除栅格图像小碎图斑
gdal_fillnodata.py
填充图像中像元像素值为NoData的像元
gadlmove.py
空间参考转换
gdal_edit.py
修改栅格图像信息