定义类
#类(Class) 由3个部分构成:
'''
类的名称:类名
类的属性:指对象的特征(一组数据)
类的方法:允许对象进行操作的方法 (行为/功能)
'''
class people:
def __init__(self, name, age):
self.name = name
self.age = age
def information(self):
print('name is {}'.format(self.name))
print('age is {} '.format(self.age))
在python3.x中所有的类都继承了object
,拥有更多操作方法,无需定义成class people(object):
self
代表类的实例本身.
__init__
的方法在实例化类时将自动执行.
类的实例化
类的实例化即引用定义的类。
someone = people('xiaoming', 10)
查看类的属性
someone.name
'xiaoming'
someone.age
10
调用类中的方法
someone.information()
name is xiaoming
age is 10
自定义遥感影像属性的类
from osgeo import gdal,osr
class Raster:
def __init__(self, nRows, nCols, data, noDataValue=None, geotransform=None, srs=None):
self.nRows = nRows
self.nCols = nCols
self.data = data
self.noDataValue = noDataValue
self.geotrans = geotransform
self.srs = srs
self.dx = geotransform[1]
self.xMin = geotransform[0]
self.xMax = geotransform[0] + nCols * geotransform[1]
self.yMax = geotransform[3]
self.yMin = geotransform[3] + nRows * geotransform[5]
def ReadRaster(rasterFile):
ds = gdal.Open(rasterFile)
band = ds.GetRasterBand(1)
data = band.ReadAsArray()
xsize = band.XSize
ysize = band.YSize
noDataValue = band.GetNoDataValue()
geotrans = ds.GetGeoTransform()
srs = osr.SpatialReference()
srs.ImportFromWkt(ds.GetProjection())
if noDataValue is None:
noDataValue = -9999
return Raster(ysize, xsize, data, noDataValue, geotrans, srs)
可以看出代码中自定义了一个Raster
的类,该类中包含了影像行列号,仿射变换参数等属性。
定义这个类的优势在于可以使代码变得简洁,易懂。
在这里实例化Raster
的方法是在自定义读取数据函数中返回这个类。
raster = ReadRaster('F:\GDAL learning\Landsat8.tif') #实例化Raster类
除了在类中自定义一个函数来print
属性来查看影像属性外,还可以在类Raster中添加__str__
方法查看影像属性。
def __str__(self):
return "影像行数:%s 影像列数:%d" % (self.nRows, self.nCols)
print(raster)
影像行数:8900 影像列数:8563