栅格对象的交互

需要 Spatial Analyst 许可。

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

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

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

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

保存临时栅格

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

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

重复使用栅格对象

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

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

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

提示:

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

删除栅格对象

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

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

以下示例说明如何删除名为 outRas栅格对象。

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

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

栅格对象指定给新的栅格对象时并不会复制关联的数据集或图层。将栅格对象指定给新的栅格对象只会创建引用原始对象的又一个对象。在下例中,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)均会引用该已保存的数据集。

相关主题