ArcGIS'te bir raster merkez noktası mı arıyorsunuz?


10

Örneğin, bir ArcMap 10 belgesine (.tiff w / related tfw) yüklenmiş dikdörtgen ve coğrafi referanslı bir raster dosyası varsa, merkez noktasını kolayca nasıl bulabilir ve bir nokta vektör katmanında nasıl saklayabilirim?

Ayrıca, ArcMap dokümanımda bu tür birden fazla rasterim varsa, süreci hepsine nasıl uygularım?

Ne yazık ki, sıfır Python deneyimim var. Bu nedenle programlı bir çözüm yolunda, ancak mevcut bir komut dosyasını ArcGIS 10'a nasıl yükleyeceğime ve sorularda rasterlerde çalıştırmaya ilişkin özel talimatlara ihtiyacım olacak. (BTW, rasterlerin hepsi ayrı katmanlarındadır).


1
Programlı çözümler kabul edilebilir mi?
Kirk Kuykendall

Programlı bir çözümü kabul etmek istiyorum, ancak sıfır python deneyimim var. Komut dosyasının ArcGIS'e nasıl yükleneceği ve söz konusu rasterlerde nasıl çalıştırılacağı konusunda talimatlara ihtiyacım olacak.
hpy

Yanıtlar:


7

Orijinal soru 10.0 olmasına rağmen, aşağıdaki kodu 10.3.1 için güncelledim.

RasterCenter işlevini oluşturmak için bunu arcmap'teki python penceresine kopyalayın:

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)

Ardından, arayarak özellik sınıfınızı oluşturmak için python penceresini kullanabilirsiniz.

RasterCenter("<reference to raster">)

Örneğin, DEM adında bir rasteriniz varsa, python penceresinde RasterCenter'ı ("dem") çağırırsınız ve raster merkezinde tek bir nokta bulunan "dem_center" adlı bir katman ekler. Katman bellekte saklanır, bu nedenle saklamak istiyorsanız dışa aktarın.

Bir adım daha ileri gitmek için, komut dosyasını bir .py dosyasına kaydedebilir ve .py dosyasını python arama yoluna yerleştirebilirsiniz. örneğin RasterCenter.py olarak kaydedin ve PYTHONPATH içine yerleştirin (normalde bunun yeri C: \ Python26 \ ArcGIS10.0 \ Lib'dir)

Sonra şunları yapabilirsiniz:

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

6

Çok kolay, basit rasters özelliklerini alın ve min, max x ve y'den merkez noktasını çalışın

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

Ve her zamanki hata kontrolü vb ....

Ardından bir updateCursor ile nokta tablonuza ekleyin


2
Güzel yaklaşım. Merkez koordinatlar için formüllerinizi geliştirmek istediğinizi düşünüyorum: bunlar fark noktalarının değil, uç noktaların aracı.
whuber

Bu aradığım şey gibi görünüyor, ancak ArcGIS'te komut dosyası oluşturma deneyimim olmadığından bana böyle bir komut dosyasını nasıl yükleyip çalıştıracağımı söyleyebilir misiniz? (Bunu yansıtmak için orijinal soruyu güncelledim ...) teşekkürler!
hpy

1
Değerlere, raster = arcpy.Raster ("raster"), ardından centreX = raster.extent.XMax - raster.extent.XMin
blord-castillo 28:11

1
@ Hata Şimdi hatayı görebiliyorum, yaptığım başka bir şey düşünüyordum! Teşekkürler Whuber
Tüylü
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.