让ArcMap变得更加强大,用python执行地理处理以及编写自定义脚本工具箱
文章目录
- 一、用python执行地理处理工具
- 1.1 例:乘以0.0001
- 1.2 例:裁剪栅格
- 1.3 哪里查看调用某工具的代码?
- 二、用python批量执行地理处理工具
- 2.1 必需的python语法知识
- for循环语句
- 缩进的使用
- 注释的使用
- 2.2 一个批处理栅格的代码模板
- 三、创建自定义脚本工具箱
- 3.1 自定义工具箱添加脚本工具
- 3.2 python工具箱的创建
- 3.3 中文乱码问题、pycharm调用arcpy
- 推荐阅读
一、用python执行地理处理工具
ArcMap内置了python2的环境,我们可以在ArcMap中通过python脚本来运行地理处理工具

1.1 例:乘以0.0001

import arcpy
arcpy.gp.Times_sa(r"xxx.tif", 0.0001, r"xxx.tif")
inraster = r"S:\tut\0206\data\2010M1NDVI_int16.tif"
factor = 0.0001
outraster = r"S:\tut\0206\data\2010M1_NDVI_v2.tif"
arcpy.gp.Times_sa(inraster, factor, outraster)
1.2 例:裁剪栅格

import arcpy
inraster = r"S:\tut\0203\year NDVI\2010.tif"
mask = r"S:\tut\0204\subzone.shp"
outraster = r"S:\tut\0203\year NDVI\clip_2010.tif"
arcpy.Clip_management(inraster, "#", outraster, mask, "#", "ClippingGeometry")
1.3 哪里查看调用某工具的代码?
- 右键某工具查看帮助文档

- 模型构筑器中导出代码(*推荐)
将待执行的地理处理工具拖入模型构筑器中,设置好地理处理工具的相关参数后,在模型菜单后导出至python脚本,如下图所示

二、用python批量执行地理处理工具
python基本语法 + arcpy调用地理处理工具 = 批处理代码
2.1 必需的python语法知识
for循环语句
- 依次打印数字1-5
nums = [1,2,3,4,5] # nums = list(range(1,6)
for num in nums:print(num)
- 打印当前文件夹中所有扩展名为.tif的文件名
import os # 导入os库
in_folder = r"xxx" # 输入:文件夹的路径
for i in os.listdir(in_folder): # 遍历文件夹中的所有文件名if i.endswith(".tif"): # 如果文件名以tif结尾print(i) # 打印
- 打印当前文件夹中所有扩展名为.tif的绝对路径
import os # 导入os库
in_folder = r"xxx" # 输入:文件夹的路径for filename in os.listdir(in_folder):if filename.endswith(".tif"):print(os.path.join(in_folder, filename))
缩进的使用
与其他编程语言不同(代码缩进仅出于可读性的考虑),python中的缩进十分重要,若缩进使用错误,会报语法错误。
- 例:判断整型变量num和20的大小关系
num = 25
if num >= 20:print('这个数字大于等于'+ str(num)+'.')
else num < 20:print('这个数字小于' + str(num) + '.')
注释的使用
C是用 //,而python中用 # 进行单行注释,如
in_folder = r"xxx" # 输入:待处理栅格文件所在的文件夹路径
在ArcMap调用python代码的过程,建议尽量避免在代码中出现中文字符(即使是注释部分)。
2.2 一个批处理栅格的代码模板
# params
in_path = r"xxx" # str
out_path = r"xxx" # str
prefix = "xx" # strrasters = [os.path.join(in_path,i) for i in os.listdir(in_path) if i.endswith(".tif")]
nums = len(rasters)
num = 1
for raster in rasters:raster_name = os.path.split(raster)[1]out_raster = os.path.join(out_path, prefix + raster_name)if not os.path.exists(out_raster):try:# 这里插入要批量执行的地理处理相关的代码arcpy.AddMessage("%d/%d | %s completed" % (num, nums, out_raster))except Exception as err:arcpy.AddMessage("%d/%d | %s errored, %s" % (num, nums, out_raster, err))else:arcpy.AddMessage("%d/%d | %s already exists" % (num, nums, out_raster))num = num + 1
练习:根据通用模板,实现批量乘功能
需要对某个文件夹中的所有栅格执行某个工具,共三步:
-
复制模板
-
修改 输入文件夹、输出文件夹、文件名前缀这三个变量
```python # params in_path = r"xxx" # str out_path = r"xxx" # str prefix = "xx" # str -
添加核心语句(python 调用某个地理处理工具的语句)
# 例如 arcpy.gp.Times_sa(raster, 0.0001, out_raster)
三、创建自定义脚本工具箱
该部分建议配合视频讲解一起看,让ArcMap变得更加强大,用Python编写自定义脚本工具箱
除了上述利用python脚本使用任何可用的工具以外,我们也可以创建自己的自定义工具。这些自定义工具可以用于执行特定的地理处理任务,并且更容易共享(有界面)。

ArcMap中创建工具箱有两种方法,分别为
- 自定义工具箱(.tbx)
- python工具箱(.pyt)
3.1 自定义工具箱添加脚本工具
可以在ArcToolbox的 自定义工具箱(.tbx) 中创建自定义的地理处理脚本工具,步骤主要有:
-
创建自定义工具箱(.tbx)
-
创建python脚本文件(.py)
核心:使用arcpy中的GetParameterAsText()函数来接受用户的动态输入
#!/usr/bin/python
# -*- coding: UTF-8 -*-import arcpy
from arcpy import env
import os
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')tifs = arcpy.GetParameterAsText(0)
masks = arcpy.GetParameterAsText(1)
out_dir = arcpy.GetParameterAsText(2)
tifs = tifs.split(";")
masks = masks.split(";")
names = [os.path.splitext(os.path.basename(mask))[0] for mask in masks]size = len(tifs) * len(masks)
num = 1
for i, mask in enumerate(masks):# create a new folder named by mask's namenew_folder = out_dir + os.sep + names[i]if not os.path.exists(new_folder):os.mkdir(new_folder)else:arcpy.AddMessage("Folder {0} already exists. Please check it.".format(new_folder))for tif in tifs:s = time.time()cliped_tif = os.path.join(new_folder, "{0}_{1}".format(names[i],os.path.split(tif)[1]))if not os.path.exists(cliped_tif):arcpy.Clip_management(tif, "#", cliped_tif, mask, "#", "ClippingGeometry")e = time.time()arcpy.AddMessage("{0}/{1} | {2} Completed, time used {3}s".format(num, size, cliped_tif, e - s))else:e = time.time()arcpy.AddMessage("{0}/{1} | {2} already exists.".format(num, size, cliped_tif))num += 1
- 设置工具参数

- 创建工具描述和帮助文档

- 导入脚本和保存工具箱
3.2 python工具箱的创建
python工具箱(.pyt)与ArcToolbox中的工具箱(.tbx)类似,但它完全是用python创建的,下面展示了pyt文件的代码模板
import arcpyclass Toolbox(object):def __init__(self):"""Define the toolbox (the name of the toolbox is the name of the.pyt file)."""self.label = "Toolbox"self.alias = ""# 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 = "Tool"self.description = ""self.canRunInBackground = Falsedef getParameterInfo(self):"""Define parameter definitions"""params = Nonereturn 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."""returndef 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):"""The source code of the tool."""returndef postExecute(self, parameters):"""This method takes place after outputs are outputs are processed andadded to the display."""return
python脚本工具箱 (.pyt) 将参数、验证代码以及源代码封装在一起,在代码管理和版本控制方面更友好。
3.3 中文乱码问题、pycharm调用arcpy

解决ArcPy脚本工具中文乱码问题
如果想在pycharm中调用arcpy中的函数,添加下列代码:
import sys
arcpy_path = [r'C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy',r'C:\Program Files (x86)\ArcGIS\Desktop10.2\bin',r'C:\Program Files (x86)\ArcGIS\Desktop10.2\ArcToolbox\Scripts']#修改成Arcgis安装对应路径
sys.path.extend(arcpy_path)
推荐阅读
- python 入门

- 面向ArcGIS的Python脚本编程【入门】

- 基于ArcGIS的Python编程秘笈(第2版)【进阶】

- Python 与开源GIS ——数据处理、空间分析与地图制图
Python与开源GIS:数据处理、空间分析与地图制图 — 首页

相关文章:
让ArcMap变得更加强大,用python执行地理处理以及编写自定义脚本工具箱
文章目录一、用python执行地理处理工具1.1 例:乘以0.00011.2 例:裁剪栅格1.3 哪里查看调用某工具的代码?二、用python批量执行地理处理工具2.1 必需的python语法知识for循环语句缩进的使用注释的使用2.2 一个批处理栅格的代码模板三、创建自定…...
SAP 项目实施阶段全过程
在sap实施项目的周期和步骤上,根据各公司对业务的理解不同,也被划分为各个阶段,但其中由普华永道提出的分七步走,个人觉得对刚进入这一行业的人很有帮助,接下来一起分享和讨论下: sap实施项目生命周期&…...
idea中的Maven导包失败问题解决总结
idea中的Maven导包失败问题解决总结 先确定idea和Maven 的配置文件settings 没有问题 找到我们本地的maven仓库,默认的maven仓库路径是在\C:\Users\用户名.m2下 有两个文件夹,repositotry是放具体jar包的,根据报错包的名,找对应文…...
REDIS中的缓存穿透,缓存击穿,缓存雪崩原因以及解决方案
需求引入一般在项目的开发中,都是使用关系型数据库来进行数据的存储,通常不会存在什么高并发的情况,可是一旦涉及大数据量的需求,比如商品抢购,网页活动导致的主页访问量瞬间增大,单一使用关系型数据库来保存数据的系统…...
数据库及缓存之MySQL(一)
思维导图 常见知识点 1.mysql存储引擎: 2.innodb与myisam区别: 3.表设计字段选择: 4.mysql的varchar(M)最多存储数据: 5.事务基本特性: 6.事务并发引发问题: 7.mysql索引: 8.三星索引…...
项目管理中,项目经理需要具备哪些能力?
项目经理是团队的领导者,是带领项目团队对项目进行策划、执行,完成项目目标,对于项目经理来说,想要有序推进项目,使项目更成功,光有理论知识是不够的,也要具备这些能力: 1、分清主…...
itk中的一些图像处理
文章目录1.BinomialBlurImageFilter计算每个维度上的最近邻居平均值2.高斯平滑3.图像的高阶导数 RecursiveGaussianImageFilter4.均值滤波5.中值滤波6.离散高斯平滑7.曲率驱动流去噪图像 CurvatureFlowImageFilter8.由参数alpha和beta控制的幂律自适应直方图均衡化9.Canny 边缘…...
Endless lseek导致的SQL异常
最近碰到同事咨询的一个问题,在执行一个函数时,发现会一直卡在那里。 strace抓了下发现会话一直在执行lseek,大致情况如下: 16:13:55.451832 lseek(33, 0, SEEK_END) 1368064 <0.000037> 16:13:55.477216 lseek(33, 0, SE…...
JUC-day01
JUC-day01 什么是JUC线程的状态: wait sleep关键字:同步锁 原理(重点)Lock接口: ReentrantLock(可重入锁)—>AQS CAS线程之间的通讯 1 什么是JUC 1.1 JUC简介 在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .con…...
Mind+Python+Mediapipe项目——AI健身之跳绳
原文:MindPythonMediapipe项目——AI健身之跳绳 - DF创客社区 - 分享创造的喜悦 【项目背景】跳绳是一个很好的健身项目,为了获知所跳个数,有的跳绳上会有计数器。但这也只能跳完这后看到,能不能在跳的过程中就能看到,…...
数据库概述
20世纪60年代后期,就出现了数据库技术。取得成就如下:造就了四位图灵奖得主发展成为以数据建模和DBMS核心技术为主,内容丰富的一门学科。带动了一个巨大的软件产业-DBMS产品及其相关工具和解决方案。四个基本概念数据数据是数据库中存储的基本…...
【已解决】解决IDEA的maven刷新依赖时出现Connot reconnect错误
前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注一下!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习&#…...
动态链接库(.so)文件的变编译和引用、执行
动态链接库(.so)文件的变编译和引用 动态链接库:SO(Shared Object)是一种动态链接库,也被称为共享库。它是一种可被多个程序共享使用的二进制代码库,其中包含已编译的函数和代码。与静态链接库不同,动态链接…...
linux(centos8)文件解压命令
linux解压命令tar 解压命令常用解压命令1 [.tar] 文件 解压到当前文件夹2 [.tar.gz] 文件 解压到当前文件夹3 [.tar] 解压到指定文件夹 -C 必须是大写unzip 解压命令常用解压命令1 [.zip]解压到当前文件夹2 [.zip] 解压到指定文件夹2 [.zip] 解压到指定文件夹(强行覆…...
阅读笔记6——通道混洗
一、逐点卷积 当前先进的轻量化网络大都使用深度可分离卷积或组卷积,以降低网络的计算量,但这两种操作都无法改变特征图的通道数,因此需要使用11的卷积。总体来说,逐点的11卷积有如下两点特性: 可以促进通道之间的信息…...
上海亚商投顾:沪指失守3300点 卫星导航概念全天强势
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪指数早间低开后震荡回升,沪指盘中一度翻红,随后又再度走低,创业板指午后跌近1%。…...
疯狂的SOVA:Android银行木马“新标杆”
2021年8月初,一款针对Android银行APP的恶意软件出现在人们的视野中,ThreatFabric 安全研究人员首次发现了这一木马,在其C2服务器的登录面板,研究人员发现,攻击者将其称之为SOVA。 ** SO** ** V** ** A简介** 在俄语中…...
汽车零部件企业数字工厂管理系统建设方案
在汽车零部件制造领域,伴随工业信息化与机器人化,制造模式逐渐从 CAD/CAE/CAM 数字化设计及加工走向全产品周期虚拟现实的数字化工厂管理系统平台,实现虚拟现实设计制造,防范产品缺陷并预防设备故障,大幅提高生产效率。…...
【线程同步工具】Semaphore源码解析
控制对资源的一个或多个副本的并发访问 Java API 提供了一种信号量机制 Semaphore。 一个信号量就是一个计数器, 可用于保护对一个或多个共享资源的访问。 当一个线程要访问多个共享资源中的一个时,它首先需要获得一个信号量。如果信号量内部的计数器的…...
获取实时天气
一、用天气API(需要付费) 网址:https://www.tianqiapi.com/请求方式及url:请求方式:GET接口地址:https://tianqiapi.com/free/day请求示例https://www.tianqiapi.com/free/day?appid_____&appsecret__…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
