ArcGIS10.x系列 Python工具箱教程

2023-11-28 09:30

本文主要是介绍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工具箱教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429465

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详