分享

如何找到GIS工具运行结束后的所有参数、信息、输出结果以及Python

 GIS荟 2022-07-15 发布于四川

前言:小小的结果里,隐藏着不少的秘密:摊牌了,我不装了

我刚刚运行的工具输出结果怎么找不到?

重复运行工具,反复输入参数很烦躁怎么办?

如何通过 Python 查看每个工具的结果信息?

……

其实不管是 QGIS 还是 ArcGIS 桌面软件,都有一个结果模块,姑且叫模块吧,里面存储着已经运行结束或者正在运行的工具的信息、参数以及结果。

当然这个部分的朋友应该知道,毕竟是很基础的东西,但除了基础的东西外,还向里面进一步挖掘出一些实用功能,以及使用 Python 来调用、控制结果。

1.ArcMap

有的同学使用完工具后,输出结果乱放,可能过了一天,不,可能就只是重新打开了一个工程文件(.mxd),就找不到结果数据存放到哪里了,或者几个数据名称非常相近,难以区分。

基本操作

  • 这个时候打开之前保存的工程文件;

  • 上方菜单栏中打开地理处理选项卡,最下面有结果

  • 点击打开结果窗口;

在结果窗口中,工具运行结果根据时间顺序排列,可以直观的找到最近运行的工具、运行成功或者运行失败(红×)的工具情况。

每一个运行结果都可以打开,你可以在里面找到工具当时运行时的所有输入参数以及输出结果和消息,双击一个运行结果可以直接以一样的参数打开工具,然后直接运行。

最常用的当属于常看工具运行后的结果存放路径或者以相同的参数重新打开该工具。

但除此之外,结果模块还有一些其他值得使用的功能。

2.进阶操作和 Python 调用结果

2.1导出 Python 代码片段

将工具运行输出成Python代码,鼠标右键菜单中复制为 Python 代码片段

复制出来的代码,包含所有参数:

arcpy.gp.HillShade_sa("E:/Document/BaiduNetdiskWorkspace/1.Blog/2.MapMake/3剑门关/1栅格和地图文档/srtmv3_1_n32e105Projected.tif", "C:/Users/Administrator/Documents/ArcGIS/Default.gdb/HillSha_tif1", "315", "45", "NO_SHADOWS", "3")

2.2打包成 GPK

  • 将工具打包成地理处理包(GPK),地理处理包可以十分便利地储存一个或多个工具、脚本或者模型,包括这些工具所使用的数据、处理结果到一个压缩文件  (.gpk)  中。

2.3发布GP服务

将工具或者模型发布成在线公共或者内部服务。

不管是 ArcGIS 自带的几百个工具箱还是个人使用模型构建器或者脚本编写的工具,想要发布成服务的话都需要先运行一次进行检验,运行成功后即表示工具没有问题,然后就可以发布了。

2.4使用 Python 调用结果模块

我们知道,ArcGIS 对于 Python 用户非常友好,老早就支持并开发了相应的 Python 库:ArcPy。

这个结果模块在 ArcPy 中无疑也有对应的类(对象)——Result

2.4.1Result

每一个工具在运行完成后,可以返回一个 result 对象,这个对象(类)、含有多个属性、方法。

简单举个例子

我们调用了一个工具(镶嵌到栅格),那么它会返回一个 Result 对象,我们使用字符串 result 来指向这个 Result 对象。

result = arcpy.MosaicToNewRaster_management(
                                new_raster, new_raster_path,
                                new_raster_name,
                                pixel_type="16_BIT_UNSIGNED",
                                number_of_bands=1)

从这个对象里面我们可以获得工具运行时的参数以及输出的消息,还有输出成果。

比如输出 ID 信息、运行状态、消息数、消息内容、返回消息的严重程度、输出内容、输出工具结果。

print("-------------------------------------")
print(result.resultID)
print(result.status)
print(result.messageCount)
print(result.getInput(0))
print(result.getMessage(0))
print(result.getOutput(0))
print("-------------------------------------")

关于更多信息可以查看官方文档.https://desktop./zh-cn/arcmap/10.3/analyze/arcpy-classes/result.htm

2.4.2简单应用场景

多输出结果的工具

部分工具可能一次运行会生成多个输出结果,比如渔网工具,可以生成一个渔网加一个标注点图层,或者是其他人或者自己编写的工具。

这种情况下,使用名称去指向多个输出结果比较麻烦,特别是名称你不知道的时候。

这个时候我们只要获得了工具运行后的对象即可,Result.getOutput(0) 指向第一个数据的结果,Result.getOutput(1)  指向第二个输出的结果,我们不用关心输出图层叫什么名称,非常便捷好用。

Result  对象的优点是可以保留工具执行的相关信息,包括消息、参数和输出。即使在运行了多个其他工具后仍可保留这些结果。

监控

在一些复杂的业务场景下,我们需要根据某一个工具是否运行成功、或者失败来做下一步的判断。

成功了可能会输出一个数据,我们可以一直循环遍历数据库,一旦发现有输出就判断成功进入下一步,或者其他方法。

所以为啥不用 ArcPy 提供的功能呢?

在  Result 对象中就有状态属性,可以直接查询工具目前的状态,包括运行中、完成、失败在内共10种状态。

result = arcpy.BufferPoints_server(in_featureset, "500 feet")
# Check the status of the result object every 0.2 seconds
#    until it has a value of 4 (succeeded) or greater
while result.status < 4:
    time.sleep(0.2)
    
# do next

……

还有更多的操作,这是一个类,你也可以自己创建,甚至写一个子类……

关于更多信息可以查看官方文档.https://desktop./zh-cn/arcmap/10.3/analyze/arcpy-classes/result.htm

3.补充 ArcGIS Pro、QGIS

补充一下在 ArcGIS Pro 以及 QGIS 中找到并打开结果模块。另外ArcGIS Pro 中的 ArcPy 也有 result 对象,用法都一样。

ArcGIS Pro

ArcGIS Pro 当然不会缺少该功能,只是由于整体界面的重新设计有些许变动。在分析选项卡下,其中的历史即对应 ArcMap 的结果模块。

QGIS

在工具箱窗口的上方,橙色框选部分,点击即可打开历史结果记录窗口。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章