当前位置: 首页 > news >正文

GDAL库的安装、矢量和栅格数据的加载、数据文件信息输出、文件坐标系转换

1.GDAL库

GDAL(Geospatial Data Abstraction Library)是一个开源的栅格与矢量地理空间数据转换库,在功能上类似于arcgis系列的arcpy包。GDAL是C++编写的库,但它提供了非常完善的Python绑定,可以使用python调用。

1.1GDAL库安装

Windows系统下GDAL库的安装:建议使用conda install -c conda-forge gdal进行安装。不使用pip是因为,GDAL本质上是一个C++库,而不是python库,直接用pip下载会让PyPi下载C++的源码包,而不是.py的文件,需要额外的多余操作。使用-c conda-forge在conda-forge社区频道下载的包版本更新,更稳定。

1.2GDAL的安装检验

from osgeo import gdal, ogr, osrprint("GDAL 安装验证")
print(f"GDAL 版本: {gdal.__version__}")# 获取 GDAL 数据目录
data_dir = gdal.GetConfigOption('GDAL_DATA')
print(f"GDAL 数据目录: {data_dir}")# 获取驱动数量
driver_count = gdal.GetDriverCount()
print(f"GDAL 驱动数量: {driver_count}")# OGR 驱动数量
ogr_driver_count = ogr.GetDriverCount()
print(f"OGR 驱动数量: {ogr_driver_count}")print("模块 (gdal, ogr, osr) 导入成功")

2栅格数据

2.1读取栅格数据文件

from osgeo import gdal  # 主要处理栅格数据gdal.UseExceptions()  # 开启异常模式(gdal4之后默认):出错时抛出异常
# gdal.DontUseExceptions() 不开启异常模式if __name__=="__main__":# 读取影像文件raster_path = r""ds = gdal.Open(raster_path)# 关闭影像文件# GDAL 的 Python 绑定是通过 SWIG 生成的,其资源释放机制依赖于引用计数,而不是 Python 的 delds = None  

2.2获取栅格数据文件基本信息

from osgeo import gdal  # 主要处理栅格数据# ===================================
gdal.UseExceptions()  # 开启异常模式(gdal4之后默认):出错时抛出异常
# gdal.DontUseExceptions() 不开启异常模式# ---------- 检查栅格----------
def check_raster(ds):print("\n【栅格数据检查】")if ds is None:print("ds为None")else:print(f"文件路径:{ds.GetDescription()}")print(f"栅格尺寸: {ds.RasterXSize} 列 × {ds.RasterYSize} 行")print(f"波段数量: {ds.RasterCount}")# 获取投影信息proj = ds.GetProjection()print(f"投影信息: {proj[:200]}..." if len(proj) > 200 else f"投影信息: {proj}")# 获取地理变换参数gt = ds.GetGeoTransform()if gt:print(f"左上角X坐标: {gt[0]:.6f}")  # 左上角像元的X坐标print(f"像元宽度: {gt[1]:.8f}")  # 像元宽度(X 方向分辨率)print(f"行旋转参数:{gt[2]:6f}")  # 行旋转参数(X 方向随行的变化)print(f"左上角Y坐标: {gt[3]:.6f}")  # 左上角像元的 Y 坐标print(f"列旋转参数:{gt[4]:6f}")  # 列旋转参数(Y 方向随列的变化)print(f"像元高度: {gt[5]:.8f}")  # 像元高度(Y 方向分辨率),通常为负值表示Y轴向下# 计算并打印坐标范围xmin = gt[0]xmax = gt[0] + ds.RasterXSize * gt[1]ymax = gt[3]  # 左上角Y是最大值ymin = gt[3] + ds.RasterYSize * gt[5]  # gt[5]是负数print(f"坐标范围: X[{xmin:.6f}, {xmax:.6f}], Y[{ymin:.6f}, {ymax:.6f}]")if __name__ == "__main__":# 栅格数据文件读取raster_path = r""ds = gdal.Open(raster_path)# 基础信息读取check_raster(ds)# GDAL 的 Python 绑定是通过 SWIG 生成的,其资源释放机制依赖于引用计数,而不是 Python 的 delds = None  # 关闭文件

2.3转换栅格数据文件坐标系(重投影)

if __name__ == "__main__":# 栅格数据文件读取raster_path = r""output_raster = r""target_srs = "EPSG:4326"gdal.Warp(output_raster,      # 输出文件路径raster_path,        # 输入文件路径dstSRS=target_srs,  # 目标坐标系format="GTiff",     # 输出格式resampleAlg=gdal.GRA_Bilinear  # 重采样算法)

3.矢量数据

3.1读取矢量数据文件

from osgeo import gdal  # 主要处理栅格数据
from osgeo import ogr   # 主要处理矢量数据
gdal.UseExceptions()    #开启异常模式if __name__=="__main__":# ========== 路径 ==========vector_path = r""output_vector = r""ds = ogr.Open(vector_path)check_voctor(ds)ds = None  # 关闭文件

3.2输出主要信息

from osgeo import gdal  # 主要处理栅格数据
from osgeo import ogr   # 主要处理矢量数据
gdal.UseExceptions()    #开启异常模式def check_voctor(ds):print("\n【矢量数据检查】")if ds is None:print("ds为None")else:layer = ds.GetLayer(0)print(f"文件路径: {ds.GetDescription()}")print(f"图层名称: {layer.GetName()}")print(f"要素数量: {layer.GetFeatureCount()} 个站点")# 获取投影信息spatial_ref = layer.GetSpatialRef()if spatial_ref:print(f"投影信息: {spatial_ref.GetName()}")else:print("投影信息: 无(可能是地理坐标系)")# 获取范围extent = layer.GetExtent()print(f"坐标范围: X[{extent[0]:.6f}, {extent[1]:.6f}], Y[{extent[2]:.6f}, {extent[3]:.6f}]")# 获取字段信息layer_defn = layer.GetLayerDefn()print("字段列表:")for i in range(layer_defn.GetFieldCount()):field_defn = layer_defn.GetFieldDefn(i)print(f"  [{i}] {field_defn.GetName()}")if __name__=="__main__":# ========== 路径 ==========vector_path = r""output_vector = r""ds = ogr.Open(vector_path)check_voctor(ds)ds = None  # 关闭文件

3.3坐标系转换

    target_srs = "EPSG:32649"gdal.VectorTranslate(output_vector,vector_path,format="ESRI Shapefile",layerCreationOptions=["ENCODING=UTF-8"],  # 避免中文乱码dstSRS=target_srs  # 目标坐标系)
http://www.jsqmd.com/news/720332/

相关文章:

  • Django入门:MVT架构全解析
  • 招聘软件app有哪些?2026主流平台排行,易直聘领跑 - 博客万
  • TCP与IP协议
  • ARM CoreSight ETM11架构与调试技术详解
  • 2026最新单招培训学校/高中/单招学校推荐!东北优质权威榜单发布,实力突出辽宁沈阳等地学校放心选 - 十大品牌榜
  • 详解 PS 四种改色方法:色相替换 / 可选颜色 / 蒙版调色
  • 2026年北京专业消杀公司排名:臻洁虫控与业界标杆深度横评|官方联系方式+避坑指南 - 企业名录优选推荐
  • PHP 9.0 Fiber + AI Bot推理流水线:单机万级并发下LLM Token流低延迟投递方案(含v8引擎JIT协同优化细节)
  • 什麼是Web Scraper?
  • 全球AI贡献梯队解析!!!!
  • 过来人实测报告:2026主管药师网课口碑排行榜,基础差也能过! - 医考机构品牌测评专家
  • 如何在群晖NAS上安装Realtek USB网卡驱动实现2.5G网络升级
  • 48.网络基础
  • 2026卫生高级职称考试押题哪家强?最新押题命中率排行榜出炉! - 医考机构品牌测评专家
  • 不规则图片怎么贴合?PS 透视变形贴图方法大全
  • R语言在LLM偏见分析中的统计建模实战(2024最新F1-Bias检验框架首次公开)
  • 2026年北京专业消杀公司深度横评:臻洁虫控vs行业竞品选购指南 - 企业名录优选推荐
  • 从STOUT到Transformer:聊聊化学结构式转换背后的AI黑科技(附在线工具推荐)
  • 2026卫生初中级职称考试课程最新实力榜:高通过率课程深度解析 - 医考机构品牌测评专家
  • POE供电选型避坑指南:从802.3af到802.3bt,你的摄像头/AP到底该用哪种?
  • 终极指南:3分钟掌握Windows本地OCR神器Text-Grab,图片转文字效率提升500%
  • 2026年北京消杀公司深度横评:专业除四害、病媒防制、PCO虫控服务商完全选购指南 - 企业名录优选推荐
  • 新开发的一款物联网分布式光伏集中管控平台
  • 外包经历对程序员职业生涯的影响
  • 别再只看K线了!用Python+TA-Lib实战分析A股成交量(附完整代码)
  • 电竞生高强度用眼专属!奕鸣眼科全飞秒精准4.0+ICL晶体植入 - 深度智识库
  • 2026年北京消杀公司怎么选?臻洁虫控官方联系电话与专业防治深度横评 - 企业名录优选推荐
  • theone陪伴ai免费版theone陪伴ai下载教程
  • 2026最新学技术学校/技校/单招学校推荐!东北优质权威榜单发布,辽宁沈阳等地院校综合实力突出 - 十大品牌榜
  • 2026 全自动咖啡机选购指南,商用热门品牌推荐 - 品牌2026