5 votos

¿Cómo calcular la lista de rasters?

Estoy escribiendo código ArcPy en ArcGIS tratando de calcular una lista de rásteres.

Recibo un mensaje de error que dice:

TypeError: tipo (s) de operando no compatibles para -: 'unicode' y 'unicode'.

Aquí está mi código:

     import arcpy
    from arcpy import env
    import os

    arcpy.env.workspace = "Z:\\comp1\\yitong\\test\\"
    arcpy.env.overwriteOutput = True

    B5 = arcpy.ListRasters("*BAND_05*","")
    B4 = arcpy.ListRasters("*BAND_04*","")

    waterVapor = []

    for rasterB4 in B4:
        for rasterB5 in B5:
            print rasterB4
            print rasterB5
            partName = str(rasterB4[16:30])
            waterVaporOutputName = "waterVapor" + str(partName)
            waterVapor = 0.24+0.503*(rasterB4 - rasterB5)
            waterVapor.save(waterVaporOutputName) 
 

2voto

Trevor Johns Puntos 126

intenta esto...esperemos que usted no tiene que arreglar demasiados errores de sintaxis. (No tengo arcpy)

for rasterB4 in B4:
    for rasterB5 in B5:
        print rasterB4
        print rasterB5
        partName = str(rasterB4[16:30])
        waterVaporOutputName = "waterVapor" + str(partName)

        rasterB4 = arcpy.Raster(rasterB4)
        rasterB4 = arcpy.Raster(rasterB5)

        #i'm assuming both rasters are the same extents/cellsize
        lowerLeft = arcpy.Point(rasterB4.extent.XMin, rasterB4.extent.YMin)
        cellSize = rasterB4.meanCellWidth
        nodata = rasterB4.noDataValue

        numpy_B4 = arcpy.RasterToNumPyArray(rasterB4)
        numpy_B5 = arcpy.RasterToNumPyArray(rasterB5)

        waterVapor = 0.24+0.503*(numpy_B4 - numpy_B5)

        newRaster = arcpy.NumPyArrayToRaster(waterVapor,lowerLeft,cellSize,value_to_nodata=nodata)
        newRaster.save(waterVaporOutputName)

también se puede quitar la línea por encima de esta antena en bucle que lee "waterVapor = []"...no es necesario.

si usted no tiene una licencia para .archivo asc de la escritura, usted puede tratar de rodar su propio. Crear un archivo Raster de una ASCII grid archivo?

quitar este:

newRaster = arcpy.NumPyArrayToRaster(waterVapor,lowerLeft,cellSize,value_to_nodata=nodata)
newRaster.save(waterVaporOutputName)

y poner esto en su lugar (con .asc extensión) (en el mismo guión, por supuesto)

#write out dummy ascii raster file:
out = open('waterVaporOutputName', 'wb+')
out.write('ncols         %i\n' % numpy_B4.shape[1])
out.write('nrows         %i\n' % numpy_B4.shape[0])
out.write('xllcorner     %i\n' % rasterB4.extent.XMin)#dummy or put your own
out.write('yllcorner     %i\n' % rasterB4.extent.YMin)#dummy or put your own
out.write('cellsize      %i\n' % cellSize)
out.write('NODATA_value  %i\n' % nodata)

np.savetxt(out, waterVapor, fmt='%%.%5f')
out.close()

1voto

UnkwnTech Puntos 21942

Sospecho que este error procede de:

waterVaporOutputName = "waterVapor" + str(partName)

que no tiene ArcPy código. Hay numerosas ocurrencias de la misma en Stack Overflow donde creo que va a ser mejor para esta investigación como una de Python en lugar de SIG problema.

Sospecho que se trata de una internacionalización de la cuestión.


En la segunda pensamientos de la línea he indicado anteriormente, creo que sólo sea susceptible de dar un error de:

TypeError: no admitidos operando tipo(s) para: 'str' y 'unicode'.

Así, el comentario de @Aaron bien puede ser mejor para seguir en primera. En el mientras tanto, siempre es útil saber (a través de una edición a su pregunta) ¿qué número de línea de un error como este se produce por lo que podemos señalar que la línea para empezar a mirar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X