GDAL库概念学习
-
一、GDAL库的两个核心组件:
gdal - 处理栅格数据(图像、DEM等) ogr - 处理矢量数据(点、线、面等)功能:数据读取、写入、转换、处理、分析
-
1. 栅格数据(Raster Data)
像图像一样的数据,由像素矩阵组成
每个像素有位置信息和属性值- 典型应用:
卫星影像
数字高程模型(DEM)
温度分布图
土地利用分类图
- 典型应用:
-
2.矢量数据(Vector Data)
由几何图形组成的数据
三种基本几何类型:点(Point):位置点(如:气象站) 线(Line):道路、河流 面(Polygon):行政区划、湖泊
// 矢量数据结构示例
点: (经度, 纬度) # 如:(116.397, 39.908)
线: [(x1,y1), (x2,y2), ...] # 如:河流路径
面: [[(x1,y1), (x2,y2), ...]] # 如:省界多边形
- 3. 投影(Projection)
- 为什么需要投影?
地球是球体,地图是平面,需要把球面展开成平面,这个过程就是投影。- 两种主要坐标系:
- 为什么需要投影?
# 1. 地理坐标系(Geographic Coordinate System)
# - 用经纬度表示(度°)
# - 单位:角度
# - 如:WGS84 (EPSG:4326)
# - 示例:北京 (116.397°E, 39.908°N)
# 2. 投影坐标系(Projected Coordinate System)
# - 用平面坐标表示(米)
# - 单位:长度
# - 如:UTM, 高斯-克吕格投影
# - 示例:(500000m, 4500000m)
常见投影举例:
| 投影类型 | EPSG代码 | 用途 | 单位 |
|---|---|---|---|
| WGS84 | 4326 | GPS全球定位 | 度 |
| Web墨卡托 | 3857 | 谷歌/百度地图 | 米 |
| UTM Zone 50N | 32650 | 中国部分地区 | 米 |
| CGCS2000 | 4490 | 中国国家坐标系 | 度 |
-
4.重投影(Reprojection)
定义:将数据从一个坐标系转换到另一个坐标系
# 重投影的真实场景
原始数据:卫星影像(UTM投影,单位:米)
目标需求:叠加到百度地图(Web墨卡托投影,单位:米)
# 重投影过程:
输入:影像(UTM) → 转换计算 → 输出:影像(Web墨卡托)
- 二、GDAL数据模型详解
- 栅格数据模型
Dataset (数据集)
├── RasterBand 1 (波段1)
├── RasterBand 2 (波段2)
├── RasterBand 3 (波段3)
├── GeoTransform (地理变换)
└── Projection (投影信息)
GeoTransform是关键参数
eg. 计算某个像素的地理坐标
# GeoTransform是关键参数:
# 6个参数定义像素位置与地理坐标的关系
# (左上角X坐标, 像素宽度, 旋转角度,
# 左上角Y坐标, 旋转角度, 像素高度)
datas = gdal.Open('input.tif')
gt = datas.GeoTransform()
//gt = (120.0, 0.0001, 0, 30.0, 0, -0.0001)
# 计算某个像素的地理坐标
pixel_x, pixel_y = 100, 200
geo_x = gt[0] + pixel_x * gt[1] + pixel_y * gt[2]
geo_y = gt[3] + pixel_x * gt[4] + pixel_y * gt[5]
2.矢量数据模型
DataSource (数据源)
├── Layer 1 (图层1)
│ ├── Feature 1 (要素1)
│ │ ├── Geometry (几何)
│ │ └── Attributes (属性)
│ ├── Feature 2
│ └── ...
└── Layer 2
- 三、数据格式举例
栅格格式:
GeoTIFF (.tif) - 最常用,支持地理信息
JPEG2000 (.jp2) - 压缩率高
NetCDF (.nc) - 科学数据
HDF (.hdf) - 卫星数据格式
PNG/JPEG - 普通图像(无地理信息)
矢量格式:
Shapefile (.shp) - 最常用,多个文件组成
GeoJSON (.geojson) - WebGIS常用
KML (.kml) - Google Earth
GML (.gml) - XML格式
FileGDB (.gdb) - ESRI地理数据库
# 栅格数据处理 vs 矢量数据处理
# ===== 栅格操作 =====
# 读取卫星影像
raster_ds = gdal.Open('satellite.tif')
# 像操作图片一样处理
band = raster_ds.GetRasterBand(1)
data = band.ReadAsArray() # 得到numpy矩阵
# ===== 矢量操作 =====
# 读取行政区划
vector_ds = ogr.Open('boundary.shp')
layer = vector_ds.GetLayer()
# 像操作图形一样处理
for feature in layer:
geometry = feature.GetGeometryRef() # 得到几何图形
if geometry.GetGeometryName() == 'POLYGON':
area = geometry.GetArea() # 计算面积
四、学习路径建议
第一阶段:理解核心概念(投影、坐标系统)
第二阶段:掌握基本读写操作
第三阶段:学习空间分析功能
第四阶段:优化性能和实际项目应用
五、常见误区提醒
经纬度顺序:GIS中通常是(经度, 纬度),不是(纬度, 经度)
投影单位:地理坐标系用度,投影坐标系用米
数据范围:不同投影有不同有效范围
精度损失:重投影可能导致精度变化
753

被折叠的 条评论
为什么被折叠?



