tft每日頭條

 > 生活

 > python獲取arcgis樣式内容

python獲取arcgis樣式内容

生活 更新时间:2025-01-24 01:06:06
  1. 寫代碼

#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. 設置參數,過濾器 ,在工具右鍵屬性→參數标簽頁,找到面圖層,如圖1-14所示,下面過濾器,設置面參數的要素過濾器,如圖1-15所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)1

圖1-14 參數設置

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)2

圖1-15 參數設置

在圖1-14上面參數選擇“字段”,下面參數屬性“獲取自”取“面圖層”, 如圖1-16所示。過濾器中字段,設置雙精度,如圖1-17所示

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)3

圖1-16 要素類過濾器設置面要素

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)4

圖1-17 字段過濾器設置雙精度

  1. 發布考慮版本,如1-18所示,可以另存為其他低版本,但不要使用低版本沒有的工具。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)5

圖1-18 工具箱版本另存

  1. 導入腳本,如圖1-19所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)6

圖1-19 工具箱中工具導入腳本

導入腳本後,就不需要外部.py文件,不然需要一塊拷貝,不拷貝對應文件,運行工具失敗,如圖1-20所示,同時需要設置成相對路徑,如圖1-21所示。導入腳本,需要源代碼,雖然可以修改,但不太方便。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)7

圖1-20 工具箱中工具沒有導入腳本運行錯誤

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)8

圖1-21 工具箱中設置相對路徑

  1. 設置密碼

設置密碼如圖1-22所示,新密碼和确認密碼一緻,自己一定牢記密碼。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)9

圖1-22 工具箱中工具密碼設置

之後編輯源代碼,需要輸入密碼,沒有密碼,就不能修改,也可以保護你的知識産權。為大家學習源代碼,都沒有密碼,也沒有導入腳本。

Python中參數和過濾器的設置數據類型

數據類型如表1-2所示。

表1-2 參數數據類型列表

數據類型

datatype 關鍵字

說明或表現

分析像元大小

analysis_cell_size

栅格工具使用的像元大小。

ArcMap 文檔

DEMapDocument

包含一個地圖、它的布局以及它的關聯圖層、表格、圖表和報表的文件。

面積單位

GPArealUnit

面積單位類型和值,例如平方米或英畝。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)10

布爾型

GPBoolean

布爾值。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)11

像元大小 XY

GPCellSizeXY

定義栅格像元的兩側。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)12

複合圖層

GPCompositeLayer

對多個子圖層的引用,包括符号系統和渲染屬性,選擇.lyr文件

坐标系

GPCoordinateSystem

參考框架,例如 UTM 系統,由一組點、線和/或面,以及一組用于定義二維和三維空間中點的位置的規則組成。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)13

數據元素

DEType

ArcCatalog 中可見的所有的數據集,含要素類和表格。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)14

數據集

DEDatasetType

相關數據的集合,通常被分組或存儲在一起。所有數據都是數據集。

日期

GPDate

日期值。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)15

dBASE 表

DEDbaseTable

以 dBASE 格式存儲的屬性數據。

雙精度型

GPDouble

所有浮點數都存儲為雙精度 64 位值。

加密的字符串

GPEncryptedString

密碼加密的字符串。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)16

要素類

DEFeatureClass

形狀類型相同的空間數據的集合:點、多點、折線和面。

要素數據集

DEFeatureDataset

共享公共的地理區域和相同的空間參考系統的要素類集合。

要素圖層

GPFeatureLayer

對要素類 的引用,包括符号系統和渲染屬性。可以是要素,也可以圖層

要素集

GPFeatureRecordSetLayer

工具運行時繪制要素的交互式要素。

字段

Field

表中的列,用于存儲單個屬性的值。

文件

DEFile

磁盤上的文件。

文件夾

DEFolder

指定數據在磁盤上的存儲位置。

圖層組

GPGroupLayer

圖層組:組織地圖、指定高級繪制順序選項和分享圖層用于其他地圖變得更加容易。

索引

Index

用于加快在地理數據集和數據庫中搜索記錄的速度的數據結構。

LAS 數據集

DELasDataset

LAS 數據集存儲對磁盤上一個或多個 LAS 文件以及其他表面要素的引用。LAS 文件是一個二進制文件,存儲機載激光雷達數據。

LAS 數據集圖層

GPLasDatasetLayer

引用磁盤上的 LAS 數據集的圖層。此圖層可将過濾器應用于 LAS 數據集引用的雷達文件和表面約束。

圖層

GPLayer

對數據源的引用,例如 shapefile、coverage、地理數據庫要素類或栅格,包括符号系統和渲染屬性。

圖層文件

DELayer

圖層文件存儲了圖層定義,包括符号系統和渲染屬性。

線性單位

GPLinearUnit

線性單位類型和值,例如米或公裡。緩沖區等使用

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)17

長整型

GPLong

一個整數值。

GPPoint

x,y 坐标對。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)18

投影文件

DEPrjFile

存儲空間數據的坐标系統信息的文件。

栅格數據圖層

GPRasterDataLayer

栅格數據圖層。

栅格數據集

DERasterDataset

根據一個或多個栅格構建的單個數據集。

栅格圖層

GPRasterLayer

對栅格的引用,包括符号系統和渲染屬性。

Shapefile

DEShapefile

shapefile 格式的空間數據。

空間參考

GPSpatialReference

用于存儲空間數據集(包括空間域)的坐标系。和坐标系一樣

SQL 表達式

GPSQLExpression

定義和操縱關系數據庫中的數據的語法。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)19

字符串

GPString

文本值。

字符串已隐藏

GPStringHidden

以 * 字符掩蓋的字符串。和加密的字符串一樣

DETable

表格數據。

表視圖

GPTableView

用于查看和編輯的表格數據表現形式,存儲在内存或磁盤中。

文本文件

DETextfile

以 ASCII 格式存儲的數據。

Tin 圖層

GPTinLayer

對 TIN 的引用,包括拓撲關系、符号系統和渲染屬性。

工具

DETool

地理處理工具。

Toolbox

DEToolbox

地理處理工具箱。

工作空間

DEWorkspace

容器,例如地理數據庫或文件夾。

參數屬性說明
  1. 參數Type 選項
  • Required必選 - 必須提供具體值才能執行工具。
  • Optional可選 - 不需要為參數提供值。
  • Derived派生 - 該參數隻适用于輸出參數(請參閱下文的方向參數)。派生的輸出參數不會顯示在工具對話框中。
  1. 參數方向(direction)選項
  • Input輸入參數
  • Output輸出參數
  1. Multivalued多值,false是隻能輸入一個,True可以輸入多個

輸入要素圖層多值如圖1-23所示:

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)20

圖1-23 輸入要素多值界面

如果是字段,多值界面如圖1-24所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)21

圖1-24 字段多值界面

1.7.3 過濾器

存在六種類型的參數過濾器。使用何種類型的過濾器由參數的數據類型決定。

  1. 值列表 - 預定義關鍵字列表。 用于字符串,如圖1-25所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)22

圖1-25 字符串的值列表設置

  1. 範圍 - 有效數值的範圍。包括範圍邊界值,這表示最小值和最大值也是有效數據。 用于數字,如圖1-26所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)23

圖1-26 整數的範圍設置

  1. 要素類 - 允許的要素類的類型列表:點、多點、折線 (polyline)、面、多面體 (multipatch)、注記和維度,如圖1-27所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)24

圖1-27 要素類過濾器

  1. 文件 - 有效文件擴展名列表,如 .txt(簡單文本文件)或 .csv(分割符是分号”;”。 不用加“.” 文件擴展說明,如圖1-28所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)25

圖1-28 文件過濾器設置

  1. 字段 - 允許的字段類型列表:短整型、長整型、單精度、雙精度、文本、日期、OID、幾何、BLOB、栅格、、GUID、全局 ID 和 XML,如圖1-29所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)26

圖1-29 字段過濾器設置

  1. 工作空間 - 模型參數所允許的工作空間類型,如圖1-30所示。

python獲取arcgis樣式内容(一個獨立運行的Python程序編寫和打包)27

圖1-30 工作空間濾器設置

arcpy開發缺點
  1. 界面定制依靠ArcGIS平台,不夠靈活。
  2. 鼠标交互,如沒有事件mousemove,mousedown,mouseup,很不方便。
  3. arcpy很多接口沒有開發,不像arcengine豐富,隻能做一些簡單,弱開發,隻适合于批量數據處理,不合适于大項目,隻能作為大項目輔助開發方式。
  4. 漢字亂碼問題比較多,使用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類型。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved