栅格对象的交互

需要 Spatial Analyst 许可。

Raster 对象将引用栅格数据集,而如果用于地图显示中,则还可能与内容列表中的栅格图层关联在一起。 大多数情况下,栅格数据集、Raster 对象和栅格图层之间的关系保持不变,但想要有效地使用 Spatial Analyst 地图代数,了解这些关系至关重要。

创建 Raster 对象的方法有以下两种:

  • 地图代数表达式的输出是 Raster 对象。 Raster 对象最主要的行为之一是,将栅格对象创建为地图代数表达式的主要输出时,栅格对象将引用临时栅格。
    >>> outRas = Slope("elevation")
    >>> print outRas(isTemporary)
    True
  • 可将某栅格数据集转换为 Raster 对象。 如果将永久性栅格数据集转换为 Raster 对象,该数据集仍属于永久性数据集。
    >>> outRas = Raster("C:/Data/elevation")
    >>> print outRas(isTemporary)
    False

在 Python 窗口中执行操作时,地图代数表达式的结果会添加到内容显示中,且名称与 Raster 对象名称相同。 将数据集转换为栅格时,不会向内容列表中添加任何图层。

保存临时栅格

如果与 Raster 对象关联的数据属于临时数据,则在 ArcGIS 会话结束时(该对象超出了作用范围或者脚本结束)会将该数据删除。 也就是说,除非将数据保存,否则即会被删除。 如果保存了栅格,则图层和对象中均会反映出更新后的栅格属性,这包括数据集的 namepathcatalogPath,isTemporary 状态。 保存临时数据集的方法有多种。

  • 要通过关联的 Raster 对象保存临时栅格数据集,可以使用栅格对象的 save 方法。
  • 要保留与地图图层关联的临时栅格数据集,请保存“地图工程”。 如果保存了工程,栅格数据集将会继续留在磁盘中当前它所在的位置,并会自动生成名称。

重用栅格对象

对象名称必须唯一。 如果重复使用某个对象名称,则原始对象会被覆盖。 在下例中,将 outRas 作为 Aspect 表达式的输出重新使用时,Slope 的输出将被替换。

outRas = Slope("inRas1") 
outRas = Aspect("inRas2")

图层将添加到内容中,并且图层名称与 Raster 对象名称相同。 如果重复使用某个 Raster 对象名称,则将向内容窗口中添加多个使用同一名称的图层。 在前面的示例中,outRas 被添加了两次。 第一次是执行 Slope 表达式时。 此首个 outRas 图层将引用 Slope 的结果,并会一直用在 Python 窗口中,直到执行 Aspect 表达式为止。 执行 Aspect 时,将会添加名为 outRas 的第二个图层,覆盖之前的对象,并开始引用 Aspect 生成的数据集和图层。

提示:

如果引用某数据集的 Raster 对象被覆盖,则可通过图层或数据集名称,将该栅格数据集重新转换为 Raster 对象。

删除栅格对象

如果删除了 Raster 对象,关联的数据集(及可能存在的图层)将发生何种变化取决于数据的状态。 如果数据属于永久性数据,则删除该 Raster 对象不会对关联的数据集或图层产生任何影响。 如果数据集属于临时性数据集,则删除 Raster 对象的影响将取决于是否存在同样引用该栅格数据集的图层。 如果不存在与该临时数据集关联的任何图层,则删除对象时将删除该数据集。 如果存在与该临时数据集关联的图层,则删除对象时将保留该临时数据。

警告:
删除 Raster 对象时,并不会删除图层所引用的临时数据;但除非保存了临时数据,否则在应用程序关闭时,无论现有图层或对象如何,均会删除所有临时数据。

以下示例说明如何删除名为 outRasRaster 对象。

outRas = Slope("C:/Data/elevation") 
del outRas

将某栅格对象指定给新的栅格对象

Raster 对象指定给新的 Raster 对象时并不会复制关联的数据集或图层。 将 Raster 对象指定给新的 Raster 对象时会再创建一个引用原始对象的对象。 在下例中,outRas1outRas2 均引用同一个栅格数据集:

outRas1 = Slope("elevation")  

# Assigns Raster object to a new Raster object and save the raster dataset
outRas2 = outRas1
outRas2.save("C:/output/outslope")

在本例中,outRas1outRas2 均引用同一个数据集。 因此,保存 outRas2 时,两个对象中均会反映出已保存数据集 outslope 的永久性状态、新位置以及新名称。 如果 outRas1 是内容列表中的一个图层,并且通过图层属性或通过保存地图文档的方式保存了数据,那么两个对象(outRas1outRas2)均会引用该已保存的数据集。

相关主题