ArcGIS 一个独立运行的Python程序编写和打包
off999 2024-09-18 22:38 26 浏览 0 评论
- 写代码
#coding=utf8
# -*- coding: UTF-8 -*-
import arcpy
from arcpy import env
import os
import sys
###############
##################################
fc= arcpy.GetParameterAsText(0)
fieldname= arcpy.GetParameterAsText(1)
rows = arcpy.da.UpdateCursor(fc,["shape@",fieldname])
i=1
try:
for row in rows:
feat = row[0]
row[1]=feat.area
arcpy.AddMessage("No:"+str(i)+":"+str(feat.area))
rows.updateRow(row)
i=i+1
del rows
except Exception as e:
arcpy.AddError(e.message)
- 设置参数,过滤器 ,在工具右键属性→参数标签页,找到面图层,如图1-14所示,下面过滤器,设置面参数的要素过滤器,如图1-15所示。
图1-14 参数设置
图1-15 参数设置
在图1-14上面参数选择“字段”,下面参数属性“获取自”取“面图层”, 如图1-16所示。过滤器中字段,设置双精度,如图1-17所示
图1-16 要素类过滤器设置面要素
图1-17 字段过滤器设置双精度
- 发布考虑版本,如1-18所示,可以另存为其他低版本,但不要使用低版本没有的工具。
图1-18 工具箱版本另存
- 导入脚本,如图1-19所示。
图1-19 工具箱中工具导入脚本
导入脚本后,就不需要外部.py文件,不然需要一块拷贝,不拷贝对应文件,运行工具失败,如图1-20所示,同时需要设置成相对路径,如图1-21所示。导入脚本,需要源代码,虽然可以修改,但不太方便。
图1-20 工具箱中工具没有导入脚本运行错误
图1-21 工具箱中设置相对路径
- 设置密码
设置密码如图1-22所示,新密码和确认密码一致,自己一定牢记密码。
图1-22 工具箱中工具密码设置
之后编辑源代码,需要输入密码,没有密码,就不能修改,也可以保护你的知识产权。为大家学习源代码,都没有密码,也没有导入脚本。
Python中参数和过滤器的设置
数据类型
数据类型如表1-2所示。
表1-2 参数数据类型列表
数据类型 | datatype 关键字 | 说明或表现 |
分析像元大小 | analysis_cell_size | 栅格工具使用的像元大小。 |
ArcMap 文档 | DEMapDocument | 包含一个地图、它的布局以及它的关联图层、表格、图表和报表的文件。 |
面积单位 | GPArealUnit | 面积单位类型和值,例如平方米或英亩。 |
布尔型 | GPBoolean | 布尔值。 |
像元大小 XY | GPCellSizeXY | 定义栅格像元的两侧。 |
复合图层 | GPCompositeLayer | 对多个子图层的引用,包括符号系统和渲染属性,选择.lyr文件 |
坐标系 | GPCoordinateSystem | 参考框架,例如 UTM 系统,由一组点、线和/或面,以及一组用于定义二维和三维空间中点的位置的规则组成。 |
数据元素 | DEType | ArcCatalog 中可见的所有的数据集,含要素类和表格。 |
数据集 | DEDatasetType | 相关数据的集合,通常被分组或存储在一起。所有数据都是数据集。 |
日期 | GPDate | 日期值。 |
dBASE 表 | DEDbaseTable | 以 dBASE 格式存储的属性数据。 |
双精度型 | GPDouble | 所有浮点数都存储为双精度 64 位值。 |
加密的字符串 | GPEncryptedString | 密码加密的字符串。 |
要素类 | DEFeatureClass | 形状类型相同的空间数据的集合:点、多点、折线和面。 |
要素数据集 | DEFeatureDataset | 共享公共的地理区域和相同的空间参考系统的要素类集合。 |
要素图层 | GPFeatureLayer | 对要素类 的引用,包括符号系统和渲染属性。可以是要素,也可以图层 |
要素集 | GPFeatureRecordSetLayer | 工具运行时绘制要素的交互式要素。 |
字段 | Field | 表中的列,用于存储单个属性的值。 |
文件 | DEFile | 磁盘上的文件。 |
文件夹 | DEFolder | 指定数据在磁盘上的存储位置。 |
图层组 | GPGroupLayer | 图层组:组织地图、指定高级绘制顺序选项和分享图层用于其他地图变得更加容易。 |
索引 | Index | 用于加快在地理数据集和数据库中搜索记录的速度的数据结构。 |
LAS 数据集 | DELasDataset | LAS 数据集存储对磁盘上一个或多个 LAS 文件以及其他表面要素的引用。LAS 文件是一个二进制文件,存储机载激光雷达数据。 |
LAS 数据集图层 | GPLasDatasetLayer | 引用磁盘上的 LAS 数据集的图层。此图层可将过滤器应用于 LAS 数据集引用的雷达文件和表面约束。 |
图层 | GPLayer | 对数据源的引用,例如 shapefile、coverage、地理数据库要素类或栅格,包括符号系统和渲染属性。 |
图层文件 | DELayer | 图层文件存储了图层定义,包括符号系统和渲染属性。 |
线性单位 | GPLinearUnit | 线性单位类型和值,例如米或公里。缓冲区等使用 |
长整型 | GPLong | 一个整数值。 |
点 | GPPoint | x,y 坐标对。 |
投影文件 | DEPrjFile | 存储空间数据的坐标系统信息的文件。 |
栅格数据图层 | GPRasterDataLayer | 栅格数据图层。 |
栅格数据集 | DERasterDataset | 根据一个或多个栅格构建的单个数据集。 |
栅格图层 | GPRasterLayer | 对栅格的引用,包括符号系统和渲染属性。 |
Shapefile | DEShapefile | shapefile 格式的空间数据。 |
空间参考 | GPSpatialReference | 用于存储空间数据集(包括空间域)的坐标系。和坐标系一样 |
SQL 表达式 | GPSQLExpression | 定义和操纵关系数据库中的数据的语法。 |
字符串 | GPString | 文本值。 |
字符串已隐藏 | GPStringHidden | 以 * 字符掩盖的字符串。和加密的字符串一样 |
表 | DETable | 表格数据。 |
表视图 | GPTableView | 用于查看和编辑的表格数据表现形式,存储在内存或磁盘中。 |
文本文件 | DETextfile | 以 ASCII 格式存储的数据。 |
Tin 图层 | GPTinLayer | 对 TIN 的引用,包括拓扑关系、符号系统和渲染属性。 |
工具 | DETool | 地理处理工具。 |
Toolbox | DEToolbox | 地理处理工具箱。 |
工作空间 | DEWorkspace | 容器,例如地理数据库或文件夹。 |
参数属性说明
- 参数Type 选项
- Required必选 - 必须提供具体值才能执行工具。
- Optional可选 - 不需要为参数提供值。
- Derived派生 - 该参数只适用于输出参数(请参阅下文的方向参数)。派生的输出参数不会显示在工具对话框中。
- 参数方向(direction)选项
- Input输入参数
- Output输出参数
- Multivalued多值,false是只能输入一个,True可以输入多个
输入要素图层多值如图1-23所示:
图1-23 输入要素多值界面
如果是字段,多值界面如图1-24所示。
图1-24 字段多值界面
1.7.3 过滤器
存在六种类型的参数过滤器。使用何种类型的过滤器由参数的数据类型决定。
- 值列表 - 预定义关键字列表。 用于字符串,如图1-25所示。
图1-25 字符串的值列表设置
- 范围 - 有效数值的范围。包括范围边界值,这表示最小值和最大值也是有效数据。 用于数字,如图1-26所示。
图1-26 整数的范围设置
- 要素类 - 允许的要素类的类型列表:点、多点、折线 (polyline)、面、多面体 (multipatch)、注记和维度,如图1-27所示。
图1-27 要素类过滤器
- 文件 - 有效文件扩展名列表,如 .txt(简单文本文件)或 .csv(分割符是分号”;”。 不用加“.” 文件扩展说明,如图1-28所示。
图1-28 文件过滤器设置
- 字段 - 允许的字段类型列表:短整型、长整型、单精度、双精度、文本、日期、OID、几何、BLOB、栅格、、GUID、全局 ID 和 XML,如图1-29所示。
图1-29 字段过滤器设置
- 工作空间 - 模型参数所允许的工作空间类型,如图1-30所示。
图1-30 工作空间滤器设置
arcpy开发缺点
- 界面定制依靠ArcGIS平台,不够灵活。
- 鼠标交互,如没有事件mousemove,mousedown,mouseup,很不方便。
- arcpy很多接口没有开发,不像arcengine丰富,只能做一些简单,弱开发,只适合于批量数据处理,不合适于大项目,只能作为大项目辅助开发方式。
- 汉字乱码问题比较多,使用ArcGIS Pro中arcpy好多了。
Arcengine C#调用arcpy的工具方法
调用上面的面积计算工具为例,使用Arcengine,C#调用arcpy代码如下,代码下载可以扫码右边的二维码。
private static bool CalArea(IFeatureClass pFeatureClass, string FieldName)
{
string tbxFileName = @"F:\2020book\原始资料\data\1Python基础\工具箱.tbx";
if (!File.Exists(tbxFileName))
{
MessageBox.Show("文件" + tbxFileName + "不存在");
return false;
}
IGeoProcessor gp = new GeoProcessor();
gp.OverwriteOutput = true;
gp.AddOutputsToMap = false;
gp.AddToolbox(tbxFileName);
// Create a variant - data are in the workspace
IVariantArray parameters = new VarArray();
parameters.Add(pFeatureClass);//参数
parameters.Add(FieldName);//参数
string toolname="计算面积";//工具名称,建议工具名称为英文,标签为中文,
//object sev = null;
try
{
gp.Execute(toolname, parameters, null);
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message + ",\n请自己允许" + tbxFileName + "/" + toolname);
//string errorMsgs = gp.GetMessages(ref sev);
//MessageBox.Show(errorMsgs);
return false;
}
finally
{
gp = null;
//MessageBox.Show("ok");
}
return true;
}
返回True运行成功,false运行失败,函数的参数都可以修改为object类型。
相关推荐
- 面试官:来,讲一下枚举类型在开发时中实际应用场景!
-
一.基本介绍枚举是JDK1.5新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错...
- 一日一技:11个基本Python技巧和窍门
-
1.两个数字的交换.x,y=10,20print(x,y)x,y=y,xprint(x,y)输出:102020102.Python字符串取反a="Ge...
- Python Enum 技巧,让代码更简洁、更安全、更易维护
-
如果你是一名Python开发人员,你很可能使用过enum.Enum来创建可读性和可维护性代码。今天发现一个强大的技巧,可以让Enum的境界更进一层,这个技巧不仅能提高可读性,还能以最小的代价增...
- Python元组编程指导教程(python元组的概念)
-
1.元组基础概念1.1什么是元组元组(Tuple)是Python中一种不可变的序列类型,用于存储多个有序的元素。元组与列表(list)类似,但元组一旦创建就不能修改(不可变),这使得元组在某些场景...
- 你可能不知道的实用 Python 功能(python有哪些用)
-
1.超越文件处理的内容管理器大多数开发人员都熟悉使用with语句进行文件操作:withopen('file.txt','r')asfile:co...
- Python 2至3.13新特性总结(python 3.10新特性)
-
以下是Python2到Python3.13的主要新特性总结,按版本分类整理:Python2到Python3的重大变化Python3是一个不向后兼容的版本,主要改进包括:pri...
- Python中for循环访问索引值的方法
-
技术背景在Python编程中,我们经常需要在循环中访问元素的索引值。例如,在处理列表、元组等可迭代对象时,除了要获取元素本身,还需要知道元素的位置。Python提供了多种方式来实现这一需求,下面将详细...
- Python enumerate核心应用解析:索引遍历的高效实践方案
-
喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据GitHub代码分析统计,使用enumerate替代range(len())写法可减少38%的索引错误概率。本文通过12个生产...
- Python入门到脱坑经典案例—列表去重
-
列表去重是Python编程中常见的操作,下面我将介绍多种实现列表去重的方法,从基础到进阶,帮助初学者全面掌握这一技能。方法一:使用集合(set)去重(最简单)pythondefremove_dupl...
- Python枚举类工程实践:常量管理的标准化解决方案
-
本文通过7个生产案例,系统解析枚举类在工程实践中的应用,覆盖状态管理、配置选项、错误代码等场景,适用于Web服务开发、自动化测试及系统集成领域。一、基础概念与语法演进1.1传统常量与枚举类对比#传...
- 让Python枚举更强大!教你玩转Enum扩展
-
为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?ifstatus==1:print("开始处理")elifstatus==2:pri...
- Python枚举(Enum)技巧,你值得了解
-
枚举(Enum)提供了更清晰、结构化的方式来定义常量。通过为枚举添加行为、自动分配值和存储额外数据,可以提升代码的可读性、可维护性,并与数据库结合使用时,使用字符串代替数字能简化调试和查询。Pytho...
- 78行Python代码帮你复现微信撤回消息!
-
来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。[导读]Python曾经对我说:"时日不多,赶紧用Python"。于是看...
- 登录人人都是产品经理即可获得以下权益
-
文章介绍如何利用Cursor自动开发Playwright网页自动化脚本,实现从选题、写文、生图的全流程自动化,并将其打包成API供工作流调用,提高工作效率。虽然我前面文章介绍了很多AI工作流,但它们...
- Python常用小知识-第二弹(python常用方法总结)
-
一、Python中使用JsonPath提取字典中的值JsonPath是解析Json字符串用的,如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的,使用jsonpat...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)