ArcGIS Pro空间采样工具详解:从简单随机到聚类采样
ArcGIS Pro空间采样工具详解:从简单随机到聚类采样
在地理信息系统(GIS)中,空间采样是获取研究区域数据的重要方法。ArcGIS Pro提供了强大的"创建空间采样位置"工具,支持多种采样设计,包括简单随机、分层、系统(格网化)和聚类采样。本文将详细介绍这些采样方法的原理和应用场景,并提供具体的参数设置和Python代码示例。
采样方法概述
简单随机采样
简单随机采样是在研究区域内随机创建样本点,每个位置被选为样本位置的可能性相同。研究区域将被视为单个区域,面或栅格类别之间的所有边界都将被忽略。这种方法适用于需要对整个研究区域进行均匀采样的场景。
应用示例:如果研究区域是一片茂密的森林,可以假设每个位置都有一棵树,则可以使用简单随机采样对森林内的树木进行随机采样。
分层随机采样
分层随机采样通过将研究区域划分为不同的分层(例如土壤类别或土地利用类型),并在每个分层内分别执行简单随机采样来创建样本点。这种方法确保了样本中包含所有分层,适用于需要对不同特征区域进行均衡采样的场景。
应用示例:如果将国家公园划分为不同的高程等级,则可以采用分层随机采样的方式分别采集每个高程等级的土壤样本。这确保了公园所有高程都有足够的土壤采样。
系统采样
系统采样在研究区域内以格网化、非随机模式创建样本位置。格网是通过规则形状的面(例如六边形、正方形或三角形)的细分曲面创建而成。样本位置可以作为细分曲面或点(细分曲面的质心)返回。这种方法有助于确保研究区域的任何部分的采样数量均不超过其他部分,当目标是创建样本地图而不是对整个研究区域进行推断时,这通常是可取的。
应用示例:要研究海洋区域的海底,您可以创建样本位置的六边形格网来对海洋植物物种进行采样。
聚类采样
聚类采样通过创建系统样本并从细分曲面中随机选择一些面来创建样本面。生成的面称为聚类,通常会对这些聚类进行详尽的研究,在每个聚类内尽可能多地进行采样。这种方法适用于需要研究样本在短距离内的相互作用的场景。
应用示例:在对昆虫群落进行采样时,可以使用聚类采样来创建一个图的小区域,并对聚类内的所有昆虫群落进行采样。
对于分层采样,可以通过以下三种方式定义分层:
- 按单个面分层:面要素类中的每条记录都是不同的层级。
- 按连续栅格区域分层:整数(分类)栅格的每个区域都将是一个层级。
- 按分层 ID 字段分层:具有相同分层 ID 值的所有面或栅格单元都将是一个层级。
高级采样设计
该工具还可用于创建更高级的采样设计,包括两阶段聚类采样和混合(复合)采样。两阶段聚类采样首先创建聚类样本,然后在每个聚类内创建点;混合采样则根据不同的采样设计分别创建采样位置,然后将它们合并到单个数据集中。
参数说明
以下是"创建空间采样位置"工具的主要参数说明:
- 输入研究区域:将在其中创建样本位置的输入研究区域。研究区域必须是面或整数(分类)栅格。
- 输出要素:代表样本位置的输出要素。对于简单随机和分层采样,输出要素将是点;对于聚类采样,输出将为面;对于系统采样,输出可以是点或面。
- 采样方法:指定将用于创建样本位置的采样方法,包括简单随机、按单个面分层、按连续栅格区域分层、按分层 ID 字段分层、系统和聚类采样。
- 分层 ID 字段:对于按分层 ID 字段进行分层采样,分层 ID 字段定义分层。
- 分层样本计数分配方法:对于分层采样,指定将用于确定将在每个层级中创建的样本位置数量的方法。
- 图格形状:对于系统采样和聚类采样,指定格网细分曲面中每个面的形状。
- 图格大小:对于系统采样和聚类采样,细分曲面中每个面的大小。
- H3 分辨率:对于使用 H3 六边形图格进行系统或聚类采样,指定六边形的 H3 分辨率。
- 样本数:将创建的样本位置的数量。
- 每个层级的样本数:对于每个层级中样本数相等的分层采样,是指每个层级内创建的样本位置的数量。
- Population 字段:当样本计数等于或与群体字段成比例时,分层采样的群体字段。
- 输出几何类型:对于系统采样,指定样本位置是细分曲面还是细分曲面的质心(点)。
- 采样点之间的最小距离:对于简单随机和分层采样,样本位置之间允许的最小距离。
- 空间关系:指定背景细分曲面中的哪些面将作为采样位置包含在内。
Python代码示例
以下是使用"创建空间采样位置"工具的Python代码示例:
示例1:简单随机采样
import arcpy
# 创建50个随机采样位置在合并的加利福尼亚县中
arcpy.management.CreateSpatialSamplingLocations(
in_study_area="CA_counties",
out_features="outputSamplingLocations",
sampling_method="RANDOM",
strata_id_field=None,
strata_count_method="EQUAL",
bin_shape="HEXAGON",
bin_size=None,
h3_resolution=7,
num_samples=50,
num_samples_per_strata=100,
population_field=None,
geometry_type="POINT",
min_distance="15 NauticalMilesInt",
spatial_relationship="HAVE_THEIR_CENTER_IN"
)
示例2:按单个面分层采样
import arcpy
# 允许覆盖输出
arcpy.env.overwriteOutput = True
# 定义研究区域和输出要素
inputStudyArea = "C:/samplingdata/inputs.gdb/study_area_polygons"
outputFeatures = "C:/samplingdata/outputs.gdb/out_samples_SBIP"
# 定义采样方法
samplingMethod = "STRAT_POLY"
# 在每个多边形中创建100个样本
strataCountMethod = "EQUAL"
numSamplesPerStrata = 100
# 定义同一多边形中任意两点之间的最小距离
minDistance = "15 Meters"
# 运行工具
try:
arcpy.management.CreateSpatialSamplingLocations(inputStudyArea, outputFeatures,
samplingMethod, "", strataCountMethod, "", "", "", "",
numSamplesPerStrata, "", "", minDistance)
except arcpy.ExecuteError:
# 如果运行工具时发生错误,打印错误消息
print(arcpy.GetMessages())
示例3:按连续栅格区域分层采样
import arcpy
# 允许覆盖输出
arcpy.env.overwriteOutput = True
# 定义研究区域和输出要素
inputStudyArea = "C:/samplingdata/raster_study_area.tif"
outputFeatures = "C:/samplingdata/outputs.gdb/out_samples_SBCRR"
# 定义采样方法
samplingMethod = "STRAT_RAST"
# 创建100个点,并按区域面积比例分配样本
strataCountMethod = "PROP_AREA"
numSamples = 100
# 运行工具
try:
arcpy.management.CreateSpatialSamplingLocations(inputStudyArea, outputFeatures,
samplingMethod, "", strataCountMethod, "", "", "", numSamples)
except arcpy.ExecuteError:
# 如果运行工具时发生错误,打印错误消息
print(arcpy.GetMessages())
示例4:按分层 ID 字段分层采样
import arcpy
# 允许覆盖输出
arcpy.env.overwriteOutput = True
# 定义研究区域和输出要素
inputStudyArea = "C:/samplingdata/land_use_raster.tif"
outputFeatures = "C:/samplingdata/outputs.gdb/out_samples_SBSIDF"
# 定义采样方法
samplingMethod = "STRAT_ID"
# 所有具有相同值的栅格单元都在同一层中
strataIDField = "LandUse"
# 使用人口字段定义每个类别的样本数量
strataCountMethod = "FIELD"
populationField = "Population"
# 运行工具
try:
arcpy.management.CreateSpatialSamplingLocations(inputStudyArea, outputFeatures,
samplingMethod, strataIDField, strataCountMethod, "", "", "",
"", "", populationField)
except arcpy.ExecuteError:
# 如果运行工具时发生错误,打印错误消息
print(arcpy.GetMessages())
示例5:系统采样
import arcpy
# 允许覆盖输出
arcpy.env.overwriteOutput = True
# 定义研究区域和输出要素
inputStudyArea = "C:/samplingdata/inputs.gdb/study_area_polygons"
outputFeatures = "C:/samplingdata/outputs.gdb/out_samples_SYS"
# 定义采样方法
samplingMethod = "SYSTEMATIC"
# 在六边形镶嵌中创建采样点
binShape = "HEXAGON"
binSize = "10000 SquareFeet"
outputGeometryType = "POINT"
# 运行工具
try:
arcpy.management.CreateSpatialSamplingLocations(inputStudyArea, outputFeatures,
samplingMethod, "", "", binShape, binSize, "", "", "", "",
outputGeometryType)
except arcpy.ExecuteError:
# 如果运行工具时发生错误,打印错误消息
print(arcpy.GetMessages())
示例6:聚类采样
import arcpy
# 允许覆盖输出
arcpy.env.overwriteOutput = True
# 定义研究区域和输出要素
inputStudyArea = "C:/samplingdata/inputs.gdb/study_area_polygons"
outputFeatures = "C:/samplingdata/outputs.gdb/out_samples_CLUST"
# 定义采样方法
samplingMethod = "CLUSTER"
# 创建钻石形镶嵌,并随机选择100个多边形
binShape = "DIAMOND"
binSize = "1000000 SquareFeet"
numSamples = 100
spatialRelationship = "INTERSECT"
# 运行工具
try:
arcpy.management.CreateSpatialSamplingLocations(inputStudyArea, outputFeatures,
samplingMethod, "", "", binShape, binSize, "", numSamples, "",
"", "", "", spatialRelationship)
except arcpy.ExecuteError:
# 如果运行工具时发生错误,打印错误消息
print(arcpy.GetMessages())
通过以上示例,可以清晰地看到如何使用ArcGIS Pro的"创建空间采样位置"工具进行各种空间采样设计。这些方法和参数设置为GIS专业人士和研究人员提供了强大的工具支持,帮助他们更有效地进行空间数据分析和研究。