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
Nos ambientes rasterizados, defina o snap raster como igual ao raster de entrada (aquele que está sendo extraído). Isso evitará qualquer mudança.
fonte