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))
        return
    return

class 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 toolbox
        self.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 = False

    def getParameterInfo(self):
        """Define parameter definitions"""
        param_gdb = arcpy.Parameter(
            displayName = "请输入工作空间(GDB):",
            name = "in_workspace",
            datatype = "DEWorkspace",
            parameterType = "Required",
            direction="Input"
        )
        param_gdb.value = env.workspace

        param_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 = 1000

        params = [param_gdb, param_dem, param_threshold]
        return params

    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True

    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return 

    def updateMessages(self, parameters):
        
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return

    def 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_Name
        out_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/194492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32-Web-Server编程- JS 基础5

ESP32-Web-Server编程- JS 基础5 概述 JS 编程内容颇多,我们提供一些简单的示例,先玩再学,边玩边学。 示例1-演示通过 JS 进行温度转换 资源链接 对应示例的 code 链接 (点击直达代码仓库) 示例2-增加网页弹窗 演…

Maven回顾

Maven 下载(前提要有jdk) Maven 下载地址:Maven – Download Apache Maven 设置 Maven 环境变量 添加环境变量 MAVEN_HOME: 右键 "计算机",选择 "属性",之后点击 "高级系统设置…

【libGDX】加载G3DJ模型

1 前言 libGDX 提供了自己的 3D 格式模型文件,称为 G3D,包含 g3dj(Json 格式)和 g3db(Binary 格式)文件,官方介绍见 → importing-blender-models-in-libgdx。 对于 fbx 文件,libGDX…

day65

今日回顾内容 web应用 HTTP协议 web应用 一、什么是web应用程序 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 对于传统的应用软件来说,…

zi定义指令

hello,我是小索奇,精心制作的Vue系列持续发放,涵盖大量的经验和示例,如果对您有用,可以点赞收藏哈~ 自定义指令 自定义指令就是自己定义的指令,是对 DOM 元素进行底层操作封装 ,程序化地控制 DOM&#xff…

前端实现埋点

前端实现埋点 如何去了解用户呢?最直接有效的方式就是了解用户的行为,了解用户在网站中做了什么,呆了多久。而如何去实现这一操作,这就涉及到我们前端的埋点了。 埋点方式 什么是埋点? 所谓埋点是数据采集领域&…

leetcode:414. 第三大的数

一、题目 函数原型:int thirdMax(int* nums, int numsSize) 二、思路 将数组降序排序。 如果数组元素个数小于3,直接返回第一个元素; 如果数组元素个数大于等于3,且不同元素个数小于3,直接返回第一个元素; …

AIGC系列之:Variational Auto Encoder-VAE模块

目录 1.VAE 概述 2.概率分布 3.损失函数 4.重参数技巧 5.维度对 VAE 的影响 6.损失函数对VAE的影响 7.总结 VAE原始https://arxiv.org/abs/1312.6114 论文解读:https://mp.weixin.qq.com/MzI1MjQ2O 1.VAE 概述 变分自动编码器(Variational auto…

STM32CubeIDE(CUBE-MX hal库)----串口通信

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、CUBE-MX可视化配置二、发送数据和接收数据1.HAL库串口的阻塞模式和非阻塞模式2.HAL库串口阻塞模式数据发送函数3.HAL库串口阻塞模式数据接收函数4.HAL库串口…

Pygame直线绘制

文章目录 lines光线反射 pygame.draw中有4个绘制直线的函数,列表如下 一条线段多条线段正常linelines抗锯齿aalineaalines 一条和多条线段的输入参数如下 line(surface, color, start_pos, end_pos, width1)lines(surface, color, closed, points, width1) line…

搭建Appium工具环境

1、安装Java Development Kit(JDK) 前往Oracle官网下载JDK。 在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到最新版本的JDK。根据操作系统选择适合的版本,并根据指示下载安装程序。 安装JDK。运行下载的安…

如何将mobi、awz3、epub格式转化为pdf

偶然之间有个需求就是网上下载了一些书籍的格式没法打开看,或者是想把kindle的书籍转换成pdf 那么经过一番折腾找到了两个可以用的工具站分享给大家,有需要的可是尝试下,小编这边测试了可以用,就是下载的时候慢的一匹。。。 第一…

计算机网络——数据链路层-数据链路层概述(介绍、三个重要问题、使用广播信道的数据链路层、其他问题)

目录 介绍 三个重要问题 封装成帧 差错检测 可靠传输 使用广播信道的数据链路层 其他问题 介绍 本篇对数据链路层进行概述,我们首先来看看数据链路层在网络体系结构中的地位: 主机H1给主机H2发送数据,中间要经过三个路由器和电话网、…

Xshell连接VMware虚拟机中的CentOS

Xshell连接VMware虚拟机中的CentOShttps://www.cnblogs.com/niuben/p/13157291.html 步骤: 1. 检查Linux虚拟机的网络连接模式,确保它是NAT模式。(由于只在本机进行连接,所以没有选择桥接模式。当然,桥接模式的配置会…

Ubuntu 22.03 LTS 安装deepin-terminal 实现 终端 分屏

deepin-terminal 安装 源里面自带了这个软件,可以直接装 sudo apt install deepin-terminal 启动 按下Win键,输入deep即可快速检索出图标,点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0…

33 - MySQL调优之索引:索引的失效与优化

不知道你是否跟我有过同样的经历,那就是作为一个开发工程师,经常被 DBA 叫过去“批评”,而最常见的就是申请创建新的索引或发现慢 SQL 日志了。 记得之前有一次迭代一个业务模块的开发,涉及到了一个新的查询业务,需要…

考试周刊杂志考试周刊杂志社考试周刊编辑部2023年第46期目录

教育教学研究 丰富作业形式 拓展课堂教学——“双减”下初中英语优化作业设计探析 王慧; 1-5 博学慎思明辨 撬动思维杠杆——论“思辨性阅读与表达”学习任务群范式构建 丁亚琴; 6-10《考试周刊》投稿邮箱:cn7kantougao163.com(注明投稿“《考试周刊》”) 崔…

Leetcode—35.搜索插入位置【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—35.搜索插入位置 实现代码 int lower_bound(int* arr, int numsSize, int tar) {int left 0, right numsSize;int mid;// 左闭右开[left, right)while(left < right) {mid left (right - left) / 2;if(arr[mid] &…

企业网络中的身份安全

随着近年来数字化转型的快速发展&#xff0c;企业使用的数字身份数量急剧增长。身份不再仅仅局限于用户。它们现在扩展到设备、应用程序、机器人、第三方供应商和组织中员工以外的其他实体。即使在用户之间&#xff0c;也存在不同类型的身份&#xff0c;例如属于IT管理员、远程…

vue3+ts 指令拖拽案例

<template><div class"box" v-move><div class"header"></div><div>内容</div></div> </template><script setup lang"ts"> import { ref, Directive, DirectiveBinding } from "vu…