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

该博客详细介绍了如何使用Python从TIFF文件中读取经纬度信息,并将数据转换成CSV格式。通过osgeo.gdal库打开TIFF文件,获取地理信息,然后遍历图像矩阵,计算每个像素的经纬度坐标,最终保存到CSV文件中。
摘要由CSDN通过智能技术生成
# coding UTF-8
# author:huangZengli
from osgeo import gdal
from pylab import *  # 支持中文
import os
import pandas as pd

mpl.rcParams['font.sans-serif'] = ['SimHei']

#遍历指定类型文件
def getFilePathList(path, filetype):
    pathList = []
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(filetype):
                pathList.append(os.path.join(root, file))
    return sorted(pathList)  # 输出以filetype为后缀的列表,已按名称排序,注意这个地方可能因为命名方式出错,可以输出list看下
 
if __name__ == "__main__":
    for year in range(2001,2021):
        filePath = '/Users/sunergao/Desktop/VM/NDVI2/geo/NDVIresample/' + str(year)  # tif文件路径
        filePathList = getFilePathList(filePath,'tif')
        for i in range(0,12):
            dataset = gdal.Open(filePathList[i])  # 打开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坐标
            lon = []
            lat = []
            ndvi = []
            for y in range(row):  # 行     
                for x in range(col):  # 列
                    # 有效高程
                    # if dem[y][x] > 0:
                    # 输出经纬度
                    lon.append(geo_information[0] + x * geo_information[1] + y * geo_information[2])
                    lat.append(geo_information[3] + x * geo_information[4] + y * geo_information[5])
                    ndvi.append(dem[y][x])
          
            outfilePath = '/Users/sunergao/Desktop/VM/NDVI2/geo/NDVItable3/' + str(year) + '/' + str(i+1) + '_NDVI.csv'
            name = ['lon','lat','NDVI']
            data = pd.DataFrame({name[0]:lon,name[1]:lat,name[2]:ndvi})
            save_name = outfilePath
            data.to_csv(save_name,index =False ,sep = ',')
            print(year,'-',i+1,'NDVI表已经生成')

原文:使用python读取tiff文件中的经纬度,并将数据以excel表的形式输出(详细步骤)_迷沉的博客-CSDN博客_tif的经纬度坐标

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要通过Python读取Excel某一列的经纬度坐标,并将多组经纬度坐标生成多个矢量面文件,您可以使用pandas库来读取Excel文件,并结合GDAL库来生成矢量面文件。下面是一个示例代码: ```python import pandas as pd from osgeo import ogr # 读取Excel文件 data = pd.read_excel('input.xlsx') # 获取经纬度数据 lon_lat_data = data['经纬度'] # 遍历每组经纬度坐标 for i, coordinates in enumerate(lon_lat_data): # 创建Shapefile数据源 driver = ogr.GetDriverByName('ESRI Shapefile') data_source = driver.CreateDataSource(f'output_{i}.shp') # 创建图层 layer = data_source.CreateLayer('polygon', geom_type=ogr.wkbPolygon) # 创建字段 field_defn = ogr.FieldDefn('id', ogr.OFTInteger) layer.CreateField(field_defn) # 创建多边形 ring = ogr.Geometry(ogr.wkbLinearRing) # 分割经纬度坐标 coordinates = coordinates.split(';') # 添加经纬度坐标点 for coordinate in coordinates: lon, lat = coordinate.split(',') ring.AddPoint(float(lon), float(lat)) # 创建多边形对象 polygon = ogr.Geometry(ogr.wkbPolygon) polygon.AddGeometry(ring) # 创建要素 feature_defn = layer.GetLayerDefn() feature = ogr.Feature(feature_defn) feature.SetGeometry(polygon) feature.SetField('id', i+1) # 将要素添加到图层 layer.CreateFeature(feature) # 清理资源 feature = None data_source = None ``` 请将代码的'input.xlsx'替换为您实际的Excel文件路径。此示例代码假设Excel文件有一列名为'经纬度',其包含多个经纬度坐标,每个经纬度坐标之间使用分号进行分隔,经度和纬度之间使用逗号进行分隔。 代码将遍历每组经纬度坐标,为每组坐标创建一个单独的Shapefile文件文件名将使用索引编号进行命名,例如"output_0.shp","output_1.shp"等。 请确保已安装pandas和GDAL库,可以使用以下命令进行安装: ``` pip install pandas pip install gdal ``` 注意:在使用GDAL库之前,还需要安装GDALPython绑定,可以通过Anaconda进行安装,或者下载GDAL二进制文件进行安装。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值