#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-16所示。过滤器中字段,设置双精度,如图1-17所示
图1-16 要素类过滤器设置面要素
图1-17 字段过滤器设置双精度
图1-18 工具箱版本另存
图1-19 工具箱中工具导入脚本
导入脚本后,就不需要外部.py文件,不然需要一块拷贝,不拷贝对应文件,运行工具失败,如图1-20所示,同时需要设置成相对路径,如图1-21所示。导入脚本,需要源代码,虽然可以修改,但不太方便。
图1-20 工具箱中工具没有导入脚本运行错误
图1-21 工具箱中设置相对路径
设置密码如图1-22所示,新密码和确认密码一致,自己一定牢记密码。
图1-22 工具箱中工具密码设置
之后编辑源代码,需要输入密码,没有密码,就不能修改,也可以保护你的知识产权。为大家学习源代码,都没有密码,也没有导入脚本。
数据类型如表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 | 容器,例如地理数据库或文件夹。 |
输入要素图层多值如图1-23所示:
图1-23 输入要素多值界面
如果是字段,多值界面如图1-24所示。
图1-24 字段多值界面
存在六种类型的参数过滤器。使用何种类型的过滤器由参数的数据类型决定。
图1-25 字符串的值列表设置
图1-26 整数的范围设置
图1-27 要素类过滤器
图1-28 文件过滤器设置
图1-29 字段过滤器设置
图1-30 工作空间滤器设置
调用上面的面积计算工具为例,使用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 + ", 请自己允许" + tbxFileName + "/" + toolname);
//string errorMsgs = gp.GetMessages(ref sev);
//MessageBox.Show(errorMsgs);
return false;
}
finally
{
gp = null;
//MessageBox.Show("ok");
}
return true;
}
返回True运行成功,false运行失败,函数的参数都可以修改为object类型。
留言与评论(共有 0 条评论) “” |