使用python读取tiff文件中的经纬度,并将数据以excel表的形式输出(详细步骤) 您所在的位置:网站首页 怎样查询地理位置的经纬度和纬度 使用python读取tiff文件中的经纬度,并将数据以excel表的形式输出(详细步骤)

使用python读取tiff文件中的经纬度,并将数据以excel表的形式输出(详细步骤)

2024-07-03 00:07| 来源: 网络整理| 查看: 265

近日,因为某任务,需要批量的读取tiff文件里的经度、纬度和高程,最后生成excel。

步骤如下:

1.安装gdal包,一般"pip install gdal"都会报错,解决办法见地址

2.获取tif对象

filePath = 'tif_k36a/K36TIFF.tif' # tif文件路径 dataset = gdal.Open(filePath) # 打开tif

3.获取地理信息、行数、列数和波段,这里我的band输出是“1”.

geo_information = dataset.GetGeoTransform() col = dataset.RasterXSize # 438 row = dataset.RasterYSize # 671 band = dataset.RasterCount dem = dataset.GetRasterBand(1).ReadAsArray()

其中:

geo_information(0):左上像素左上角的x坐标。 geo_information(1):w - e像素分辨率 / 像素宽度。 geo_information(2):行旋转(通常为零)。 geo_information(3):左上像素左上角的y坐标。 geo_information(4):列旋转(通常为零)。 geo_information(5):n - s像素分辨率 / 像素高度(北半球上图像为负值)

4.获取经纬度和高程,以及在原来tif栅格中的行列坐标位置。放数据放在cols中。

cols = [] for y in range(row): # 行 rows = [] for x in range(col): # 列 # 有效高程 if dem[y][x] > 0: # 输出经纬度 lon = geo_information[0] + x * geo_information[1] + y * geo_information[2] lat = geo_information[3] + x * geo_information[4] + y * geo_information[5] child = [lon, lat, dem[y][x], y, x] rows.append(child) cols.append(rows)

5.生成excel表

ws = work.active ws['A1'] = '经度' ws['B1'] = '纬度' ws['C1'] = '高程' ws['D1'] = '所在栅格行' ws['E1'] = '所在栅格列' for i in range(len(data)): rows = [] row_length = len(data[i]) if row_length != 0: for j in range(row_length): rows.append(data[i][j]) ws.append(rows[j]) print(rows) work.save(name)

6.整体代码

# coding UTF-8 # author:huangZengli from osgeo import gdal from pylab import * # 支持中文 mpl.rcParams['font.sans-serif'] = ['SimHei'] from openpyxl import Workbook # 创建一个Workbook对象 work = Workbook() def out(data, name): ws = work.active ws['A1'] = '经度' ws['B1'] = '纬度' ws['C1'] = '高程' ws['D1'] = '所在栅格行' ws['E1'] = '所在栅格列' for i in range(len(data)): rows = [] row_length = len(data[i]) if row_length != 0: for j in range(row_length): rows.append(data[i][j]) ws.append(rows[j]) print(rows) work.save(name) if __name__ == "__main__": filePath = 'tif_k82a/K82A.tif' # tif文件路径 dataset = gdal.Open(filePath) # 打开tif # 获取行数列数和地理信息 # geo_information(0):左上像素左上角的x坐标。 # geo_information(1):w - e像素分辨率 / 像素宽度。 # geo_information(2):行旋转(通常为零)。 # geo_information(3):左上像素左上角的y坐标。 # geo_information(4):列旋转(通常为零)。 # geo_information(5):n - s像素分辨率 / 像素高度(北半球上图像为负值) geo_information = dataset.GetGeoTransform() col = dataset.RasterXSize # 438 row = dataset.RasterYSize # 671 band = dataset.RasterCount dem = dataset.GetRasterBand(1).ReadAsArray() # 获取行列数,对应其经纬度,j对于x坐标 cols = [] for y in range(row): # 行 rows = [] for x in range(col): # 列 # 有效高程 if dem[y][x] > 0: # 输出经纬度 lon = geo_information[0] + x * geo_information[1] + y * geo_information[2] lat = geo_information[3] + x * geo_information[4] + y * geo_information[5] child = [lon, lat, dem[y][x], y, x] rows.append(child) cols.append(rows) out(cols, '从8标渣场tif提取的数据(待验证).xlsx') print('表已经生成')

感谢各位大佬阅读!如有错误请望指正!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有