利用arcpy解决python代码运行过程中产生的中间数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28418387/article/details/53709802
    我先说说我之前遇到的问题。
    熟悉ArcGIS的人知道,arcmap中的ModelBuilder中可以构建地理处理模型,模型中需要用到的处理工具直接在Toolbox中拖拽进去就行。构建的模型形成一个工作流,前一个工具的输出数据可以是后一个工具的输入数据,不用再手动添加。产生的中间数据会存储在临时工作空间,这个临时工作空间可以手动设置。但是这样的工作流在python脚本中却不容易实现。为什么这样说,举个例子:
    比如我现在要写一个python脚本,利用arcpy实现用城市分布的面数据对道路缓冲区数据进行裁剪的批量处理。首先,要利用arcpy.Buffer_analysis("Roads",r"D:\data\buffer_road.shp","1000 feet")函数形成缓冲区,并将缓冲区数据保存在data文件夹下,然后使用裁剪工具把城市中的道路缓冲区裁剪出来,用到arcpy.Clip_analysis("buffer_road.shp", "City", r"D:\data\buffer_road_clip.shp "),最终我是想得到buffer_road_clip.shp数据,中间的buffer_road.shp数据并不想保留。找了好久终于在arcgis的帮助文档里面找到了一个漂亮的函数arcpy.CreateScrathName()
    附上arcgis帮助文档中关于CreateScrathName()函数的一段示例代码:
import arcpy

# Set workspace
#
arcpy.env.workspace = "C:/Data/Municipal.gdb"

# Create a scratch name for the Buffer tool output.
#   The scratch name created will be include 'temp0.shp',
#   If temp0.shp already exists, the number will be incremented
#   until the name is unique in the workspace.
#
scratch_name = arcpy.CreateScratchName("temp",
                                       data_type="Shapefile",
                                       workspace=arcpy.env.scratchFolder)

# Execute Buffer tool, using scratch name for output
#
arcpy.Buffer_analysis("Roads", scratch_name, "1000 feet")

# Execute Clip tool, using scratch name for input
#
arcpy.Clip_analysis(scratch_name, "CityBoundary", "CityRoads")

# Delete scratch dataset
arcpy.Delete_management(scratch_name)
使用 CreateScrathName()函数创建并返回一个临时路径名称并赋值给scratch_name,这个变量就是后面用Buffer_analysis()生成的缓冲区的输出位置和名称,之后所有对于该缓冲区的操作都可以用该名称来代替。
从arcgis的帮助文档来看看CreateScrathName()函数的参数:

这四个参数都是可以省略的,第一个参数prefix就是前缀,给scratch_name添加一个前缀,第二个参数suffix是后缀,第三个data_type定义数据类型,第四个参数workspace定义scratch_name输出所在位置。
比如定义CreateScrathName("polygon","","Shapefile",workspace = r"D:\data"),就会在D盘的data文件夹下生成一个polygon0.shp的文件,第二次输出如果存在了polygon0.shp文件则会自动生成polygon1.shp,以此类推。
所以如果缓冲区数据是中间数据后面可以删除的话,就可以使用arcpy.Delete_management(scratch_name)来删除这个中间数据

猜你喜欢

转载自blog.csdn.net/qq_28418387/article/details/53709802