¿La salida de ráster por máscara no se superpone completamente a la máscara?

8

Tengo una cuadrícula de acumulación de flujo y un archivo de formas que contiene áreas de captación. Ahora quiero hacer algunos cálculos sobre ellos, así que necesito extraer datos de las celdas en el ráster adyacente a ciertas áreas de captación.

En ese proceso, trato de usar Extract by Mask en mi ráster, con uno de los polígonos de captación como máscara (en un bucle más adelante, pero ahora solo necesito que funcione una vez).

El problema es que el ráster extraído se desplaza media celda hacia la izquierda, en comparación con el ráster original y el polígono de enmascaramiento. Esto está arruinando el resto de mi proceso, ya que trato de convertir el ráster en puntos e intersectarme con otros polígonos más adelante. Y a menos que el ráster extraído se superponga con el original, no obtendré el polígono correcto.

El ráster original y los polígonos se alinean perfectamente, ya que los polígonos se crean a partir del ráster. He tratado de verificar si de alguna manera ha habido algún tipo de cambio en las proyecciones, pero no puedo encontrar ninguno. También he intentado en nuevos documentos de ArcMap, reiniciando todo varias veces (esto resuelve el problema sorprendentemente a menudo) y ejecutando las herramientas desde el indicador de Python en lugar de llamar a mi script. Incluso he intentado ejecutar la herramienta Extraer por máscara de Toolbox, con el mismo resultado.

Este es el código (muy simple) que uso en el indicador de Python en ArcMap:

inpgs = r'C:\GIS\Catchm_ex.shp'
flowacc = r'C:\GIS\flowacc'
arcpy.MakeFeatureLayer_management(inpgs, 'currentMask', '"HydroID" = 269634')
outRaster = arcpy.sa.ExtractByMask(flowacc, 'currentMask')

Tengo algunos archivos de muestra aquí

Yo uso Windows 7, ArcInfo 10.0 y Python 2.6.


He probado Extract by Polygon ahora, y parece funcionar bien. ¿Es solo mi máquina que no funciona correctamente en ExtractByMask? El único inconveniente es que tengo problemas para usar esa función en mi script, ya que no puedo resolver cómo obtener las coordenadas de mi polígono de enmascaramiento (solo cubre 9 celdas, con un punto en el centro si eso ayuda).


Ahora lo tengo trabajando con Extract by polygon usando el código a continuación (modificado de las páginas de soporte de Esri ). Desafortunadamente, esto no resuelve mi problema. Parece que la salida (de esta herramienta, así como Extraer por máscara) a veces se desplaza media celda a la izquierda, y a veces no. Principalmente lo es, pero ocasionalmente se encuentra donde debería estar.

Así que ahora estoy realmente confundido. ¿Me está sucediendo esto en mi computadora? Si alguien más ha experimentado lo mismo, escriba un comentario para que sepa que no estoy solo :) Para mí, este problema parece ser un problema demasiado grande para ser un error, lo que me deja con esto como un problema que me he creado en el camino.

¿Alguna idea sobre cómo evitarlo?

def ReadPoints(infc):
    try:
        import arcpy, numpy
    except ImportError:
        sys.exit('Unable to import arcpy')

    # Identify the geometry field
    desc = arcpy.Describe(infc)
    shapefieldname = desc.ShapeFieldName
    points = []

    # Create search cursor
    rows = arcpy.SearchCursor(infc)

    # Enter for loop for each feature/row
    for row in rows:
        # Create the geometry object
        feat = row.getValue(shapefieldname)
        partnum = 0

        # Step through each part of the feature
        for part in feat:
            # Step through each vertex in the feature
            for pnt in feat.getPart(partnum):
                if pnt:
                    points.append([int(pnt.X), int(pnt.Y)])

    pt = numpy.array(points)
    pts = []
    for i in range(len(pt)):
        t = pt[i]
        pts.append(arcpy.Point(t[0],t[1]))
    return pts
Martín
fuente

Respuestas:

1

¿Es posible convertir toda la imagen en puntos y luego seleccionar los puntos en función de las interacciones entre el polígono y las capas de puntos? Sé que esto no da ninguna idea de los resultados extraños que está obteniendo, pero podría ser una "solución" útil.

dango
fuente
Sí, podría hacer eso. El único problema es que el ráster es demasiado grande, por lo que tomará bastante tiempo calcularlo. De todos modos, podría intentarlo, en lugar de no tenerlo funcionando en absoluto. ¡Gracias por tu contribución!
Martin
No estoy seguro de si esto ayudará, pero puede importar la simbología, por lo que tal vez podría establecer la simbología para una y luego importarla al resto. ¿Has echado un vistazo a la ventana de análisis de imágenes? Tiene muchas características que pueden ayudarte. También considere crear un dataset de mosaico si las imágenes son grandes. Con un mosaico puede agregar funciones que podrían mejorar la visualización. espero que ayude :)
dango
No he trabajado mucho con el análisis de imágenes antes, pero ahora podría tener que intentarlo. Informaré si esto puede llevarme a algún lado :)
Martin
1

En sus entornos ráster, configure el ráster de ajuste para que sea el mismo que el ráster de entrada (el que se extrae). Esto evitará cualquier cambio.

James C
fuente