GDAL库概念学习记录

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代码用途单位
WGS844326GPS全球定位
Web墨卡托3857谷歌/百度地图
UTM Zone 50N32650中国部分地区
CGCS20004490中国国家坐标系
  • 4.重投影(Reprojection)

     定义:将数据从一个坐标系转换到另一个坐标系
    
	# 重投影的真实场景
	原始数据:卫星影像(UTM投影,单位:米)
	目标需求:叠加到百度地图(Web墨卡托投影,单位:米)
	
	# 重投影过程:
	输入:影像(UTM) → 转换计算 → 输出:影像(Web墨卡托)
  • 二、GDAL数据模型详解
  1. 栅格数据模型
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中通常是(经度, 纬度),不是(纬度, 经度)
投影单位:地理坐标系用度,投影坐标系用米
数据范围:不同投影有不同有效范围
精度损失:重投影可能导致精度变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值