ArcGIS 一个独立运行的Python程序编写和打包
- 写代码
#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类型。