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


10

Якщо у мене, скажімо, прямокутний і геореференційний растровий файл, завантажений у документ ArcMap 10 (.tiff w / пов’язаний tfw), як я легко знаходжу його центральну точку і зберігаю цю точку в шарі векторних точок?

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

На жаль, у мене немає нульового досвіду Python. Тому програмне рішення нормально, але мені знадобляться конкретні інструкції щодо завантаження наявного сценарію в ArcGIS 10 та запуску його на растрах у питаннях. (До речі, всі растри знаходяться в окремих шарах).


1
Чи прийнятні програмні рішення?
Кірк Куйкендалл

Я хотів би прийняти програмне рішення, але маю нульовий досвід пітона. Мені знадобляться інструкції, як завантажити скрипт в 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

І звичайна перевірка помилок тощо.

Потім додайте до таблиці точок з оновленням Курсор


2
Гарний підхід. Я думаю, ви хочете вдосконалити свої формули для центральних координат: вони є засобами кінцевих точок, а не їх відмінностями.
whuber

Це виглядає як те, що я шукаю, але оскільки у мене немає досвіду створення сценаріїв в ArcGIS, ви можете мені сказати, як завантажити та запустити такий сценарій? (Я оновив оригінальне запитання, щоб відобразити це ...) дякую!
hpy

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

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