arcpy制作脚本工具相关(制作并添加脚本工具、脚本工具消息提示、arcpy工具自动获取数据)

news/2024/7/7 18:26:48

前言

采用arcpy制作arcgis的脚本工具,记录如下。

一、脚本工具的制作

制作脚本工具分为两步:

1、先编写对应功能的python脚步
2、将对应功能的脚本修改为,能自己手动选择输入输出数据的脚本
3、将修改完的脚本添加到工具箱

1、编写代码

我这个实例是用来提取特定高程的等高线,源代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/6/25
"""
import time

"""
1、先写一段脚本
2、对脚本进行改写
"""
import os
import arcpy

print '程序开始:' + str(time.ctime())
# 设置工作空间
arcpy.env.workspace = r'E:\arcpy_study\Arcpy实例教程(数据)_小景空间_原始\6Arcpy脚本工具的制作-提取特殊等高线'

# 输入要素
inFeatures = 'coutour.shp'

# 添加一个字段,用来标记高程是否可以整除10
filedName = "Mark"  # 字段名称
filedPrecision = 2  # 字段长度
filedAlias = "整除50标记"  # 字段别名  能整除50标记为1,不能整除50标记为0

# 列出所有字段
filedObject = arcpy.ListFields(inFeatures)
# 得到所有字段名,如果mark字段存在的话,就删除该字段
filedNameList = []
for filed in filedObject:
    # filed.required:字段为必填项时为ture
    if not filed.required:
        filedNameList.append(filed.name)
print filedNameList
if filedName in filedNameList:
    arcpy.DeleteField_management(inFeatures, filedName)
    print '删除已有的mark字段'

# 添加字段
arcpy.AddField_management(inFeatures, filedName, "LONG", filedPrecision, "", "", filedAlias, "NULLABLE")

filed1 = "Elev"
filed2 = "Mark"

# 更新查询(为每一条记录做标记)
cursor = arcpy.UpdateCursor(inFeatures)
for row in cursor:
    if((int)(row.getValue(filed1))%50 == 0):
        row.setValue(filed2, 1)
    else:
        row.setValue(filed2, 0)
    cursor.updateRow(row)
print '程序结束:' + str(time.ctime())




  在原有字段的基础上,增加一个Mark字段,用来标识这条等高线是否能被50整除,若能被50整除,则标识为1,否则为0.

在这个例子中,有一个输入要素,标识要操作的要素名称。

2、修改脚本

  在源代码中,我将要修改的要素名称写死了,实际情况肯定不行,所有我要修改为自己可以手动选择要素,工作空间也不需要了。修改后的代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/6/26
"""
import time
import os
import arcpy

print '程序开始:' + str(time.ctime())
# 设置工作空间
# arcpy.env.workspace = r'E:\arcpy_study\Arcpy实例教程(数据)_小景空间_原始\6Arcpy脚本工具的制作-提取特殊等高线'

# 输入要素
# inFeatures = 'coutour.shp'
# 自己选择输入要素
inFeatures = arcpy.GetParameterAsText(0)  # 获取第一个输入要素的文本

# 添加一个字段,用来标记高程是否可以整除10
filedName = "Mark"  # 字段名称
filedPrecision = 2  # 字段长度
filedAlias = "整除50标记"  # 字段别名  能整除50标记为1,不能整除50标记为0

# 列出所有字段
filedObject = arcpy.ListFields(inFeatures)
# 得到所有字段名,如果mark字段存在的话,就删除该字段
filedNameList = []
for filed in filedObject:
    # filed.required:字段为必填项时为ture
    if not filed.required:
        filedNameList.append(filed.name)
print filedNameList
if filedName in filedNameList:
    arcpy.DeleteField_management(inFeatures, filedName)
    print '删除已有的mark字段'

# 添加字段
arcpy.AddField_management(inFeatures, filedName, "LONG", filedPrecision, "", "", filedAlias, "NULLABLE")

filed1 = "Elev"
filed2 = "Mark"

# 更新查询(为每一条记录做标记)
cursor = arcpy.UpdateCursor(inFeatures)
for row in cursor:
    if ((int)(row.getValue(filed1)) % 50 == 0):
        row.setValue(filed2, 1)
    else:
        row.setValue(filed2, 0)
    cursor.updateRow(row)
print '程序结束:' + str(time.ctime())

因为我们只有一个输入参数,所以获取第一个输入参数的名字,取下标为0即可。

3、将脚本添加到工具箱

  在文件夹目录中新建一个工具箱,接着新建脚本,将脚本名称、标签、描述填上,样式表留空,勾选存储相对路径名,勾选始终在前台运行,点击下一页,如图:
在这里插入图片描述

选择编写好的脚本工具,点击下一页,如图:
在这里插入图片描述

  我们需要再这里设置输入数据和输出数据,因为我们有一个输入要素,所以要设置一个输入数据。填写显示名称和选择输入数据的数据类型,我这里的数据类型为要素类,参数属性可以不用管,和我一样就好,点击完成。如图:
在这里插入图片描述

4、注意事项

  若运行时报错SyntaxError:EOL while scanning string literal,是因为代码中包含中文引起的,解决方法依照大佬博客:
https://zhuanlan.zhihu.com/p/371214194?utm_id=0

https://www.cnblogs.com/wodewei/p/14476061.html

两种方法都行。

二、脚本工具消息提示

脚本工具消息提示主要有三种。

1、arcpy.AddMessage(str)一般消息

运行效果如下:
在这里插入图片描述

2、arcpy.AddWarning(str)警告消息

运行效果如下:
在这里插入图片描述

3、arcpy.AddError(str)错误消息

运行效果如下:
在这里插入图片描述

这里要注意的是,只要程序中运行到了arcpy.AddError(str),那么会自动在最后添加脚本执行失败的提示,无论你的代码是对是错。

三、arcpy工具自动获取数据

我们使用系统的分割工具的时候,点击输入要素栏的倒三角形,会自动加载当前图层中的所有要素类,方便我们选择,如图:
在这里插入图片描述

在这里插入图片描述

我们现在要做的就是这种效果。

1、自动获取图层

这一步很简单,我们只需在设置输入参数的时候,把要素类改为要素图层即可
在这里插入图片描述

这样就能自动获取图层上的要素类了。若输入的是栅格数据的话,则要选择栅格图层,等等…不一一列举了。
在这里插入图片描述

就算已经添加好了脚本工具也不用担心,直接右击脚本工具,依次点击属性->参数,去修改即可。

2、自动获取图层中的字段

这个也比较简单,我们新建一个输入数据,选择数据类型为字段,并且获取自这里我们选择第一个输入数据,这样的话,当我们选择了第一个输入数据之后,第二个数据框这里就会显示第一个输入数据的字段供我们选择:
在这里插入图片描述

效果如下:
在这里插入图片描述

四、


http://lihuaxi.xjx100.cn/news/1278292.html

相关文章

在Microsoft Excel中如何使用ISEVEN函数

Excel 中的 ISEVEN 函数在值为偶数时返回 TRUE,在值为奇数时返回 FALSE。如果值不是数字,ISEVEN 将返回 #VALUE 错误。 ISEVEN 函数测试偶数。ISEVEN 接受一个参数 value,该参数应该是数值或单元格引用。只计算值的整数部分,截断十进制值。 使用ISEVEN函数 ISEVEN 函数返回…

【哈士奇赠书活动 - 28期】- 〖产品经理就业实战〗

文章目录 ⭐️ 赠书 - 《产品经理就业实战》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品经理就业实战》 ⭐️ 内容简介 本书专门为想要入行从事产品经理相关工作的零基础就业人员而编写,涵盖了在产品准备阶段、产品开发阶…

kubenetes无法启动,检查后发现api-server证书失效

先用docker ps -a 查看最近docker容器是否正常运行,发现api-server的容器刚刚退出。 然后查看他的日志: docker logs [api-server-id] 显示错误 docker:x509:certificate has expired or is not yet valid 使用kubeadm安装k8s时&#xff…

一篇文章告诉你什么是—Selenium的元素等待

前言 今天我们来说说selenium的元素等待,废话不多说直接开始吧。 1、元素等待介绍 WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程。为了保证脚本运行的稳定性,需要脚本中添加等待时间。 2、为什么要设置元素等待 在元…

Reactor的概念

一、Reactor的概念 ​ Reactor模式是一种事件驱动模式,由一个或多个并发输入源(input),一个消息分发处理器(Initiation Dispatcher),以及每个消息对应的处理器(Request Handler)构成…

前端实现页面自动播放音频方法

前提 需要页面自动播放一段报警声音,将audio标签的autoplay属性设置为true,发现自动播放失败,并出现如下报错: Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the document first.…

数据中心供配电监控系统解决方案介绍 安科瑞 许敏

摘 要:供配电系统始终是数据中心比较重要的内容,在供配电系统能够得到平稳安全的运行的时候,才能够促使数据中心的相关设备具有比较可靠的动力源泉。在新型数据中心不断发展的过程中,其功率密度也相对比较大,对供电的要…

平面设计转UI设计需要注意什么?

平面设计转UI设计需要注意什么?随着互联网的发展,如今用户已经不单单只是一个简单的浏览和搜索行为,它已演变成了一个互动交流的平台、工具和资源。这个全新的交互模式被称为“UI”,而UI不仅仅是一个简单的UR界面,它是…