使用python读取tiff文件中的经纬度,并将数据以excel表的形式输出(详细步骤) | 您所在的位置:网站首页 › 怎样查询地理位置的经纬度和纬度 › 使用python读取tiff文件中的经纬度,并将数据以excel表的形式输出(详细步骤) |
近日,因为某任务,需要批量的读取tiff文件里的经度、纬度和高程,最后生成excel。 步骤如下: 1.安装gdal包,一般"pip install gdal"都会报错,解决办法见地址 2.获取tif对象 filePath = 'tif_k36a/K36TIFF.tif' # tif文件路径 dataset = gdal.Open(filePath) # 打开tif3.获取地理信息、行数、列数和波段,这里我的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 实验室设备网 版权所有 |