日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArcPy常用函数梳理

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArcPy常用函数梳理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 地理處理環境及其設置

1) 獲取和設置地理處理環境

地理處理環境設置以env類的屬性的方式訪問。這些屬性可用于檢索或設置當前值。環境可作為環境類中的讀/寫屬性進行訪問,方法為arcpy.env.<環境名稱>。示例1為設置地理處理環境。

示例1:設置地理處理環境值

import arcpy

# 設置地理處理環境值

acpy.env.worksapce = "c:/St_Johns/data.gdb"

2) 重新設置環境

由于地理處理環境對工具操作和輸出有著很大的影響,因此需要保證能夠追蹤環境設置并在必要時將其重置為默認狀態。可以使用ResetEnvironments函數恢復默認環境值,或者使用ClearEnvironment函數重置特定環境,如示例2-2所示。

示例2:重置地理處理環境值

import arcpy

# 恢復默認的環境值

arcpy.ResetEnvironments()

# 重置特定環境

arcpy.ClearEnvironment("workspace")

2 描述數據

描述數據主要使用Describe函數。Describe函數返回的Describe對象包含多個屬性,如數據類型、字段、索引。該對象的屬性是動態的,也就是說不同的數據類型,會有不同的描述屬性可供使用。

Describe屬性被組織成一系列屬性組。任何特定數據集都將至少獲取其中一個組的屬性。例如,如果要描述一個地理數據庫要素類,可以訪問GDB要素類、要素類、數據集屬性組中的屬性。所有的數據,不管是哪種數據類型,總會獲取通用的Describe對象屬性。

值得注意的是,arcpy.da.Describe也可以獲取相同的描述信息,唯一的區別在于該方法以字典的方式返回描述信息。

在某些情況下,Describe返回的對象并不包含為其設計的所有屬性。例如,地圖中圖層的Describe對象不會包含圖層屬性集。只有在描述.lyr文件時,該屬性才會存在。如果試圖訪問Describe對象不具有的屬性,它會拋出錯誤異常或返回空值(如:None、0或-1或空字符串)。如果不是很確定描述對象是否含某個屬性,可以使用Python的hasattr()函數進行檢查。

可以通過Describe函數獲取描述信息的數據類型如表1所示。

表1? 可使用Describe函數獲取描述信息的數據類型

ArcInfo Workstation 項屬性

ArcInfo Workstation 表屬性

CAD 工程圖數據集屬性

CAD 要素類屬性

地籍結構屬性

Coverage 要素類屬性

Coverage 屬性

數據集屬性

dBASE 表屬性

編輯器追蹤數據集屬性

要素類屬性

文件屬性

文件夾屬性

GDB 要素類屬性

GDB 表屬性

幾何網絡屬性

LAS 數據集屬性

圖層屬性

地圖文檔屬性

鑲嵌數據集屬性

Network Analyst 圖層屬性

網絡數據集屬性

Prj 文件屬性

波段柵格屬性

柵格目錄屬性

柵格數據集屬性

RecordSet和FeatureSet 屬性

關系類屬性

制圖表達類屬性

邏輯示意圖數據集屬性

邏輯示意圖屬性

邏輯示意圖文件夾屬性

SDC 要素類屬性

Shapefile 要素類屬性

表屬性

表視圖屬性

文本文件屬性

Tin 屬性

工具屬性

工具箱屬性

拓撲屬性

VPF Coverage 屬性

VPF 要素類屬性

VPF 表屬性

工作空間屬性

注:詳細信息請查閱http://pro.arcgis.com/zh-cn/pro-app/arcpy/functions/describe.htm。

?

?

?

Dscribe函數的語法及返回值說明分別如表2和表3所示。其中,Describe類型對象的屬性信息如表4所示。

表2? Describe函數語法

參數

數據類型

說明

value

String

要描述的指定數據元素或地理處理對象。

表3? Describe函數返回值

數據類型

說明

Describe

返回具有用于詳細描述所描述的數據元素的屬性的對象。某些返回的對象屬性會包含文本值或對象。

表4? Describe類型對象屬性信息

屬性

數據類型

說明

baseName (只讀)

String

文件基本名稱

catalogPath (只讀)

String

數據路徑

children (只讀)

Describe

子元素列表

childrenExpanded (只讀)

Boolean

指示子元素是否已擴展

dataElementType (只讀)

String

元素的元素類型

datatype (只讀)

String

元素類型

extension (只讀)

String

文件擴展名

file (只讀)

String

文件名稱

fullPropsRetrieved (只讀)

Boolean

指示是否已檢索完整屬性

metadataRetrieved (只讀)

Boolean

指示是否已檢索元數據

name (只讀)

String

元素名稱

path (只讀)

String

文件路徑

?

?

Dscribe函數示例如示例3所示。

示例3:Describe函數

import arcpy

# 從參數中獲取Layer對象

layerString = arcpy.GetParameterAsText(0)

# 獲取Layer對象的描述信息

desc = arcpy.Describe(layerString)

# 打印Layer對象的名稱

print("Name: {}".format(desc.name))

# 判斷描述信息中是否函數layer屬性

if hasattr(desc, "layer"):

??? print("Layer name: {}".format(desc.layer.name))

??? print("Layer data source: {}".format(desc.layer.catalogPath))

??? print(".lyr file: {}".format(desc.catalogPath))

else:

??? print("Layer name: {}".format(desc.name))

??? print("Layer data source: {}".format(desc.catalogPath))

3 游標

3.1 InsertCursor

InsertCursor可返回一個分發Row對象的枚舉對象,可以實現向要素類、shapefile或表中插入行??墒褂胣ewRow方法從插入行的枚舉對象獲取新的Row對象。光標每次調用insertRow方法都會在表中創建新行,該行的初始值設置為輸入行中的值。

InsertCursor函數的調用方式為:InsertCursor (dataset, {spatial_reference}),其語法以及返回值信息分別如表5和6所示。 ?

?

表5? InsertCursor函數語法

參數

數據類型

說明

dataset

String

將向其中插入行的表、要素類或shapefile。

spatial_reference

SpatialReference

在提供的spatial_reference中指定的坐標,并動態轉換到數據集的坐標系。

表6? InsertCursor函數返回值

數據類型

說明

Cursor

返回針對指定要素類、shapefile或表的Cursor對象。

InsertCursor函數示例如示例4所示。

示例4:InsertCursor函數

import arcpy

# 通過InsertCursor為Table創建Cursor對象

rows = arcpy.InsertCursor("c:/base/data.gdb/roads_lut")

# 添加25行新數據

for x in range(1, 26):

??? row = rows.newRow()

??? row.setValue("rowid", x)

??? row.setValue("distance", 100)

??? rows.insertRow(row)

# 刪除Cursor對象和行對象,主要是為了解除數據的鎖定

del row

del rows

3.2 SearchCursor

SearchCursor函數用于在要素類或表上建立只讀游標。SearchCursor函數可用于遍歷Row對象并提取字段值,可使用where子句或字段限制搜索,并對結果排序。

SearchCursor函數的調用方式為:SearchCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}),其語法以及返回值信息分別如表7和8所示。

表7? SearchCursor函數語法

參數

數據類型

說明

dataset

String

包含要搜索行的要素類、shapefile 或表。

where_clause

String

用于限制在游標中返回的行的可選表達式。

spatial_reference

SpatialReference

指定后,要素將使用提供的spatial_reference進行動態投影。

fields

String

游標中包含以分號分隔的字符串字段。默認情況下,包含所有字段。

sort_fields

String

在游標中對行進行排序的字段。

表8? InsertCursor函數返回值

數據類型

說明

Cursor

可分發Row對象的Cursor對象

Python中可用于迭代搜索游標的方式有兩種:for循環或者while循環(通過游標的next方法返回下一行)。通過for循環以及通過while循環使用SearchCursor函數分別如示例5和示例6所示。

示例5:通過for循環使用SearchCursor。

import arcpy

fc = "c:/data/base.gdb/roads"

field = "StreetName"

cursor = arcpy.SearchCursor(fc)

for row in cursor:

print(row.getValue(field))

?

示例6:通過while循環使用SearchCursor。

import arcpy

fc = "c:/data/base.gdb/roads"

field = "StreetName"

cursor = arcpy.SearchCursor(fc)

row = cursor.next()

while row:

print(row.getValue(field))???

row = cursor.next()

3.3 UpdateCursor

UpdateCursor函數可創建一個用于更新或刪除指定要素類、shapefile和表中的行的游標。該游標將數據鎖定保留至腳本完成或更新游標對象被刪除時。

UpdateCursor函數的調用方式為:UpdateCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}),其語法以及返回值信息分別如表9和10所示。

表7? SearchCursor函數語法

參數

數據類型

說明

dataset

String

包含要更新或刪除行的要素類、shapefile或表。

where_clause

String

用于限制在游標中返回的行的可選表達式。

spatial_reference

SpatialReference

在提供的spatial_reference中指定的坐標,并動態轉換到數據集的坐標系。

fields

[fields,...]

String

游標中包含以分號分隔的字符串字段。默認情況下,包含所有字段。

sort_fields

String

用于在游標中對行進行排序的字段。

表8? InsertCursor函數返回值

數據類型

說明

Cursor

可分發Row對象的Cursor對象

Python中可用于迭代搜索游標的方式有兩種:for循環或者while循環(通過游標的next方法返回下一行)。通過for循環以及通過while循環使用SearchCursor函數分別如示例7和示例8所示。

示例7:通過for循環使用UpdateCursor。

import arcpy

fc = "c:/data/base.gdb/roads"

field1 = "field1"

field2 = "field2"

cursor = arcpy.UpdateCursor(fc)

for row in cursor:

??? row.setValue(field2, row.getValue(field1) * 3.0)

?cursor.updateRow(row)

?

示例8:通過while循環使用UpdateCursor。

import arcpy

fc = "c:/data/base.gdb/roads"

field1 = "field1"

field2 = "field2"

cursor = arcpy.UpdateCursor(fc)

row = cursor.next() while row:

row.setValue(field2, row.getValue(field1) * 3.0)?

cursor.updateRow(row)

row = cursor.next()

4 獲取和設置參數

4.1 GetParameter

在參數列表中,按所需參數的索引值選擇參數。參數以對象的形式返回。要將此參數用作文本字符串,可調用GetParameterAsText函數。

GetParameter函數調用方式為GetParameter(index),其語法說明及返回值信息分別如表9和表10所示

表9? GetParameter函數語法

參數

數據類型

說明

index

Integer

在參數列表中按索引選擇指定參數。

表10? InsertCursor函數返回值

數據類型

說明

Object

對象通過指定參數返回。

?

?

GetParameter函數示例如示例9所示。

示例9: GetParameter函數。

import arcpy

# 獲取第一個參數

spatial_ref = arcpy.GetParameter(0)

# 顯示投影坐標系信息

arcpy.AddMessage("Name is: {0}".format(spatial_ref.name))

arcpy.AddMessage("Type is: {0}".format(spatial_ref.type))

arcpy.AddMessage("Factory code is: {0}".format(spatial_ref.factoryCode))

4.2 GetParameterAsText

按照參數在參數列表中的索引位置以文本字符串的形式獲取指定參數。無論參數的數據類型是什么,所有值都將作為字符串返回。

GetParameterAsText函數調用方式為GetParameterAsText (index),其語法說明及返回值信息分別如表11和表12所示

表11? GetParameterAsText函數語法

參數

數據類型

說明

index

Integer

在參數列表中按索引選擇指定參數。

表12? GetParameterAsText函數返回值

數據類型

說明

String

以字符串形式返回的指定參數值。

GetParameterAsText函數示例如示例10所示。

示例10: GetParameterAsText函數

import os

import arcpy

arcpy.env.workspace = arcpy.GetParameterAsText(0)

in_featureclass = arcpy.GetParameterAsText(1)

out_workspace = arcpy.GetParameterAsText(2)

out_featureclass = os.path.join(out_workspace,

??????????????????????????????? os.path.basename(in_featureclass))

arcpy.CopyFeatures_management(in_featureclass, out_featureclass)

5 幾何

5.1 AsShape

將Esri JSON或GeoJSON轉換為ArcPy幾何對象或要素集對象。GeoJSON 是一種地理空間數據的交換格式,可用于對地理數據結構進行編碼。AsShape不支持 GeoJSON 坐標參考系對象,通過 GeoJSON 創建的幾何對象的空間參考將為未知。

AsShape函數調用方式為AsShape (geojson_struct, {esri_json}),其語法說明及返回值信息分別如表13和表14所示

表13? AsShape函數語法

參數

數據類型

說明

geojson_struct

Dictionary

geojson_struct包括type和coordinates。type主要類型有:Point、LineString、Polygon、MultiPoint和MultiLineString。

esri_json

Boolean

設置將輸入JSON作為Esri JSON評估還是作為GeoJSON 評估。如果為True,則將輸入作為Esri JSON評估。

表14? AsShape函數返回值

數據類型

說明

Geometry

AsShape將基于輸入GeoJSON或Esri JSON對象返回幾何對象(PointGeometry、Multipoint、Polyline或Polygon)。如果Esri JSON是要素集,AsShape將返回FeatureSet。

?

AsShape函數示例如示例11所示。

示例11: AsShape函數

import arcpy

geojson_point = {

??? "type": "Point",

??? "coordinates": [5.0, 5.0]}

point = arcpy.AsShape(geojson_point)

6 地理數據庫管理

6.1 AcceptConnections

允許管理員啟用或禁用非管理員用戶連接到企業級地理數據庫的功能。管理員可使用AcceptConnections函數暫時阻止到企業級地理數據庫的連接。該函數用于補充ArcGIS Desktop中企業級地理數據庫屬性頁面中的“連接”選項卡。

AcceptConnections函數調用方式為AcceptConnections (sde_workspace, accept_connections),其語法說明別如表15所示

表15? AcceptConnections函數語法

參數

數據類型

說明

sde_workspace

String

將改變連接屬性的企業級地理數據庫。企業級地理數據庫中指定的連接屬性必須為地理數據庫管理員。

accept_connections

Boolean

用于指示地理數據庫將接受連接 (True) 或拒絕接受連接 (False) 的布爾值。

?

AcceptConnections函數示例如示例12所示。

示例12:AcceptConnection函數。

import arcpy

admin_workspace = "Database Connections/admin.sde"

arcpy.AcceptConnections(admin_workspace, False)

arcpy.DisconnectUser(admin_workspace, 'ALL')

arcpy.ReconcileVersions_management(admin_workspace, 'ALL_VERSIONS',

?????????????????????????????????? 'sde.DEFAULT', with_post='POST')

arcpy.Compress_management(admin_workspace)

# Allow connections.

arcpy.AcceptConnections(admin_workspace, True)

6.2 DisconnectUser

DisconnectUser函數能夠實現允許管理員斷開當前連接到企業級地理數據庫的門戶的連接。

DisconnectUser函數的調用方式為DisconnectUser(sde_workspace, {users}),其語法說明如表16所示。

表16 ?DisconnectUser函數語法

參數

數據類型

說明

sde_workspace

String

包含要斷開連接的用戶的企業級地理數據庫。在企業級地理數據庫中指定的連接文件必須具有管理權限以允許用戶斷開其他連接。

users[users,…]

Interger

指定將斷開哪些用戶與地理數據庫的連接,可選參數為:

1) sde_id —從 ListUsers 函數返回的 ID 值。可將其作為單個 sde_id 或包含多個 sde_id 的列表傳遞到函數。

2) ALL —關鍵字指定應斷開所有已連接的用戶。

?

DisconnectUser函數使用示例如示例13所示。

示例13:使用DisconnectUser函數斷開地理數據庫所有用戶連接。

import arcpy

arcpy.DisconnectUser("Database Connections/admin@sde.sde", "ALL")

7 柵格

7.1 NumPyArrayToRaster

該函數可將NumPy數組轉換為柵格。所生成的柵格數據集的大小和數據類型取決于輸入數組。其中x_cell_size和y_cell_size參數可支持矩形像元。

NumpyArrayToRaster支持將多維 NumPy 數組直接轉換為多波段柵格。如果輸入數組具有兩個維度,則其返回的單波段柵格的大小由這兩個維度(行、列)定義。如果輸入數組具有三個維度,則在其返回的多波段柵格中,波段數等于第一維的長度,而且該柵格的大小由第二維和第三維(波段、行、列)定義。如果輸入數組具有三個維度并且第一維的大小為 1,則會返回單波段柵格。

此函數支持以下地理處理環境設置:輸出坐標系、范圍、捕捉柵格、當前工作空間臨時工作空間。

NumpyArrayToRaster函數調用方式為:NumPyArrayToRaster (in_array, {lower_left_corner}, {x_cell_size}, {y_cell_size}, {value_to_nodata}),其語法說明及返回值信息分別如表17和表18所示。

表17? NumpyArrayToRaster函數語法

參數

數據類型

說明

in_array

NumPyArray

要轉換為柵格的二維或三維的NumPy數組。

lower_left_corner

Point

定義地圖單位中輸出柵格左下角的點對象。默認情況下,左下角的坐標將設置為(0.0, 0.0)。默認值為None。

x_cell_size

Double

x方向的像元大小用地圖單位指定。輸入可為指定的像元大小(類型:雙精度)值或柵格。默認值為1.0

y_cell_size

Double

y 方向的像元大小用地圖單位指定。輸入可為指定的像元大小(類型:雙精度)值或柵格。默認值為 1.0。

value_to_nodata

Double

在輸出柵格中分配到NoData的NumPy數組值。如果沒有為?value_to_nodata?指定任何值,則在生成的柵格中不會有任何NoData值。默認值為 None。

表18? NumpyArrayToRaster函數返回值

數據類型

說明

Raster

輸出柵格。

?

AcceptConnections函數示例如示例14所示。

示例14:NumpyArrayToRaster函數。

import arcpy

import numpy

myArray = numpy.random.random_integers(0,100,2500)

myArray.shape = (50,50)

myRaster = arcpy.NumPyArrayToRaster(myArray,x_cell_size=1)

myRaster.save("C:/output/fgdb.gdb/myRandomRaster")

7.2 RasterToNumPyArray

該方法實現將柵格轉換為NumPy數組。Python NumPy數組專門用于處理大型數組。很多現有Python函數都是為了處理NumPy數組而創建的,NumPy數組是包含在Python的SciPy科學計算包中的最著名數組。

如果數組的定義(左下角以及行數和列數)超出in_raster的范圍,則數組值將分配為 NoData;如果lower_left_corner與像元角不重合,則會自動捕捉到最近像元角的左下角,該捕捉方法采用的規則與“捕捉柵格”環境設置中的規則相同。

RasterToNumPyArray函數支持將多波段柵格直接轉換為多維數組 (ndarray)。

1) 如果輸入?Raster?實例基于多波段柵格,則會返回ndarry,其中第一維的長度表示波段數。該ndarry將具有三個維度:波段、行、列。

2) 如果輸入?Raster?實例基于單個柵格或多波段柵格中的特定波段,則會返回含維度(行、列)的二維數組。

RasterToNumPyArray函數調用方式為:RasterToNumPyArray (in_raster, {lower_left_corner}, {ncols}, {nrows}, {nodata_to_value}),其語法說明及返回值信息分別如表19和表20所示。

表19? RasterToNumpyArray函數語法

參數

數據類型

說明

in_raster

Raster

要轉換為NumPy數組的輸入柵格。

lower_left_corner

Point

可從in_raster中的左下角提取處理塊以轉換為數組。x值和y值采用地圖單位。若未指定值,則將使用輸入柵格的原點。默認值為 None。

ncols

Integer

in_raster中要轉換為NumPy數組的lower_left_corner中的列數。若未指定值,則將使用輸入柵格的列數。默認值為 None。

nrows

Integer

in_raster中要轉換為 NumPy 數組的lower_left_corner中的行數。若未指定值,則將使用輸入柵格的行數。默認值為 None。

nodata_to_value

Variant

在生成的 NumPy 數組中分配in_rasterNoData值的值。若未指定值,則將使用in_raster的 NoData 值。默認值為 None。

?

表20? NumpyArrayToRaster函數返回值

數據類型

說明

NumPyArray

輸出的 NumPy 數組。

?

RasterToNumPyArray函數示例如示例15所示。

示例15:RasterToNumPyArray函數。

import arcpy

import numpy

inRas = arcpy.Raster('C:/data/inRaster')

lowerLeft = arcpy.Point(inRas.extent.XMin,inRas.extent.YMin)

cellSize = ras.meanCellWidth

arr = arcpy.RasterToNumPyArray(inRas,nodata_to_value=0)

arrSum = arr.sum(1)

arrSum.shape = (arr.shape[0],1)

arrPerc = (arr)/arrSum

#Convert Array to raster (keep the origin and cellsize the same as the input)

newRaster = arcpy.NumPyArrayToRaster(arrPerc,lowerLeft,cellSize,

???????????????????????????????????? value_to_nodata=0)

newRaster.save("C:/output/fgdb.gdb/PercentRaster")

?

?

參考:?https://pro.arcgis.com/zh-cn/pro-app/arcpy/main/arcgis-pro-arcpy-reference.htm

總結

以上是生活随笔為你收集整理的ArcPy常用函数梳理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。