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

news2024/10/1 15:22:18

前言

采用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://www.coloradmin.cn/o/686909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

618种草观察丨益生菌「蓝」在一起,酸奶「地域控」?

2023年的“618”,食饮行业中,种草战线格外热闹,品牌花式“开屏”,吸引消费者。 数说故事发布「SMI社媒心智品牌榜」,本期持续关注健康食品,也新增了今夏网红酸奶行业,一起看看这两大赛道中&…

使用power rail连接secondary pg pin的方法

过往文章: secondary pg pin的作用与连接 之前写到过secondary pg pin的种类与几种连接方式,其中使用最多的方法是NDR rule + route_group的方式,这样工作量少,不容易出错,但也有弊端,那就是一…

ctfshow web入门 内网渗透篇

web859 首先ssh连接上之后传个fscan上去,扫描下内网靶机 发现.5和.6的比较可疑。 一个存在web服务,一个存在445端口。 先看下445端口,靶机给我们提供了msf,所以直接用msf打下Samba msfconsole use exploit/linux/samba/is_kno…

数字贸易下转口贸易企业如何高效管理?

什么是转口贸易?是指企业在国内购买进口货物,经过加工、组装、包装等方式改变其性质,再出口到海外市场的贸易活动。这种贸易方式对于促进国际贸易和提高企业竞争力都有着非常重要的作用,但同时也存在着一些风险和难点,…

如何向领导建议数字化转型应着手数据治理?_光点科技

在当今数字化时代,企业的数字化转型已经成为一个迫切的任务。然而,数字化转型不仅仅涉及技术的引入,更需要在数据治理方面进行全面的改进。 一、数据治理是数字化转型的基石。 数据是企业最重要的资产之一,通过对数据的管理和利用…

电气工程师日常工作常遇到的41种接线方法(二)

021 缘耐压测试仪线路 这种绝缘耐压测试仪可测灯具,将待测灯具与A、B两接线柱接好,按下按钮SB1,中间继电器KA1得电并自锁;然后将调压器VT(1∶10,输出0~250V)调至需测的电压值,如需调到1500V则将VT调到电压…

第四章.­ ­ Feasibility of Learning

第四章. Feasibility of Learning 本章主要介绍机器学习的可行性,讨论问题是否可以使用机器学习来解决。 4.1 Learning is Impossible 1.示例描述 1).九宫格样本类型的预测描述: 图中有6个样本,分成两个类别(1和-1&#xff09…

pytorch搭建VGG网络

pytorch搭建VGG网络 CNN 感受野VGG-16搭建VGG网络model.pytrain.pypredict.py VGG 网络的创新点:通过堆叠多个小卷积核来替代大尺度卷积核,可以减少训练参数,同时能保证相同的感受野。 例如,可以通过堆叠两个 33 的卷积核替代 5x5…

SpringSecurity6.0+Redis+JWT基于token认证功能开发(可用于实际生产项目,保证API安全)

基于token认证功能开发 引子:最近做项目时遇到了一个特殊的需求,需要写共享接口把本系统的一些业务数据共享给各地市的自建系统,为了体现公司的专业性以及考虑到程序的扩展性(通过各地市的行政区划代码做限制)&#xf…

Java框架之spring AOP 和 IOC

写在前面 本文一起看下spring aop 和 IOC相关的内容。 1:spring bean核心原理 1.1:spring bean的生命周期 spring bean生命周期,参考下图: 我们来一步步的看下。 1 其中1构造函数就是执行类的构造函数完成对象的创建&#x…

第八十四天学习记录:Linux基础:初识Linux

流行的Linux发行版: 任何人都可以封装Linux,目前市面上有非常多的Linux发行版,常用的知名的如下: VMware WorkStations安装 安装完成后,要通过下图方式查看网络适配器是否正常配置: 配置成功&#xff1a…

软件需求分析文档怎么写?

什么是软件需求规范文档 (SRS)? 软件需求规范 (SRS) 文档列出了未来项目的需求、期望、设计和标准。其中包括规定项目目标的高级业务需求、最终用户要求和需求以及产品在技术方面的功能。简而言之,SRS 提供…

Vue-Element-Admin项目学习笔记(8)配置表单校验规则

前情回顾: vue-element-admin项目学习笔记(1)安装、配置、启动项目 vue-element-admin项目学习笔记(2)main.js 文件分析 vue-element-admin项目学习笔记(3)路由分析一:静态路由 vue-element-adm…

软考:中级软件设计师:校验码,汉明码纠错,信息位L和校验位r的关系

软考:中级软件设计师:校验码,汉明码纠错 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是…

Linux通过crontab定时执行脚本任务

Linux通过crontab定时执行脚本任务 前言1. 创建写入脚本2. 设置执行权限3. 添加定时任务定时任务语法格式每分钟写入一条信息到指定文件 4. 查看日志文件5. 定时执行脚本的作用和用途 前言 在Linux中可以使用crontab来定时执行脚本。crontab是一个用于管理定时任务的工具&…

我这样回答多线程并发,面试官直接惊叹!

目录 前言: 1.单线程执行 2、多线程执行 3.守护线程 4.阻塞线程 前言: 多线程并发是一种处理任务的方式,它可以在同一时间内执行多个任务。多线程并发通常应用于需要同时处理多个任务或同时运行多个程序的情况下。 1.单线程执行 Pyth…

便携式水污染检测设备可以分析多少项污水指标

便携式水污染检测设备可以分析多少项污水指标(以下只是一部分) 水质检测仪可检测范围 1、饮用水检测:生活用水(自来水)、(瓶、桶装)矿泉水、天然矿泉水等; 2、工业用水检测&#xf…

人机融合智能的现状与展望

本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在学习摘录和笔记专…

【开源库剖析】Shadow v2.3.0 源码解析

作者:Stan_Z 一、框架介绍 Shadow是19年腾讯开源的自研Android插件化框架,经过线上亿级用户量检验。 Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。 优点: 1)复用独立安装app源…

Python可视化库之Matplotlib详解及使用方法

Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。本文主要推荐一个学习使用Matplotlib的步骤。 基本前提 如果你除了本文之外没有任何基础,建议用以下几个步骤学习如何使用matplotlib: 学习基本的matplotlib术语,尤其是…