5 votos

Focal estadísticas para calcular los puntos de silla de DEM

Tengo un dilema con Focal de Estadísticas y archivos de kernel. Estoy tratando de identificar puntos de silla en los DEMs. Estoy tratando de volver a escribir esto (gracias whuber) en una secuencia de comandos de python para la 10.1. He utilizado focal de estadísticas y archivos del kernel para barrios irregulares en el pasado sin problemas. Ahora, por alguna razón, yo continuamente sale el siguiente error:

ERROR 010308: no Válido Irregular barrio de la máscara

Mi script es la siguiente:

# Import system modules
import arcpy, os, codecs
from arcpy import env
from arcpy.sa import *

arcpy.CheckOutExtension("spatial")

# Obtain parameters
dem = arcpy.GetParameterAsText(0)
outFolder = arcpy.GetParameterAsText(1)

arcpy.env.workspace = outFolder
DEM = Raster(dem)
kernel = os.path.join(outFolder, "kernel.txt")

# Compute the neighborhood sums involved in estimating the second partial deriviatives.

arcpy.AddMessage('Attempting FocalStat 1...')
n1 = NbrRectangle(3, 3, "CELL")
g1 = FocalStatistics(DEM, n1, "SUM", "NODATA")

arcpy.AddMessage('Attempting FocalStat 2...')
n2 = NbrRectangle(1 , 3, "CELL")
gX = FocalStatistics(DEM, n2, "SUM", "NODATA")

arcpy.AddMessage('Attempting FocalStat 3...')
n3 = NbrRectangle(3, 1, "CELL")
gY = FocalStatistics(DEM, n3, "SUM", "NODATA")

arcpy.AddMessage('Attempting FocalStat 4...')
text = codecs.open(kernel, "w", encoding='ascii')
text.write("3 3\n1 0 0\n0 0 0\n0 0 1")
text.close()
n4 = NbrIrregular(kernel)
gM = FocalStatistics(DEM, n4, "SUM", "NODATA")

arcpy.AddMessage('Attempting FocalStat 5...')
text = codecs.open(kernel, "w", encoding='ascii')
text.write("3 3\n0 0 1\n0 0 0\n1 0 0")
text.close()
n5 = NbrIrregular(kernel)
gP = FocalStatistics(DEM, n5, "SUM", "NODATA")

# Delete kernel txt
os.remove(kernel)

# Compute the determinant of the Jacobian.
# It is multiplied by 10^6 to bring it into a range that SA can display.
arcpy.AddMessage('Calculating determinate of the Jacobian...')
xCell = arcpy.GetRasterProperties_management(DEM, "CELLSIZEX").getOutput(0)
g = (g1 - (gX * 3)) * (g1 - (gY * 3)) / 9.0 - (((gP - gM) / 4.0)**2) / (int(xCell)**4 / 1000000)
g.save("JacobDet.img")

He intentado usar el centro de estadísticas de la herramienta en el arco con un solo archivo txt con los mismos resultados. Alguien ha tenido este problema antes? Hay algo mal con mi código/archivo del kernel? Gracias de antemano por cualquier comentario.

0voto

Leon Timmermans Puntos 23230

Al parecer, en un sistema Windows \r\n debe ser utilizado, en lugar de \n en un sistema Linux. Trabajó para mí.

Consulte aquí la (ligeramente) más detalles

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