python+gda输出影像每个像元的像元值+坐标值

读取每个像元的坐标值

from osgeo import gdal
import numpy as np

gdal.AllRegister()

filePath = r'D:\20200309\shujushouji\gdalzuobiaojisuan\boduanhecheng_ProjectRaster1.tif'
dataset = gdal.Open(filePath)

adfGeoTransform = dataset.GetGeoTransform()

# 左上角地理坐标
print(adfGeoTransform[0])
print(adfGeoTransform[3])

nXSize = dataset.RasterXSize #列数
nYSize = dataset.RasterYSize #行数
print(nXSize)
print(nYSize)


arrSlope = [] # 用于存储每个像素的(X,Y)坐标
for i in range(nYSize):
    row = []
    for j in range(nXSize):
        px = adfGeoTransform[0] + i * adfGeoTransform[1] + j * adfGeoTransform[2]
        py = adfGeoTransform[3] + i * adfGeoTransform[4] + j * adfGeoTransform[5]
        col = [px, py]
        row.append(col)
    file = open(r'D:\20200309\shujushouji\gdalzuobiaojisuan\dlancon.txt', 'a')
    file.write(str(row) + '\n')
    file.close()
    # arrSlope.append(row)
    # np.append(arrSlope, col)
    # file = open(r'D:\20200309\shujushouji\gdalzuobiaojisuan\detsss.txt', 'w')
    # file.write(str(arrSlope)+'\n')
    # file.close()
    # print(arrSlope[1:10])
print(len(arrSlope))

读取三波段中,每个波段的像元值,本来两个可以合成一个脚本的,小编比较懒,就直接单独存放了,如果改写了很方便的哈,代码比较简单也容易理解,直接看注释,不多解释哈。

# 导入gdal包
from osgeo import gdal
import numpy
import struct
import numpy as np


# 导入numpy包(支持高维数组和矩阵运算,也提供了许多数组和矩阵运算的函数)
gdal.AllRegister()
gdal.SetConfigOption("gdal_FILENAME_IS_UTF8","YES")
# 打开文件
dataset=gdal.Open(r'D:\20200309\shujushouji\gdalzuobiaojisuan\boduanhecheng_ProjectRaster1.tif')
# 栅格矩阵的列数
im_width = dataset.RasterXSize
# 栅格矩阵的行数
im_height = dataset.RasterYSize
# 波段数
print(im_width)
print(im_height)
im_bands = dataset.RasterCount
# 仿射矩阵,左上角像素的大地坐标和像素分辨率。
# 共有六个参数,分表代表左上角x坐标;东西方向上图像的分辨率;如果北边朝上,地图的旋转角度,0表示图像的行与x轴平行;左上角y坐标;
# 如果北边朝上,地图的旋转角度,0表示图像的列与y轴平行;南北方向上地图的分辨率。
im_geotrans = dataset.GetGeoTransform()
# 地图投影信息
im_proj = dataset.GetProjection()
# 读取某一像素点的值
# (1)读取一个波段,其参数为波段的索引号,波段索引号从1开始(我打开的这幅图像只有一个波段)
band1=dataset.GetRasterBand(1)
band2=dataset.GetRasterBand(2)
band3=dataset.GetRasterBand(3)
pBuf=None
im_datas1 = band1.ReadAsArray(0, 0, im_width, im_height)
im_datas1 = im_datas1.astype(numpy.float)  # numpy

im_datas2 = band2.ReadAsArray(0, 0, im_width, im_height)
im_datas2 = im_datas2.astype(numpy.float)  # numpy

im_datas3 = band3.ReadAsArray(0, 0, im_width, im_height)
im_datas3 = im_datas3.astype(numpy.float)  # numpy

im_data = dataset.ReadAsArray(0,0,im_width,im_height) #获取数据


# (2)用ReadAsArray(<xoff>, <yoff>, <xsize>, <ysize>),读出从(xoff,yoff)开始,大小为(xsize,ysize)的矩阵。以下为读取整幅图像

data2 = im_datas1[1411,1314]
print(data2)
# data1 = im_greenBand.astype(numpy.float)  # numpy
# mar1 = np.ma.masked_array(im_greenBand, np.isnan(im_greenBand))
# print(mar1)
# print("wwwwwwww")
for i in range(im_height):
    DigitalNumber1 = []
    for j in range(im_width):
        banddata1DN = im_datas1[i,j]
        DigitalNumber1.append(banddata1DN)
    file = open(r'D:\20200309\shujushouji\gdalzuobiaojisuan\txt\banddata1DN.txt', 'a')
    file.write(str(DigitalNumber1) + '\n')
    file.close()
# data2 = im_redBand.astype(numpy.float)  # numpy
# mar2 = np.ma.masked_array(im_redBand, np.isnan(im_redBand))
# print(mar2)
# print("wwwwwwww")
print("循环1完成")
# banddata2 = im_greenBand.astype(numpy.float)  # numpy
for i in range(im_height):
    DigitalNumber2 = []
    for j in range(im_width):
        banddata2DN = im_datas2[i,j]
        DigitalNumber2.append(banddata2DN)
    file = open(r'D:\20200309\shujushouji\gdalzuobiaojisuan\txt\banddata2DN.txt', 'a')
    file.write(str(DigitalNumber2) + '\n')
    file.close()
print("循环2完成")
for i in range(im_height):
    DigitalNumber3 = []
    for j in range(im_width):
        banddata3DN = im_datas3[i,j]
        DigitalNumber3.append(banddata3DN)
    file = open(r'D:\20200309\shujushouji\gdalzuobiaojisuan\txt\banddata3DN.txt', 'a')
    file.write(str(DigitalNumber3) + '\n')
    file.close()
print("循环3完成")
# 释放内存。如果不释放,在arcgis或envi中打开该图像时显示文件已被占用
del dataset

猜你喜欢

转载自blog.csdn.net/weixin_40625478/article/details/106304954