ArcGIS10.x系列 Python工具箱教程
ArcGIS10.x系列 Python工具箱教程
目录
1.前提
2.需要了解的资料
3.Python工具箱制作教程
4. Python工具箱具体样例代码(DEM流域分析-河网等级矢量化)
1.前提
如果你想自己写Python工具箱,那么假定你已经会ArcPy,如果只是自己用,完全没有必要,直接脚本运行。如果是给其他人用,为了简洁明了,适用这里。Python工具箱10.2无法加密,但是工具箱+Script脚本是可以加密的。10.5以上Python工具箱可加密。
本文只介绍Python工具箱,对于工具箱+Script脚本不是特别推荐!
2.需要了解的资料
Python工具箱需要知道哪些内容?
[1]Python工具箱 代码模板 (可自己新建Python工具箱 编辑查看代码)
[2]Arcpy.Parameter (重要*****)
[3]Python工具箱 输入参数类型(data_type) (重要*****)
[4]在 Python 工具箱中定义工具
[5]定义 Python 工具箱中的参数 (重要*****)
3.Python工具箱制作教程
[1]新建python工具箱
[2]右击 新建的Python工具箱 编辑
[3] 随后txt打开了代码,复制所有代码到py文件中,我这里用的vscode连接arcgis python2.7
如上图所示,Python工具箱模板。需要关注的有上述箭头部分。
[4]待代码写完后,将代码复制到 “编辑” 的Python工具箱,然后另存为,选择编码格式“ANSI”,替换!
----------------------------------------------------------------------------------------------------------
小细节:
①Python工具箱不好调试,print无法输出信息,一般采用arcpy.AddMessage、arcpy.AddError输出信息;
②然后parameters[0].value .valueAsText这些都是arcpy.parameter的属性,查看我提供的Parameter官网介绍即可。
③注意中文格式,设置utf-8,另存ANSI格式。
④着重看给的 资料链接 [2]、[3]、[5] 官网说的很明白(中英文可切换),再结合我的样例代码,就很快理解了!
----------------------------------------------------------------------------------------------------------
4. Python工具箱具体样例代码(DEM流域分析-河网等级矢量化)
# 设置中文环境 对于中文字符串 前面加u 打印时 需要在字符串后加 .decode('utf-8')
import sys
defalutencoding = 'utf-8'
if sys.getdefaultencoding() != defalutencoding:reload(sys)sys.setdefaultencoding(defalutencoding)import os
import arcpy
from arcpy import env
from arcpy.sa import * #arcpy栅格计算的基本计算器,高级复杂的在arcpy.gp中# 定义函数
def check_exists_and_delete(dataset_name):# 前提已经设置了env.workspace, 检测存在即删除if arcpy.Exists(dataset_name):arcpy.Delete_management(dataset_name)print(u'已删除:'+str(dataset_name))returnreturnclass Toolbox(object):def __init__(self):"""Define the toolbox (the name of the toolbox is the name of the.pyt file)."""self.label = "Python工具箱-流域分析"self.alias = "Python工具箱-流域分析"# List of tool classes associated with this toolboxself.tools = [Tool]
class Tool(object):def __init__(self):"""Define the tool (tool name is the name of the class)."""self.label = "流域分析"self.description = "流域分析要求数据在gdb中操作!只需导入DEM,即可完成填洼-流向-流量-河网-河网分级-分级矢量化。依次生成的结果名称为输入DEM名称+_填洼"self.canRunInBackground = Falsedef getParameterInfo(self):"""Define parameter definitions"""param_gdb = arcpy.Parameter(displayName = "请输入工作空间(GDB):",name = "in_workspace",datatype = "DEWorkspace",parameterType = "Required",direction="Input")param_gdb.value = env.workspaceparam_dem = arcpy.Parameter(displayName="请输入或选择DEM图层:",name="in_dem",datatype="GPRasterLayer", # , "DERasterDataset", "GPRasterDataLayer"parameterType="Required",direction="Input",)param_threshold = arcpy.Parameter(displayName="请输入河网分级整型阈值(大于):",name="in_threshold",datatype="GPLong",parameterType="Required",direction="Input",)param_threshold.value = 1000params = [param_gdb, param_dem, param_threshold]return paramsdef isLicensed(self):"""Set whether tool is licensed to execute."""return Truedef updateParameters(self, parameters):"""Modify the values and properties of parameters before internalvalidation is performed. This method is called whenever a parameterhas been changed."""return def updateMessages(self, parameters):"""Modify the messages created by internal validation for each toolparameter. This method is called after internal validation."""returndef execute(self, parameters, messages):arcpy.CheckOutExtension("Spatial") # 必须执行,否则默认不打开??env.workspace = parameters[0].valueAsText# 相关操作在 系统工具箱->Spatial Analyst Tools->水文分析or地图代数# 2.DEM填洼DEM_Name = os.path.basename(parameters[1].valueAsText) # 3-需要修改成自己的DEM名称arcpy.AddMessage(u"正在处理DEM图层:" + DEM_Name)DEM_TianWa_Name = DEM_Name + u"_填洼" # 注意 不能有- 可以是_outFill = Fill(DEM_Name)check_exists_and_delete(DEM_TianWa_Name)outFill.save(DEM_TianWa_Name)print(u"完成填洼".decode('utf-8'))arcpy.AddMessage(u"完成填洼")# 3.DEM流向 根据填洼结果 来计算DEM_LiuXiang_Name = DEM_Name + u"_流向"outFlowDirection = FlowDirection(DEM_TianWa_Name)check_exists_and_delete(DEM_LiuXiang_Name)outFlowDirection.save(DEM_LiuXiang_Name)print(u"完成流向".decode('utf-8'))arcpy.AddMessage(u"完成流向")# 4.DEM流量 根据流向结果 来计算DEM_LiuLiang_Name = DEM_Name + u"_流量"outFlowAccumulation = FlowAccumulation(DEM_LiuXiang_Name)check_exists_and_delete(DEM_LiuLiang_Name)outFlowAccumulation.save(DEM_LiuLiang_Name)print(u"完成流量".decode('utf-8'))arcpy.AddMessage(u"完成流量")# 5.DEM河网 根据流量 来计算 (arcpy脚本不允许使用RasterCalculator)DEM_HeWang_Name = DEM_Name + u"_河网"threshold = parameters[2].value # 4-需要修改成自己的流量阈值raster = DEM_LiuLiang_Nameout_A_Calculator = Con(Raster(raster) > threshold, 1)check_exists_and_delete(DEM_HeWang_Name)out_A_Calculator.save(DEM_HeWang_Name)print(u"完成河网".decode('utf-8'))arcpy.AddMessage(u"完成河网")# 6.DEM河网分级 根据河网 流向结果 来计算DEM_HeWang_FenJi_Name = DEM_Name + u"_河网分级"outStreamOrder = StreamOrder(DEM_HeWang_Name, DEM_LiuXiang_Name, "STRAHLER") # STRAHLER分级方法 更合适check_exists_and_delete(DEM_HeWang_FenJi_Name)outStreamOrder.save(DEM_HeWang_FenJi_Name)print(u"完成河网分级".decode('utf-8'))arcpy.AddMessage(u"完成河网分级")# 6.1 DEM河网分级后栅格结果 矢量化 DEM_HeWang_FenJi_SHP_Name = DEM_Name + u"_河网分级矢量"check_exists_and_delete(DEM_HeWang_FenJi_SHP_Name)StreamToFeature(DEM_HeWang_FenJi_Name, DEM_LiuXiang_Name, DEM_HeWang_FenJi_SHP_Name, "NO_SIMPLIFY")print(u"完成河网分级矢量化".decode('utf-8'))arcpy.AddMessage(u"完成河网分级矢量化")return
相关文章:

ArcGIS10.x系列 Python工具箱教程
ArcGIS10.x系列 Python工具箱教程 目录 1.前提 2.需要了解的资料 3.Python工具箱制作教程 4. Python工具箱具体样例代码(DEM流域分析-河网等级矢量化) 1.前提 如果你想自己写Python工具箱,那么假定你已经会ArcPy,如果只是自己…...

【蓝桥杯】刷题
刷题网站 记录总结刷题过程中遇到的一些问题 1、最大公约数与最小公倍数 a,bmap(int,input().split())sa*bwhile a%b:a,bb,a%bprint(b,s//b)2.迭代法求平方根(题号1021) #include<stdio.h> #include<math.h> int main() {double x11.0,x2;int a;scanf("%d&…...
软件产品登记的材料条件
(1)申请双软认证前应该要获得信息产业部授权的软件检测机构出具的检测证明,这份检测证明可以到软件行业协会申请,然后协会会派专家到公司进行“检测”,检测通过后出具证明,这份证明的申请与软件著作权等无关࿰…...

春节后跟进客户开发信模板?外贸邮件模板?
适合新年的客户开发信模板?年后给客户的邮件怎么写? 在春节这一传统的中国节日结束后,跟进客户对于维持和发展业务至关重要。客户开发信模板是一种有效的工具。蜂邮将介绍一些春节后跟进客户开发信模板的关键技巧,以确保您的业务…...

个人财务管理软件CheckBook Pro mac中文版特点介绍
CheckBook Pro mac是一款Mac平台的个人财务管理软件,主要用于跟踪个人收入、支出和账户余额等信息。 CheckBook Pro mac 软件特点 简单易用:该软件的用户界面非常简洁明了,即使您是初学者也可以轻松上手。 多账户管理:该软件支持…...

rfc4301- IP 安全架构
1. 引言 1.1. 文档内容摘要 本文档规定了符合IPsec标准的系统的基本架构。它描述了如何为IP层的流量提供一组安全服务,同时适用于IPv4 [Pos81a] 和 IPv6 [DH98] 环境。本文档描述了实现IPsec的系统的要求,这些系统的基本元素以及如何将这些元素结合起来…...

【数据结构/C++】线性表_双链表基本操作
#include <iostream> using namespace std; typedef int ElemType; // 3. 双链表 typedef struct DNode {ElemType data;struct DNode *prior, *next; } DNode, *DLinkList; // 初始化带头结点 bool InitDNodeList(DLinkList &L) {L (DNode *)malloc(sizeof(DNode))…...

前端已死?看看我的秋招上岸历程
背景 求职方向:web前端 技术栈:vue2、springboot(学校开过课,简单的学习过) 实习经历:两段,但都是实训类的,说白了就是类似培训,每次面试官问起时我也会坦诚交代&…...

Flink Flink中的合流
一、Flink中的基本合流操作 在实际应用中,我们经常会遇到来源不同的多条流,需要将它们的数据进行联合处理。所以 Flink 中合流的操作会更加普遍,对应的 API 也更加丰富。 二、联合(Union) 最简单的合流操作…...

工业园区重金属废水深度处理工程项目,稳定出水0.1mg/l
随着环保要求不断提高,工业废水处理已成为众多企业的必修课。然而在工业生产中,如何有效处理含有重金属的废水成为了一个关键的挑战。 重金属废水是指含有汞、铅、铜、镉、锌、镍等有毒有害物质的废水,来源于矿山开采、金属冶炼、电镀、印刷线…...

element table滚动条失效
问题描述:给el-table限制高度之后滚动条没了 给看看咋设置的: <el-table:data"tableData"style"width: 100%;"ref"table"max-height"400"sort-change"changeSort">对比了老半天找不出问题,最后…...

代码随想录算法训练营 ---第四十六天
第一题: 简介: 本题的重点在于确定背包容量和物品数量 确定dp数组以及下标的含义 dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。 2.确定递推公式 如果确定dp[j] 是true,且…...

MySQL-02-InnoDB存储引擎
实际的业务系统开发中,使用MySQL数据库,我们使用最多的当然是支持事务并发的InnoDB存储引擎的这种表结构,下面我们介绍下InnoDB存储引擎相关的知识点。 1-Innodb体系架构 InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一…...

Qt路径和Anaconda中QT路径冲突(ubuntu系统)
最近做一个项目需要配置QT库,本项目配置环境如下: Qt version 5 Operating system, version and so on ubuntu 20.04 Description 之前使用过anaconda环境安装过QT5,所以在项目中CMakeLists文件中使用find_package时候,默认使用An…...
vue2.js添加水印
通过canvas生成水印图片 function addWaterMark(str) {let ctx document.createElement("canvas");ctx.width 900;ctx.height 450;ctx.style.display "none";let cans ctx.getContext("2d");cans.rotate((-20 * Math.PI) / 180);cans.font…...

Eureka简单使用做微服务模块之间动态请求
创建一个eureka模块,引入eureka 为启动项加上EnableEurekaServer注解 配置信息 orderService和userService的操作是一样的 这里以orderService为例: 引入eureka客户端 加上 LoadBalanced注解 配置 orderService和userService都配置好了之后 启动 这样我们在http://localhos…...

竞赛选题 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…...

css-tricks网站图例
使用css实现钟表 <template><div><p><small>CSS sin() and cos() does <strong>NOT</strong> work in your browser.</small></p><div class"clock"><div id"app" class"clock-face"…...

Scrapy框架内置管道之图片视频和文件(一篇文章齐全)
1、Scrapy框架初识(点击前往查阅) 2、Scrapy框架持久化存储(点击前往查阅) 3、Scrapy框架内置管道 4、Scrapy框架中间件(点击前往查阅) Scrapy 是一个开源的、基于Python的爬虫框架,它提供了…...

Linux文件与路径
Linux文件与路径 1、文件结构 Windows和Linux文件系统区别 在windows平台下,打开“此电脑”,我们可以看到盘符分区 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形 但是在 Linux 下,我们是看不到这些…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...