Найти центральную точку растра в ArcGIS?


10

Если у меня есть, скажем, прямоугольный растровый файл с географической привязкой, загруженный в документ ArcMap 10 (.tiff с ассоциированным tfw), как мне легко найти его центральную точку и сохранить эту точку в векторном слое точек?

Кроме того, если у меня есть несколько таких растров в моем документе ArcMap, как мне применить процесс ко всем из них?

К сожалению, у меня нулевой опыт работы с Python. Поэтому с программным решением все в порядке, но мне понадобятся конкретные инструкции о том, как загрузить существующий скрипт в ArcGIS 10 и запустить его для растров в вопросах. (Кстати, растры все в отдельных слоях).


1
Приемлемы ли программные решения?
Кирк Кайкендалл

Я хотел бы принять программное решение, но у меня нет опыта работы с Python. Мне понадобятся инструкции о том, как загрузить скрипт в ArcGIS и запустить его для рассматриваемых растров.
hpy

Ответы:


7

Хотя оригинальный вопрос был для 10.0, я обновил код ниже для 10.3.1.

Скопируйте и вставьте его в окно python в arcmap, чтобы создать функцию 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)

Затем вы можете использовать окно Python для создания вашего класса объектов, вызвав

RasterCenter("<reference to raster">)

Так, например, если у вас есть растр с именем DEM, вы вызываете RasterCenter ("dem") в окне python, и он добавляет слой с именем "dem_center" с одной точкой в ​​центре растра. Слой хранится в памяти, поэтому, если вы хотите сохранить его, экспортируйте его.

Чтобы продвинуться еще дальше, вы можете сохранить сценарий в файле .py и поместить файл .py в путь поиска для python. например, сохраните его как RasterCenter.py и поместите в PYTHONPATH (обычно это место C: \ Python26 \ ArcGIS10.0 \ Lib)

Тогда вы могли бы сделать:

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

6

Очень легко, просто получить свойства растров и определить центральную точку из min, max x и 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

И обычная проверка ошибок и т.д ....

Затем добавьте в свою таблицу баллов updateCursor


2
Хороший подход. Я думаю, что вы хотите улучшить свои формулы для координат центра: они являются средством конечных точек, а не их различий.
whuber

Это похоже на то, что я ищу, но, поскольку у меня нет опыта работы со скриптами в ArcGIS, вы можете сказать мне, как загрузить и запустить такой скрипт? (Я обновил оригинальный вопрос, чтобы отразить это ...) спасибо!
HPY

1
Вы также можете получить доступ к значениям, используя свойства экстента растра, например, raster = arcpy.Raster ("raster"), затем centreX = raster.extent.XMax - raster.extent.XMin
blord-castillo

1
@ Вот теперь я вижу ошибку, я думал о чем-то еще, что я делал! Спасибо Whuber
Волосатые
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.