成对缓冲 (分析)

描述

用于使用并行处理方法在输入要素周围某一指定距离内创建缓冲区多边形。

成对缓冲工具与缓冲工具非常相似。成对缓冲工具能够并行处理缓冲要素。

插图

“成对缓冲”图示

使用方法

  • 此工具支持并行处理因子环境。如果环境未设置(默认情况下)或设置为 100,则将启用完全并行处理,同时该工具尝试将工作分配给计算机上的所有逻辑内核。将环境设置为 0 将禁用并行处理。在 1 到 99 之间指定一个因子时,工具将通过应用公式(并行处理因子 / 100 * 逻辑内核数)确定要使用的逻辑内核的百分比,其结果将向上舍入到最近的整数值。如果此公式的结果是 0 或 1,则将不启用并行处理。

  • 此工具依赖于具有空间索引的输入要素。使用添加空间索引工具创建索引(专门针对 shapefile)或重新构建现有索引(如果无法确定其是否正确)。

  • 缓冲区的工作原理所述,缓冲区工具的一个重要特征为方法参数,该参数决定了缓冲区的构建方式。构建缓冲区有两种基本方法(欧式方法和测地线方法),如下所示:

    • 欧式缓冲区测量二维笛卡尔平面中的距离,该平面用来计算平坦表面(笛卡尔平面)上两点之间的直线距离或欧氏距离。欧氏缓冲区是更常见的缓冲区类型,适合于分析投影坐标系中要素周围的距离,这些距离侧重于相对较小的区域(如一个 UTM 带)。
    • 测地线缓冲区表示地球的实际形状(即椭圆体,更准确地说是大地水准面)。并计算曲面(大地水准面)上而不是平坦表面(笛卡尔平面)上两点间的距离。在下列情况下,您应始终考虑创建测地线:
      • 输入要素处于分散状态(覆盖多个 UTM 带、大面积区域甚至整个地球)。
      • 输入要素的空间参考(地图投影)为保留其他属性(如面积)使距离发生变形。
      测地线缓冲区在平面地图上可能会显示异常。但在三维地球上可正确显示(您也可以使用 3D 场景或 ArcGIS Earth 查看三维地球上的地理数据)。有关详细信息,请参阅缓冲区的工作原理

    方法参数确定了缓冲区的创建方式。

    • 默认选项为平面(Python 中为 method="PLANAR")。该选项会根据输入的坐标系自动确定要使用的方法。
      • 如果输入要素位于投影坐标系中,则将创建欧氏缓冲区。
      • 如果输入要素位于地理坐标系中且指定的缓冲距离单位为线性单位(米、英尺等,而非诸如度之类的角度单位),则会创建测地线缓冲区。
      • 选项产生的结果与 ArcGIS 10.3 版本之前的缓冲区工具结果相同。
    • 无论使用哪种输入坐标系,测地线(Python 中为 method="GEODESIC")均会创建形状不变的测地线缓冲区。形状不变的测地线缓冲区会在创建输出测地线缓冲区之前增密输入要素,从而创建可更准确地表示输入要素形状的缓冲区。如果您关注缓冲区的形状以及该形状与原始输入要素的匹配程度,建议您使用此选项进行研究,尤其在输入数据位于地理坐标系中时。在某些情况下,与使用平面选项创建测地线缓冲区相比,使用此选项创建缓冲区可能需要花费更长的时间,但生成的缓冲区能更加精确地匹配输入要素的形状。

    注:

    您可以使用投影工具更改要素类的坐标系,或在执行缓冲区工具之前对输出坐标系地理处理环境进行设置,这一坐标系将用于创建缓冲区。

    使用平面方法时,利用最小化距离变形且在地理上适用于输入数据的投影(例如等距圆锥投影等距方位投影),可提高使用经过投影了的输入数据所创建的缓冲区的精度。

  • 对投影坐标系中的要素进行缓冲并输出到地理数据库要素类时,所创建的几何可能包含圆弧段(缓冲点时,输出始终为圆弧)。如果含有圆弧的缓冲区重新投影到不同的坐标系,原始缓冲区的位置和大小将会发生变形,但缓冲区的形状将会保持不变,这会导致重新投影的缓冲区无法继续精确表示原始缓冲区所覆盖的区域。如果重新投影含有圆弧的缓冲区,请先使用增密工具将圆弧段转化成直线,然后再对增密缓冲区进行重新投影。

  • 输出要素类将具有一个 BUFF_DIST 字段,该字段包含用于缓冲各要素的缓冲距离(使用输入坐标系的线性单位)。使用测地线方法创建缓冲区时,任何情况下输入的缓冲距离单位均将转换为米。

    如果输入中存在名为 BUFF_DIST 的字段,那么在输出中将覆盖该字段的值。如果使用融合类型全部列表(Python 中为 ALLLIST),则输出将不包含此字段。

  • 输出要素类将具有一个 ORIG_FID 字段,该字段包含为其创建缓冲区的输入要素的要素 ID。如果输入中存在名为 ORIG_FID 的字段,那么在输出中将覆盖该字段的值。如果使用融合类型全部列表,则输出将不包含此字段。

  • 如果对面要素进行缓冲,则可使用负缓冲距离在面要素内部创建缓冲区。使用负缓冲距离将会使面边界向内缩减指定的距离。

    警告:

    如果负缓冲距离足够大,使得面缩减至不存在,则将生成空几何。此时将出现一条警告消息,并且不会将任何空几何要素写入输出要素类。

  • 如果使用输入中的字段来获取缓冲距离,则该字段的值可以是数字(例如,5),也可以是数字加上有效的线性单位(例如,5 千米)。如果字段值为数字,则假定距离使用输入空间参考的线性单位(除非该输入使用地理坐标系,这时该值以米为单位)。如果在字段值中指定的线性单位无效或无法识别,则默认情况下将使用输入空间参考的线性单位。

    对缓冲距离使用缓冲字段
  • 融合字段参数添加字段按钮仅在 ModelBuilder 中使用。在 ModelBuilder 中,如果先前的工具尚未运行或其派生数据不存在,则可能不会使用字段名称来填充融合字段参数。添加字段按钮可用于将所需字段添加到融合字段列表,从而完成缓冲区工具对话框。

语法

PairwiseBuffer(in_features, out_feature_class, buffer_distance_or_field, {dissolve_option}, {dissolve_field}, {method}, {max_deviation})
参数说明数据类型
in_features

要进行缓冲的输入点、线或面要素。

Feature Layer
out_feature_class

包含输出缓冲区的要素类。

Feature Class
buffer_distance_or_field

与要缓冲的输入要素之间的距离。该距离可以用表示线性距离的某个值来指定,也可以用输入要素中的某个字段(包含用来对每个要素进行缓冲的距离)来指定。

如果未指定线性单位或输入了“未知”,则将使用输入要素空间参考的线性单位。

指定距离时,如果所需线性单位含有两个单词,如 Decimal Degrees,请将两个单词合并成一个词(例如,20 DecimalDegrees)。

Linear Unit; Field
dissolve_option
(可选)

指定要执行哪种类型的融合操作以移除缓冲区重叠。

  • NONE不考虑重叠,均保持每个要素的独立缓冲区。这是默认设置。
  • ALL将所有缓冲区融合为单个要素,从而移除所有重叠。
  • LIST融合共享所列字段(传递自输入要素)属性值的所有缓冲区。
String
dissolve_field
[dissolve_field,...]
(可选)

融合输出缓冲区所依据的输入要素的字段列表。融合共享所列字段(传递自输入要素)属性值的所有缓冲区。

Field
method
(可选)

指定用于创建缓冲区的方法是平面方法还是测地线方法。

  • PLANAR如果输入要素位于投影坐标系中,则将创建欧氏缓冲区。如果输入要素位于地理坐标系中且缓冲距离的单位为线性单位(米、英尺等,而非诸如度之类的角度单位),则会创建测地线缓冲区。这是默认设置。您可以使用输出坐标系环境设置指定要使用的坐标系。例如,如果输入要素位于投影坐标系中,您可以将环境设置为地理坐标系,以便创建测地线缓冲区。
  • GEODESIC无论使用哪种输入坐标系,均使用形状不变的测地线缓冲区方法创建所有缓冲区。
String
max_deviation
(可选)

生成的输出缓冲区面边界将从实际缓冲区边界偏移的最大距离。

实际缓冲区边界为曲线。但是,结果面边界为增密折线。可以使用此参数来选择控制面边界与实际缓冲区边界的近似程度。

如果此参数未设置,或者设置为 0,则工具将确定最大偏差。我们强烈建议您使用默认值。造成(工具本身或者后续分析中)系统性能显著下降的原因可能为使用的最大偏移偏差过小。

有关详细信息,请参阅增密工具文档中包含的 max_deviation 参数信息。

Linear Unit

代码示例

PairwiseBuffer 示例 1(Python 窗口)

下面的 Python 窗口脚本演示了如何使用 PairwiseBuffer 工具。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.PairwiseBuffer_analysis("roads", "C:/output/majorrdsBuffered", "100 Feet", "LIST", "Distance")
PairwiseBuffer 示例 2(独立脚本)

查找尚未受主要道路严重影响的相应植被区域。

# Name: PairwiseBuffer.py
# Description: Find areas of suitable vegetation that exclude areas heavily impacted by major roads
# import system modules 
import arcpy
# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
# Select suitable vegetation patches from all vegetation
veg = "vegtype"
suitableVeg = "C:/output/Output.gdb/suitable_vegetation"
whereClause = "HABITAT = 1" 
arcpy.Select_analysis(veg, suitableVeg, whereClause)
# Buffer areas of impact around major roads
roads = "majorrds"
roadsBuffer = "C:/output/Output.gdb/buffer_output"
distanceField = "Distance"
sideType = "FULL"
endType = "ROUND"
dissolveType = "LIST"
dissolveField = "Distance"
arcpy.PairwiseBuffer_analysis(roads, roadsBuffer, distanceField, dissolveType, dissolveField)
# Erase areas of impact around major roads from the suitable vegetation patches
eraseOutput = "C:/output/Output.gdb/suitable_vegetation_minus_roads"
xyTol = "1 Meters"
arcpy.Erase_analysis(suitableVeg, roadsBuffer, eraseOutput, xyTol)

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题