Extrair raster pela saída da máscara não se sobrepõe completamente à máscara?

8

Eu tenho uma grade de acumulação de fluxo e um shapefile contendo áreas de captação. Agora eu quero fazer alguns cálculos sobre eles, então preciso extrair dados das células na varredura adjacente a determinadas áreas de captação.

Nesse processo, tento usar Extract by Mask na minha varredura, com um dos polígonos de captação como máscara (em um loop mais tarde, mas agora só preciso trabalhar uma vez).

O problema é que a varredura extraída é deslocada meia célula para a esquerda, comparada à varredura original e ao polígono de mascaramento. Isso está atrapalhando o resto do meu processo, já que tento converter a varredura em pontos e cruzar com outros polígonos posteriormente. E, a menos que a varredura extraída se sobreponha à original, não receberei o polígono correto.

A varredura original e os polígonos estão alinhados perfeitamente, pois os polígonos são criados a partir da varredura. Tentei verificar se, de alguma forma, houve algum tipo de mudança nas projeções, mas não consigo encontrar nenhuma. Também tentei em novos documentos do ArcMap, reiniciando tudo várias vezes (isso resolve o problema surpreendentemente com frequência) e executando as ferramentas no prompt do python em vez de chamar meu script. Eu até tentei executar a ferramenta Extrair por máscara na caixa de ferramentas, com o mesmo resultado.

Este é o código (muito simples) que eu uso no prompt python no 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')

Eu tenho alguns arquivos de amostra aqui

Eu uso o Windows 7, ArcInfo 10.0 e Python 2.6.


Eu tentei o Extract by Polygon agora, e isso parece funcionar bem. É apenas minha máquina com defeito no ExtractByMask? A única desvantagem é que estou tendo problemas para usar essa função no meu script, pois não consigo descobrir como obter as coordenadas do meu polígono de mascaramento (cobrindo apenas 9 células, com um ponto no centro, se isso ajudar).


Agora consegui trabalhar com Extrair por polígono usando o código abaixo (modificado nas páginas de suporte da Esri ). Infelizmente, isso não resolve o meu problema. Parece que a saída (desta ferramenta, bem como Extrair pela máscara) às vezes é deslocada meia célula para a esquerda e às vezes não. Principalmente, mas ocasionalmente ele realmente está localizado onde deveria estar.

Então agora estou realmente confuso. Isso está acontecendo comigo no meu computador? Se alguém experimentou o mesmo, por favor, escreva um comentário para que eu saiba que não estou sozinho :) Para mim, esse problema parece ser um problema muito grande para ser um bug, o que me deixa com um problema. que eu me criei ao longo do caminho.

Alguma idéia de como evitá-lo?

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
Martin
fonte

Respostas:

1

É possível converter a imagem inteira em pontos e depois selecionar os pontos com base nas interescções entre as camadas de polígonos e pontos ?. Sei que isso não fornece nenhum insight para resultados estranhos que você está obtendo, mas pode ser uma "solução alternativa" útil

dango
fonte
Sim, eu poderia fazer isso. O único problema é que a varredura é um pouco grande demais, por isso levará algum tempo para calcular. Eu poderia tentar isso de qualquer maneira, em vez de não fazê-lo funcionar. Obrigado pela sua contribuição!
Martin
Não tenho certeza se isso ajudará, mas você pode importar a simbologia; talvez seja possível definir a simbologia para uma e importá-la para todo o resto. Você já deu uma olhada na janela Análise da imagem, ela possui muitos recursos que podem ajudar. Considere também criar um conjunto de dados em mosaico se as imagens forem grandes. Com um mosaico, você pode adicionar funções que podem melhorar a exibição visual. espero que ajude :)
dango
Eu não trabalhei muito com a análise de imagens antes, mas agora posso ter que tentar. Eu vou voltar relatório se isso pode me em qualquer lugar :)
Martin
1

Nos ambientes rasterizados, defina o snap raster como igual ao raster de entrada (aquele que está sendo extraído). Isso evitará qualquer mudança.

James C
fonte