|
@@ -0,0 +1,88 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+__author__ = 'wanger'
|
|
|
+__description__ = '批量生成栅格数据元数据表格 EXCEL'
|
|
|
+__date__ = '2024-11-25'
|
|
|
+__copyright__ = '(C) 2024 by siwei'
|
|
|
+__revision__ = '1.0'
|
|
|
+
|
|
|
+from osgeo import gdal, osr
|
|
|
+import openpyxl
|
|
|
+
|
|
|
+# 读取 .img 文件
|
|
|
+filename = 'E:\\projects\\遥感技术部需求\\批量生成元数据\\数据\\分幅成果\\DEM成果\\DEM\\NH48G051053DEMK.img'
|
|
|
+dataset = gdal.Open(filename)
|
|
|
+
|
|
|
+if dataset:
|
|
|
+ # 获取栅格数据的基本信息
|
|
|
+ print(f"Driver: {dataset.GetDriver().ShortName}")
|
|
|
+ print(f"Raster Size: {dataset.RasterXSize} x {dataset.RasterYSize}")
|
|
|
+ print(f"Number of Bands: {dataset.RasterCount}")
|
|
|
+
|
|
|
+ # 获取地理信息
|
|
|
+ geo_transform = dataset.GetGeoTransform()
|
|
|
+ if geo_transform:
|
|
|
+ print(f"GeoTransform: {geo_transform}")
|
|
|
+
|
|
|
+ # 获取投影信息
|
|
|
+ projection = dataset.GetProjection()
|
|
|
+ print(f"Projection: {projection}")
|
|
|
+ # 获取栅格数据的投影信息
|
|
|
+
|
|
|
+ # 创建 SpatialReference 对象并加载投影信息
|
|
|
+ spatial_ref = osr.SpatialReference()
|
|
|
+ spatial_ref.ImportFromWkt(projection) # 或者使用 ImportFromProj4(projection)
|
|
|
+
|
|
|
+ # 检查投影是否为 UTM 类型,UTM 投影的中央子午线位于 PROJ.4 中的 +lon_0 参数
|
|
|
+ if spatial_ref.IsProjected():
|
|
|
+ proj4 = spatial_ref.ExportToProj4()
|
|
|
+ print(f"Projection PROJ.4: {proj4}")
|
|
|
+
|
|
|
+ # 寻找中央子午线 (lon_0)
|
|
|
+ central_meridian = None
|
|
|
+ for param in proj4.split():
|
|
|
+ if param.startswith('+lon_0'):
|
|
|
+ central_meridian = param.split('=')[1]
|
|
|
+ break
|
|
|
+
|
|
|
+ if central_meridian:
|
|
|
+ print(f"Central Meridian: {central_meridian}")
|
|
|
+ else:
|
|
|
+ print("No central meridian found.")
|
|
|
+
|
|
|
+ # 获取栅格数据的各个波段元数据
|
|
|
+ for band_index in range(1, dataset.RasterCount + 1):
|
|
|
+ band = dataset.GetRasterBand(band_index)
|
|
|
+ print(f"\nBand {band_index}:")
|
|
|
+ print(f"Data type: {gdal.GetDataTypeName(band.DataType)}")
|
|
|
+ print(f"Band min: {band.GetMinimum()}, Band max: {band.GetMaximum()}")
|
|
|
+ print(f"Band NoData Value: {band.GetNoDataValue()}")
|
|
|
+ print(f"Band metadata: {band.GetMetadata()}")
|
|
|
+else:
|
|
|
+ print("Failed to load image.")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#操作excel
|
|
|
+# filename = 'example.xlsx'
|
|
|
+# workbook = openpyxl.load_workbook(filename)
|
|
|
+# sheet = workbook.active
|
|
|
+# # 定义替换数据的字典
|
|
|
+# replacements = {
|
|
|
+# "{{name}}": "Bob",
|
|
|
+# "{{age}}": "40",
|
|
|
+# "{{address}}": "Paris"
|
|
|
+# }
|
|
|
+# # 遍历单元格,替换占位符
|
|
|
+# for row in sheet.iter_rows():
|
|
|
+# for cell in row:
|
|
|
+# if isinstance(cell.value, str): # 确保单元格内容是字符串
|
|
|
+# for placeholder, replacement in replacements.items():
|
|
|
+# if placeholder in cell.value:
|
|
|
+# # 替换占位符
|
|
|
+# cell.value = cell.value.replace(placeholder, replacement)
|
|
|
+# # 保存修改后的文件
|
|
|
+# workbook.save('modified_example.xlsx')
|