#coding=utf8# -*- coding: UTF-8 -*-import arcpyfrom arcpy import envimport osimport sys#################################################fc= arcpy.GetParameterAsText(0)fieldname= arcpy.GetParameterAsText(1)rows = arcpy.da.UpdateCursor(fc,["shape@",fieldname])i=1try:for row in rows:feat = row[0]row[1]=feat.areaarcpy.AddMessage("No:" str(i) ":" str(feat.area))rows.updateRow(row)i=i 1del rowsexcept 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 工具箱中工具密碼設置
之後編輯源代碼,需要輸入密碼,沒有密碼,就不能修改,也可以保護你的知識産權。為大家學習源代碼,都沒有密碼,也沒有導入腳本。
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 |
容器,例如地理數據庫或文件夾。 |
輸入要素圖層多值如圖1-23所示:
圖1-23 輸入要素多值界面
如果是字段,多值界面如圖1-24所示。
圖1-24 字段多值界面
1.7.3 過濾器存在六種類型的參數過濾器。使用何種類型的過濾器由參數的數據類型決定。
圖1-25 字符串的值列表設置
圖1-26 整數的範圍設置
圖1-27 要素類過濾器
圖1-28 文件過濾器設置
圖1-29 字段過濾器設置
圖1-30 工作空間濾器設置
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類型。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!