Encontrando o ponto central de uma varredura no ArcGIS?

10

Se eu tenho, digamos, um arquivo raster retangular e georreferenciado carregado em um documento do ArcMap 10 (.tiff com o tfw associado), como encontro facilmente seu ponto central e armazeno esse ponto em uma camada vetorial de pontos?

Além disso, se eu tiver vários rasters no documento do ArcMap, como aplico o processo a todos eles?

Infelizmente, tenho zero experiência em Python. Portanto, uma solução programática é boa, mas precisarei de instruções específicas sobre como carregar um script existente no ArcGIS 10 e executá-lo nos rasters nas perguntas. (BTW, os rasters estão todos em suas camadas separadas).

hpy
fonte
1
As soluções programáticas são aceitáveis?
Kirk Kuykendall
Gostaria de aceitar uma solução programática, mas não tenho experiência em python. Vou precisar de instruções sobre como carregar o script no ArcGIS e executá-lo nos rasters em questão.
hpy 27/09/11

Respostas:

7

Embora a pergunta original fosse para 10.0, atualizei o código abaixo para 10.3.1.

Copie e cole isso na janela python no arcmap para criar a função RasterCenter:

import arcpy, os
def RasterCenter(raster):
    #raster: string reference to raster
    raster = arcpy.Raster(raster)
    fcname = "{}_center".format(os.path.basename(str(raster)))
    x = raster.extent.XMin + (raster.extent.XMax - raster.extent.XMin)/2
    y = raster.extent.YMin + (raster.extent.YMax - raster.extent.YMin)/2
    featureclass = arcpy.CreateFeatureclass_management("in_memory", fcname, "POINT",spatial_reference = raster.spatialReference)
    with arcpy.da.InsertCursor(featureclass, ['SHAPE@XY']) as cursor:
        cursor.insertRow(((x, y),))
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    arcpy.MakeFeatureLayer_management(featureclass, fcname)
    layer = arcpy.mapping.Layer(fcname)
    arcpy.mapping.AddLayer(df, layer)

Em seguida, você pode usar a janela python para criar sua classe de recurso chamando

RasterCenter("<reference to raster">)

Portanto, por exemplo, se você tiver uma varredura chamada DEM, chame o RasterCenter ("dem") na janela python e ela adicionará uma camada denominada "dem_center" com um único ponto no centro da varredura. A camada é armazenada na memória; portanto, se você deseja mantê-la, exporte-a.

Para ir um pouco mais longe, você pode salvar o script em um arquivo .py e colocar o arquivo .py no caminho de pesquisa do python. por exemplo, salve-o como RasterCenter.py e coloque-o em PYTHONPATH (normalmente o local para isso é C: \ Python26 \ ArcGIS10.0 \ Lib)

Então você poderia fazer:

import RasterCenter
RasterCenter.RasterCenter("<reference to raster">)
blord-castillo
fonte
6

Muito fácil, simples, obtenha as propriedades dos rasters e calcule o ponto central de min, max x e y

MinX = arcpy.GetRasterProperties_management("raster", "LEFT")
MinY = arcpy.GetRasterProperties_management("raster", "BOTTOM")
MaxX = arcpy.GetRasterProperties_management("raster", "RIGHT")
MaxY = arcpy.GetRasterProperties_management("raster", "TOP")

centreX = (MaxX + MinX) / 2
centreY = (MaxY + MinY) / 2

E a verificação de erro usual etc ....

Em seguida, adicione à sua tabela de pontos com um updateCursor

Peludo
fonte
2
Boa abordagem. Eu acho que você deseja melhorar suas fórmulas para as coordenadas centrais: elas são os meios dos pontos finais, não suas diferenças.
whuber
Parece o que estou procurando, mas como não tenho experiência com scripts no ArcGIS, você pode me dizer como carregar e executar esse script? (Atualizei a pergunta original para refletir isso ...) obrigado!
hpy
1
Também pode acessar os valores usando as propriedades raster de extensão, por exemplo de varredura = arcpy.Raster ( "raster"), em seguida, Centrex = raster.extent.XMax - raster.extent.XMin
blord-Castillo
1
@ Whuber Agora vejo o erro, estava pensando em outra coisa que estava fazendo! Obrigado Whuber
Cabeludo