【280】◀▶ ArcPy 常用工具说明

目录:

一、相关技巧

二、工具说明


一、相关技巧

  技巧1:将工具从工具箱拖拽到 Python 窗体中自动会生成相应的函数,于是可以快速定位函数名称!

  技巧2:将通过工具箱实现的操作结果拖拽到 Python 窗体,可以自动生成处理的代码,于是可以快速了解相关参数含义!


二、工具说明


01   CalculateStatistics 计算栅格数据集或镶嵌数据集的统计数据。
02   MakeXYEventLayer 根据源表中定义的X和Y坐标创建新的点要素图层。
03   Idw 使用反距离加权法 (IDW) 将点插值成栅格表面。
04   RasterCalculator 使用 Python 语法构建和执行单个地图代数表达式。
05   Clip_analysis 提取与裁剪要素相重叠的输入要素。
06   ExtractByMask 提取所定义掩膜区域内的栅格像元。
07   CalculateAreas_stats 计算面要素类中每个要素的面积值。
08   AddField 向表或要素类表、要素图层等添加新字段。
09   CalculateField 为要素类、要素图层或栅格计算字段的值。
10   AlterField 重命名字段和字段别名,或更改字段属性。
11   ApplySymbologyFromLayer 此工具用于将来自图层的符号系统应用到输入图层。
12   CreateFeatureclass 创建空要素类。

序号 函数名称  

功能说明

  语法 & 举例
01 Calculate Statistics
(Data Management)
 

====<<<< Description >>>>====

计算栅格数据集或镶嵌数据集的统计数据。需要对栅格和镶嵌数据集进行统计方可执行诸如应用对比度拉伸或分类数据等任务。
———————————————————————————-

====<<<< Syntax >>>>====

CalculateStatistics_management (in_raster_dataset, {x_skip_factor}, {y_skip_factor}, {ignore_values}, {skip_existing}, {area_of_interest})
———————————————————————————-

====<<<< Parameter >>>>====

◈  in_raster_dataset:输入栅格数据集或镶嵌数据集。

 
# 获取内部的栅格数据
files_raster = arcpy.ListRasters()

# 对数据进行遍历,并执行工具操作
for f in files_raster:
	arcpy.CalculateStatistics_management(f)
02

Make XY Event Layer
(Data Management)

 

====<<<< Description >>>>====

根据源表中定义的 X 和 Y 坐标创建新的点要素图层。如果源表包含 Z 坐标(高程值),则可以在创建事件图层时指定该字段。由此工具创建的图层是临时图层。相当于 File -> Add Data -> Add XY Data
———————————————————————————-

====<<<< Syntax >>>>====

MakeXYEventLayer_management (table, in_x_field, in_y_field, out_layer, {spatial_reference}, {in_z_field})
———————————————————————————-

====<<<< Parameter >>>>====

◈  table:定义要创建的点要素位置的表(包含 X 和 Y 坐标)。
◈  in_x_field:输入表中包含 X 坐标的字段。
◈  in_y_field:输入表中包含 Y 坐标的字段。
◈  out_layer:输出点事件图层的名称。

 
# 获取内部的数据
files_txt = arcpy.ListFiles()

# 对数据进行遍历,并执行工具操作
for f in files_txt:
	# 将txt数据导入
	arcpy.MakeXYEventLayer_management(f, "Longitude", "Latitude", f)
 03 IDW
(Spatial Analyst)

 

 

====<<<< Description >>>>====

使用反距离加权法 (IDW) 将点插值成栅格表面。
———————————————————————————-

====<<<< Syntax >>>>====

Idw (in_point_features, z_field, {cell_size}, {power}, {search_radius}, {in_barrier_polyline_features})
———————————————————————————-

====<<<< Parameter >>>>====

◈  in_point_features:包含要插值到表面栅格中的 z 值的输入点要素。
◈  z_field:存放每个点的高度值或量级值的字段。
◈  cell_size:要创建的输出栅格的像元大小。(可选)
◈  power:距离的指数。(可选)

———————————————————————————-

====<<<< Return Value >>>>====

 

◈  out_raster:输出插值后的表面栅格。(不写扩展名的话会生成带有文件夹形式的栅格数据,如果写 *.tif,则直接生成 tif 文件,参考:Raster 类

 

 
# 获取内部的数据
files_txt = arcpy.ListFiles()

# 对数据进行遍历,并执行工具操作,注意加扩展名 tif,否则容易出错
# 不将文件返回到变量直接保存,否则无法遍历
for f in files_txt:
	(arcpy.sa.Idw(f, "sd")).save("D:/IDW/" + f + ".tif")
04 Raster Calculator
(Spatial Analyst)
 

====<<<< Description >>>>====

在类似计算器的界面中,使用 Python 语法构建和执行单个地图代数表达式。

注意:引用函数的名称为:arcpy.gp.RasterCalculator_sa
———————————————————————————-

====<<<< Syntax >>>>====

RasterCalculator (expression, output_raster)
———————————————————————————-

====<<<< Parameter >>>>====

◈  expression:“地图代数”表达式。(表达式通过单引号连接,因为双引号需要显示在SQL语句中,例如变量名称
◈  output_raster:生成输出的信息。(不写扩展名的话会生成带有文件夹形式的栅格数据,如果写 *.tif,则直接生成 tif 文件)

 
lyrs = arcpy.mapping.ListLayers(mxd)

# 注意写表达式的时候不能有字符串函数什么的,而且变量名需要用双引号
# 因此可以先print下效果
# SQL函数很无语(先通过工具实现,再将结果拖入获取代码)

for i in range(9, 21):
    arcpy.gp.RasterCalculator_sa('8.64012 - 14.84545*Log10("' \
+ lyrs[i].name + '") + 10.54793*Power(Log10("' + lyrs[i].name \
+ '"), 2) - 3.45375 * Power(Log10("' + lyrs[i].name + '"), 3) \
+ 0.4254 * Power(Log10("' + lyrs[i].name + '"), 4)', lyrs[i].name + "_sd.tif")
05 Clip
(Spatial Analyst)
 

====<<<< Description >>>>====

提取与裁剪要素相重叠的输入要素。(切割矢量)
———————————————————————————-

====<<<< Syntax >>>>====

Clip_analysis (in_features, clip_features, out_feature_class, {cluster_tolerance})
———————————————————————————-

====<<<< Parameter >>>>====

◈  in_features:要裁剪的要素。(图层也可以)
◈  clip_features:用于裁剪输入要素的要素。(图层也可以)
◈  out_feature_class:待创建的要素类。

   

arcpy.env.workspace=r"D:\Working\2017"
for i in range(0, 85-5):
     arcpy.Clip_analysis(lyrs[i], "Wenzhou", "mwz_wz_" + lyrs[i].name + ".shp")

 

 06 Extract by Mask
(Spatial Analyst)
 

====<<<< Description >>>>====

提取所定义掩膜区域内的栅格像元。(切割栅格)

注意:引用函数的名称为:arcpy.sa.RasterCalculator_sa
———————————————————————————-

====<<<< Syntax >>>>====

ExtractByMask (in_raster, in_mask_data)
———————————————————————————-

====<<<< Parameter >>>>====

◈  in_raster:提取像元的输入栅格。(图层也可以)
◈  in_mask_data:用于定义提取区域的输入掩膜数据。(图层也可以)

———————————————————————————-

====<<<< Return Value >>>>====

◈  out_raster:输出插值后的表面栅格。(不写扩展名的话会生成带有文件夹形式的栅格数据,如果写 *.tif,则直接生成 tif 文件,参考:Raster 类

 
# mon 用来命名文件
# 将栅格数据通过给定的矢量文件剪切
# 并将数据按照月份顺序保存

mon = 0
for i in range(8,20):
    mon = mon + 1
    (arcpy.sa.ExtractByMask(lyrs[i], lyrs[0])).save("D:/M_"+str(mon) + ".tif")
 07 CalculateAreas_stats  

====<<<< Description >>>>====

计算面要素类中每个要素的面积值。
———————————————————————————-

====<<<< Syntax >>>>====

CalculateAreas_stats((Input_Feature_Class, Output_Feature_Class)
———————————————————————————-

====<<<< Parameter >>>>====

◈  Input_Feature_Class:输入面要素类。
◈  Output_Feature_Class:输出要素类。此要素类是输入要素类的副本,但添加(或更新)了字段 F_AREA。

   

 

>>> import arcpy
>>> arcpy.CalculateAreas_stats("WORLD_continent", "world_area.shp")

 

 

 

08 AddField_management  

====<<<< Description >>>>====

向表或要素类表、要素图层、栅格目录和/或带属性表的栅格添加新字段。
———————————————————————————-

====<<<< Syntax >>>>====

AddField_management (in_table, field_name, field_type, {field_precision}, {field_scale}, {field_length}, {field_alias}, {field_is_nullable}, {field_is_required}, {field_domain})
———————————————————————————-

====<<<< Parameter >>>>====

◈  in_table:要添加指定字段的输入表。(shapefile、栅格目录等)
◈  field_name:要添加到输入表的字段的名称。
◈  field_type:新字段的字段类型。(TEXT / FLOAT / DOUBLE / SHORT / LONG / DATE)
◈  field_precision:可存储在字段中的位数。所有位都将被计算在内,而无论其处于小数点的哪一侧。
◈  field_scale:可存储在字段中的小数位数。
◈  field_length:要添加的字段的长度。它为字段的每条记录设置最大允许字符数。
◈  field_alias:指定给字段名称的备用名称。
◈  field_is_nullable:指定该字段是否可包含空值。
  NON_NULLABLE:字段不允许空值。
  NULLABLE:字段允许空值。这是默认设置。

◈  field_is_required:指定要创建的字段是否是表的必填字段。
  NON_REQUIRED:字段不是必填字段。这是默认设置。
  REQUIRED:此字段是必填字段。
◈  field_domain:用于约束地理数据库中的表、要素类或子类型的任何特定属性的允许值。

   

# 添加文本字段
>>> arcpy.AddField_management(lyr, "Name", "TEXT", 
... "", "", 10, "Name_alias", "NULLABLE", "NON_REQUIRED")

# 添加双精度字段
>>> arcpy.AddField_management(lyr, "Area", "DOUBLE", 6)

 

 09 CalculateField_management  

====<<<< Description >>>>====

为要素类、要素图层或栅格计算字段的值。
———————————————————————————-

====<<<< Syntax >>>>====

CalculateField_management (in_table, field, expression, {expression_type}, {code_block})
———————————————————————————-

====<<<< Parameter >>>>====


◈  in_table:包含将通过新的计算进行更新的字段的表。
◈  field:将通过新的计算进行更新的字段。
◈  expression:创建值以填充所选行的简单计算表达式。
◈  expression_type:指定要使用的表达式的类型。
  VB:表达式将使用标准 VB 格式编写。这是默认设置。
  PYTHON:表达式将使用标准 Python 格式编写。地理处理器方法和属性的使用与创建 9.2 版地理处理器相同。
  PYTHON_9.3:表达式将使用标准 Python 格式编写。地理处理器方法和属性的使用与创建 9.3 版地理处理器相同。
◈  code_block:允许为复杂表达式输入代码块。

———————————————————————————-

参考:【311】Python 构建 ArcMap 标注表达式

注意:两者的表达式形式略有不同,推荐的方法是先通过 ArcMap 实现,然后将代码添加到 ArcPy 中。

参考:计算字段示例(官方帮助)

 

 代码块说明:在 code_block 对应参数的部分编写函数,用三引号,在 expression 对应参数进行调用

# 默认用中括号作为参数
>>> arcpy.CalculateField_management(lyr, "name", "[CONTINENT]")

# 通过python代码实现
>>> arcpy.CalculateField_management(lyr, "name", "!CONTINENT!.upper()", "PYTHON_9.3")

# 通过python代码块实现
>>> arcpy.CalculateField_management(lyr, "name", "changeName(!CONTINENT!)", "PYTHON_9.3", """
... def changeName(con):
...   if len(con) < 8:
...     return "Alex"
...   else:
...     return "Alex Lee"
... """)

 

 10 AlterField_management  

====<<<< Description>>>>====

重命名字段和字段别名,或更改字段属性。
———————————————————————————-

====<<<< Syntax >>>>====

AlterField_management (in_table, field, {new_field_name}, {new_field_alias}, {field_type}, {field_length}, {field_is_nullable}, {clear_field_alias})
———————————————————————————-

====<<<< Parameters >>>>====

◈  in_table:包含待更改字段的输入表或要素类。
◈  field:待更改字段的名称。如果字段为必填字段 (isRequired=true),则只有字段别名是可更改的。
◈  new_field_name:字段的新名称。
◈  new_field_alias:字段的新字段别名。
◈  field_type:字段的新字段类型。
◈  field_length:字段的新长度。

———————————————————————————-

参考:Parameters not valid in batch Alter field Arcpy

参考:Change field names with Python

说明:在 ArcGIS 10.4.1 版本测试的时候一直提示 Invalid input,目前没解决。(2018-4-25)

   
11 ApplySymbology
FromLayer_management
 

====<<<< Description >>>>====

此工具用于将来自图层的符号系统应用到输入图层。此工具可应用于要素、栅格、网络分析以及 ArcMap 内容列表中的 TIN 地理统计层文件或图层。
———————————————————————————-

====<<<< Syntax >>>>====

ApplySymbologyFromLayer_management (in_layer, in_symbology_layer)
———————————————————————————-

====<<<< Parameter >>>>====

◈  in_layer:将应用符号系统的图层。
◈  in_symbology_layer:将此图层的符号系统应用于输入图层。

   

# 获取图层
lyrs = arcpy.mapping.ListLayers(df)
# 将图层[1]的样式应用到图层[0]
arcpy.ApplySymbologyFromLayer_management(lyrs[0],lyrs[1])

 

12 CreateFeatureclass
_management
 

====<<<< Description >>>>====

在 ArcSDE 地理数据库、文件地理数据库或个人地理数据库中创建空要素类;在文件夹中此工具将创建 shapefile。
———————————————————————————-

 

====<<<< Syntax >>>>====

 

CreateFeatureclass_management (out_path, out_name, {geometry_type}, {template}, {has_m}, {has_z}, {spatial_reference}, {config_keyword}, {spatial_grid_1}, {spatial_grid_2}, {spatial_grid_3})
———————————————————————————-

 

====<<<< Parameter >>>>====

 

◈  out_path:将在其中创建输出要素类的 ArcSDE 地理数据库、文件地理数据库、个人地理数据库或文件夹。此工作空间必须已经存在。
◈  out_name:要创建的要素类的名称。(加与不加 .shp 都可以)
◈  geometry_type:要素类的几何类型。
  POINT、MULTIPOINT、POLYGON、POLYLINE。
◈  template:用作模板以定义要素类的属性方案的要素类。(相同的字段)

 

   

>>> import arcpy
>>> arcpy.CreateFeatureclass_management(r"D:\tmp", "point", "POINT")
<Result 'D:\\tmp\\point.shp'>

 

 abcdefi          

转载自:https://blog.csdn.net/weixin_34396103/article/details/86255522

You may also like...