全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
列表函数
这些函数中每个函数的结果都是一个列表,该列表为值列表。列表可以包含任何类型的数据,如字符串(例如,可以是数据集的路径、字段或表中的行)。创建具有所需值的列表后,可在脚本中遍历该列表以处理各个值。
了解有关列出工具、工具箱及环境设置的详细信息
列表函数参数
这些函数的参数是相似的。一些函数,例如 ListFields,需要输入数据集值,因为函数列出的项目驻留在特定的对象或数据集中。其他函数则不需要输入数据集值,因为它们在当前工作空间中列出数据,该工作空间是在环境设置中定义的。所有函数都具有一个通配符参数,用于限制按名称列出的对象或数据集。一个通配符定义一个名称过滤器,新创建的列表中的所有内容都必须通过该过滤器。例如,您可能想要列出工作空间中所有以字母 G 开头的要素类。下例说明了如何进行此操作:
import arcpy
# Set the workspace. List all of the feature classes that start with 'G'
#
arcpy.env.workspace = "D:/St_Johns/data.gdb"
fcs = arcpy.ListFeatureClasses("G*")
还可将列表限制为匹配特定的数据属性,例如仅匹配面要素类、整型字段或 coverage 数据集。这就是所有函数中类型参数所起的作用。在下一示例中,使用一个通配符和一个数据类型对工作空间中的要素类进行过滤,这样只有以字母 G 开头的面要素类会出现在结果列表中:
# Set the workspace. List all of the polygon feature classes that
# start with 'G'
#
arcpy.env.workspace = "D:/St_Johns/data.gdb"
fcs = arcpy.ListFeatureClasses("G*", "polygon")
使用列表
ArcPy 使用 Python 列表类型作为其全部列表函数结果的返回类型,因为列表支持简单数据访问所需的灵活性和多种数据类型。for 循环非常适用于处理列表,因为使用它可以一次一个项目的方式浏览列表。for 循环可遍历表中的每一个项目。下面的示例是使用 for 循环遍历前一个示例中生成的列表:
# For each feature class in the list of feature classes
#
for fc in fcs:
# Copy the features from the workspace to a folder
#
arcpy.CopyFeatures_management(fc, "D:/St_Johns/Shapefiles/" + fc)
下面是另一个如何使用 ArcPy 列表函数的示例。该脚本用于为文件夹内形式为标记图像文件格式 (TIFF) 图像的所有栅格创建栅格金字塔。
# Set the workspace. List all of the TIFF files
#
arcpy.env.workspace= "D:/St_Johns/images"
# For each raster in the list of rasters
#
for tiff in arcpy.ListRasters("*", "TIF"):
# Create pyramids
#
arcpy.BuildPyramids_management(tiff)
通过列表可以采用多种方式使用和管理列表函数的结果。列表是一种用途广泛的 Python 类型,提供了大量可用于处理和提取信息的方法(append、count、extend、index、insert、pop、remove、reverse、sort)。
例如,如果想知道某个工作空间中有多少要素类,可以使用 Python 内置的 len 函数来获取该数值。
import arcpy
arcpy.env.workspace = "c:/St_Johns/Shapefiles"
fcs = arcpy.ListFeatureClasses()
# Use Python's built-in function len to reveal the number of feature classes
# in the workspace
#
fcCount = len(fcs)
print(fcCount)
提示:
列表可以轻易地显示其内容。可使用多种方法来操作列表,包括 sort、append 和 reverse。
>>> import arcpy
>>> arcpy.env.workspace = "c:/data/water.gdb"
>>> fcs = arcpy.ListFeatureClasses()
>>> print(fcs)
['water_pipes', 'water_services', 'water_stations']
>>> fcs.sort(reverse=True)
>>> print(fcs)
['water_stations', 'water_services', 'water_pipes']
由于列表是有序集合,因此还允许进行索引和切分。
>>> print(fcs[0])
water_stations
>>> print(fcs[1:])
['water_services', 'water_pipes']
搜索目录和子目录
ArcPy 列表函数可用于迭代单个目录或工作空间,但是在某些情况下,需要遍历其他子文件夹和工作空间。对于文件,通过使用 Python 的 os.walk 函数可以实现这一点,该函数用于递归迭代或遍历文件夹,以找到其他子文件夹和文件。但是,os.walk 严格基于文件并且无法识别数据库和不基于文件的数据类型,这些对 ARCGIS 很重要。例如,os.walk 将无法看到文件地理数据库工作空间或要素数据集中的栅格数据集或其他内容。
在 arcpy.da 模块中,Walk 函数也可用于遍历目录,还可浏览数据库并标识 ARCGIS 数据类型。
Walk(top, topdown, onerror, followlinks, datatype, type)
通过从上至下或从下至上遍历树,在目录树中生成数据名称。树中的每个目录/工作空间都会生成一个三元组(dirpath、dirnames、filenames)。
arcpy.da.Walk 函数
注:
与列表函数不同,Walk 并不使用工作空间环境来标识其开始工作空间。相反,Walk 遍历的第一个开始(或 top)工作空间在其第一个参数 top 中指定。
在以下示例中,Walk 函数用于遍历目录树并标识其中包含的所有面要素类。
使用 Walk 函数编录 Polygon 要素类。
import arcpy
import os
workspace = "c:/data"
feature_classes = []
for dirpath, dirnames, datatypes in arcpy.da.Walk(workspace,
datatype="FeatureClass",
type="Polygon"):
# Append all Polygon feature classes to a list for further processing
for datatype in datatypes:
feature_classes.append(os.path.join(dirpath, filename))
在某些情况下,在遍历目录树时可能需要忽略某些子目录,例如,备份文件的目录。如果 topdown 参数为 True 或未指定,则可以就地修改工作空间,从而避开不需要的工作空间或在创建时添加其他工作空间。
使用 Walk 函数为栅格数据创建目录。将忽略文件夹中所有名为 back_up 的栅格。
import arcpy
import os
workspace = "c:/data"
rasters = []
for dirpath, dirnames, filenames in arcpy.da.Walk(
workspace, topdown=True, datatype="RasterDataset"):
# Disregard any folder named 'back_up' in creating list
# of rasters
if "back_up" in dirnames:
dirnames.remove('back_up')
for filename in filenames:
rasters.append(os.path.join(dirpath, filename))
示例:使用 arcpy.da.Walk 分析数据
Walk 函数(以及 list 函数)通常用于批量处理数据。以下脚本利用 arcpy.da.Walk 函数来分析 SDE 工作空间中的所有数据集。
import arcpy
import os
# SDE workspace to be used
admin_workspace = "Database Connections/tenone@sde.sde"
analyze_contents = []
for dirpath, workspaces, datatypes in arcpy.da.Walk(
admin_workspace,
followlinks=True,
datatype=['Table', 'FeatureClass', 'RasterDataset']):
# Create full path, and add tables, feature classes, raster datasets
analyze_contents += [
os.path.join(dirpath, datatype) for datatype in datatypes]
# create full path, add the feature datasets of the .sde file
analyze_contents += [
os.path.join(dirpath, workspace) for workspace in workspaces]
# Execute Analyze Datasets on the complete list
arcpy.AnalyzeDatasets_management(admin_workspace,
"SYSTEM",
analyze_contents,
"ANALYZE_BASE",
"ANALYZE_DELTA",
"ANALYZE_ARCHIVE")
提示:
默认情况下,不会遍历 sde 连接文件,以免意外打开远程数据库。要有意地遍历 sde 连接文件,请将 followlinks 参数设置为 True。