Trovare il punto centrale di un raster in ArcGIS?


10

Se ho, per esempio, un file raster rettangolare e georeferenziato caricato in un documento ArcMap 10 (.tiff w / tfw associato), come posso trovare facilmente il suo punto centrale e memorizzarlo in un livello vettoriale punti?

Inoltre, se ho più raster di questo tipo nel mio documento ArcMap, come posso applicare il processo a tutti loro?

Sfortunatamente, non ho esperienza con Python. Pertanto una soluzione programmatica è OK, ma avrò bisogno di istruzioni specifiche su come caricare uno script esistente in ArcGIS 10 ed eseguirlo sui raster nelle domande. (A proposito, i raster sono tutti nei loro livelli separati).


1
Sono accettabili soluzioni programmatiche?
Kirk Kuykendall,

Vorrei accettare una soluzione programmatica, ma non ho esperienza con Python. Avrò bisogno di istruzioni su come caricare lo script in ArcGIS ed eseguirlo sui raster in questione.
hpy,

Risposte:


7

Sebbene la domanda originale fosse per 10.0, ho aggiornato il codice seguente per 10.3.1.

Copia incollalo nella finestra di Python in arcmap per creare la funzione 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)

Quindi, puoi utilizzare la finestra di Python per creare la tua classe di funzionalità chiamando

RasterCenter("<reference to raster">)

Quindi, ad esempio, se hai un raster chiamato DEM, chiami RasterCenter ("dem") nella finestra di Python e aggiungerà un layer chiamato "dem_center" con un singolo punto al centro del raster. Il livello è archiviato in memoria, quindi se si desidera mantenerlo, esportarlo.

Per fare un passo avanti, è possibile salvare lo script in un file .py e posizionare il file .py nel percorso di ricerca di python. ad es. salvarlo come RasterCenter.py e posizionarlo in PYTHONPATH (normalmente lo spot è C: \ Python26 \ ArcGIS10.0 \ Lib)

Quindi potresti fare:

import RasterCenter
RasterCenter.RasterCenter("<reference to raster">)

6

Molto facile, semplice ottenere le proprietà dei raster e calcolare il punto centrale da 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 il solito errore di controllo ecc ....

Quindi aggiungi alla tabella dei punti con un updateCursor


2
Bel approccio. Penso che tu voglia migliorare le tue formule per le coordinate centrali: sono i mezzi degli endpoint, non le loro differenze.
whuber

Sembra quello che sto cercando, ma poiché non ho esperienza di scripting in ArcGIS, puoi dirmi come caricare ed eseguire uno script del genere? (Ho aggiornato la domanda originale per riflettere questo ...) grazie!
hpy,

1
Puoi anche accedere ai valori usando le proprietà dell'estensione raster, ad esempio raster = arcpy.Raster ("raster"), quindi centreX = raster.extent.XMax - raster.extent.XMin
blord-castillo

1
@Whuber Posso vedere l'errore ora, stavo pensando a qualcos'altro che stavo facendo! Grazie Whuber
Peloso,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.