ArcGIS 一个独立运行的Python程序编写和打包
bigegpt 2024-12-20 13:30 9 浏览
- 写代码
#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类型。
相关推荐
- 了解Linux目录,那你就了解了一半的Linux系统
-
大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...
- Linux命令,这些操作要注意!(linux命令?)
-
刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...
- Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!
-
在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...
- linux必学的60个命令(linux必学的20个命令)
-
以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....
- 提高工作效率的--Linux常用命令,能够决解95%以上的问题
-
点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...
- 15 个实用 Linux 命令(linux命令用法及举例)
-
Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...
- Linux 常用命令集合(linux常用命令全集)
-
系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...
- Linux的常用命令就是记不住,怎么办?
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- Linux常用文件操作命令(linux常用文件操作命令有哪些)
-
ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...
- Linux 常用命令(linux常用命令)
-
日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E...
- 简单粗暴收藏版:Linux常用命令大汇总
-
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...
- 「Linux」linux常用基本命令(linux常用基本命令和用法)
-
Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...
- Linux的常用命令就是记不住,怎么办?于是推出了这套教程
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- Linux的30个常用命令汇总,运维大神必掌握技能!
-
以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...
- Linux/Unix 系统中非常常用的命令
-
Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)