在ArcGIS中查找栅格的中心点?


10

例如,如果我在ArcMap 10文档中加载了矩形且具有地理参考的栅格文件(.tiff w /关联的tfw),如何轻松找到其中心点并将其存储在点矢量层中?

另外,如果我的ArcMap文档中有多个这样的栅格,该如何将过程应用于所有栅格?

不幸的是,我有零Python经验。因此,以编程方式解决方案是可以的,但是我将需要有关如何将现有脚本加载到ArcGIS 10中以及如何在有问题的栅格上运行它的特定说明。(顺便说一句,栅格都在各自的图层中)。


1
程序解决方案是否可以接受?
Kirk Kuykendall

我想接受程序化的解决方案,但对Python的使用经验为零。我将需要有关如何将脚本加载到ArcGIS中以及如何在有问题的栅格上运行脚本的说明。
hpy 2011年

Answers:


7

虽然最初的问题是10.0,但是我将下面的代码更新为10.3.1。

将其复制粘贴到arcmap中的python窗口中以创建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的栅格,则可以在python窗口中调用RasterCenter(“ dem”),它将添加一个名为“ dem_center”的图层,并且在栅格中心处有一个点。该图层存储在内存中,因此,如果要保留它,则将其导出。

要更进一步,您可以将脚本保存到.py文件,并将.py文件放置在python的搜索路径中。例如,将其另存为RasterCenter.py并将其放置在PYTHONPATH中(通常此位置为C:\ Python26 \ ArcGIS10.0 \ Lib)

然后,您可以执行以下操作:

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

6

非常容易,简单地获取栅格属性并从最小,最大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
好的方法。我认为您想改善中心坐标的公式:它们是端点的方法,而不是它们的差异。
ub

这看起来像我要找的东西,但是由于我没有在ArcGIS中编写脚本的经验,因此您能否告诉我如何加载和运行这样的脚本?(我已经更新了原始问题以反映这一点...)谢谢!
hpy 2011年

1
您还可以使用栅格范围属性访问值,例如raster = arcpy.Raster(“ raster”),然后centerX = raster.extent.XMax-raster.extent.XMin
blord-castillo

1
@Whuber现在我可以看到错误,我在想我正在做的其他事情!感谢Whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.