在读取面文件位置栅格数据时,出现Access window out of range in RasterIO()的问题

我想读取shp位置的遥感影像的各波段数值时,出现Access window out of range in RasterIO(),我想知道应该在哪里修改才能解决
inraster是输入的栅格, inshp是输入的shp

def createClassifier(inraster, inshp, field: str = "Id", treenum: int = 100):
    rasterspatial = gdal.Open(inraster)
    spatial2 = osr.SpatialReference()
    spatial2.ImportFromWkt(rasterspatial.GetProjectionRef())
    shpspatial = ogr.Open(inshp)
    layer = shpspatial.GetLayer(0)
    spatial1 = layer.GetSpatialRef()
 
    ct = osr.CreateCoordinateTransformation(spatial1, spatial2)
    oFeature = layer.GetNextFeature()
    # 下面开始遍历图层中的要素
    geom = oFeature.GetGeometryRef()
    if geom.GetGeometryType() == ogr.wkbPoint:
        return createClassifierByPoint(inraster, inshp)
    k = geom.GetGeometryType()
    if geom.GetGeometryType() != ogr.wkbPolygon:
        print("样本必须为单部件多边形")
        return False
    trainX = list()
    trainY = list()
    print("读取样本")
    while oFeature is not None:
        geom = oFeature.GetGeometryRef()
        # print(geom.GetGeometryName())
        # print(geom.GetGeometryCount())
        # print(geom.GetPointCount())
        wkt = geom.ExportToWkt()
        points = WKTToPoints(wkt)
        polygonPoints = []
        value = oFeature.GetField(field)
        for point in points:
            pC = ct.TransformPoint(point.X, point.Y, 0)
            polygonPoints.append(Point(pC[0], pC[1]))
            arr, width, height, BandsCount, leftX, upY = GetSubRaster(inraster, polygonPoints)

**函数运行到这里,转到另一个函数**

def GetSubRaster(inraster, polygonPoints: list):
    polygonPoints.append(polygonPoints[0])  # 面多边形坐标封闭
    print("当前多边形节点数量:" + str(len(polygonPoints)))
    minX = 10000000000000
    maxX = -minX
    minY = 100000000000000000
    maxY = -minY
 
    for point in polygonPoints:
        if point.X < minX: minX = point.X
        if point.X > maxX: maxX = point.X
        if point.Y < minY: minY = point.Y
        if point.Y > maxY: maxY = point.Y
    leftX = minX
    upY = maxY
    rightX = maxX
    bottomY = minY
 
    rds = gdal.Open(inraster)
 
    transform = (rds.GetGeoTransform())
    lX = transform[0]  # 左上角点
    lY = transform[3]
    rX = transform[1]  # 分辨率
    rY = transform[5]
 
    wpos = int((leftX - lX) / rX)
    hpos = int((upY - lY) / rY)
 
    width = int((rightX - leftX) / rX)
    height = int((bottomY - upY) / rY)
    BandsCount = rds.RasterCount
    arr = rds.ReadAsArray(wpos, hpos, width, height)
    fixX = list()
 
    nodatavalue = rds.GetRasterBand(1).GetNoDataValue()
    for i in range(height):
        if height > 200:
            print(f"多边形裁剪进度:{round(((i + 1) / height) * 100, 4)}%")
 
        Y = upY + i * rY + .00001
        pointsindex = list()
        for k in range(len(polygonPoints) - 1):
            point1 = polygonPoints[k]
            point2 = polygonPoints[k + 1]
            if (point1.Y >= Y and point2.Y <= Y) or (point1.Y <= Y and point2.Y >= Y):
                pointsindex.append(k)
        for j in range(width):
            count = 0
            for m in (pointsindex):
                point1 = polygonPoints[m]
                point2 = polygonPoints[m + 1]
                X = leftX + j * rX + .00001
                if point1.X == point2.X:
                    intersectX = point1.X
                    if intersectX > X: count += 1
                else:
                    k = (point2.Y - point1.Y) / (point2.X - point1.X)
                    if k == 0:
                        if X < point1.X or X < point2.X:
                            count += 1
                    else:
                        intersectX = (Y - point1.Y) / k + point1.X
                        if intersectX > X: count += 1
 
            if count % 2 == 0:
                if BandsCount > 1:
                    for bc in range(BandsCount):
                    arr[bc][i][j] = (nodatavalue)
                else:
                    arr[i][j] = -1
 
    return arr, width, height, BandsCount, leftX, upY

出现的问题
ERROR 5: 1.tif: Access window out of range in RasterIO(). Requested (-6552644,-6552482) of size 65x76 on raster of 7434x6520.
TypeError: 'NoneType' object is not subscriptable

这个错误是因为在读取栅格数据的窗口超出了栅格图像的范围,造成的原因可能是图像的左上角坐标和右下角坐标超出了栅格图像的范围。可以检查代码中读取栅格数据的窗口的左上角坐标和右下角坐标是否正确,是否在栅格图像范围内。如果是由于栅格图像的范围过大导致的,可以使用裁剪工具对图像进行裁剪,使它的范围更小。