缓冲区 (Analysis)
插图
用法
-
如果对具有覆盖较大区域的要素的经过投影了的要素类进行缓冲,或正在使用非常大的缓冲距离,投影中的变形可能会导致生成不准确的缓冲区。通过使用具有地理坐标系的要素类,并以线性单位(米、英尺等,而非诸如度之类的角度单位)指定缓冲距离,在缓冲时可完全避免变形。当使用这种输入组合时,工具将生成真实的测地线 缓冲区,从而准确表示地球表面的距离。测地线缓冲区在平面地图上可能会显示异常,在三维地球上可正确显示(可使用 ArcGlobe 或 ArcGIS Explorer 应用程序查看三维地球上的地理数据)。有关详细信息,请参阅缓冲区的工作原理。
通过使用最小化距离变形且在地理上适用于输入数据的投影(例如等距圆锥投影或等距方位投影),可提高使用经过投影了的输入数据所创建的缓冲区的精度。
对投影坐标系中的要素进行缓冲并输出到地理数据库要素类时,所创建的几何通常包含圆弧段,特别是对点进行缓冲时。如果这些含有圆弧的缓冲区重新投影到不同的坐标系,原始缓冲区的位置和大小将会发生变形,但缓冲区的形状将会保持不变,这会导致重新投影的缓冲区无法再精确表示原始缓冲区所覆盖的区域。如果要重新投影含有圆弧的缓冲区,请先使用增密工具将圆弧段转化成直线,然后再对缓冲区进行重新投影。
-
输出要素类将具有一个 BUFF_DIST 字段,该字段包含用于缓冲各要素的缓冲距离(使用输入要素坐标系的线性单位)。如果输入中存在名为 BUFF_DIST 的字段,那么在输出中将覆盖该字段的值。如果使用融合类型 ALL 或 LIST,则输出将不包含此字段。
输出要素类将具有一个 ORIG_FID 字段,该字段包含为其创建缓冲区的输入要素的 FID。如果输入中存在名为 ORIG_FID 的字段,那么在输出中将覆盖该字段的值。如果使用融合类型 ALL 或 LIST,则输出将不包含此字段。
-
如果对面要素进行缓冲,则可使用负缓冲距离在面要素内部创建缓冲区。使用负缓冲距离将会使面边界向内缩减指定的距离。
警告:如果负缓冲距离足够大,使得面缩减至不存在,则将生成空几何。此时将出现一条警告消息,并且不会将任何空几何要素写入输出要素类。
-
如果使用“输入要素”中的字段来获取缓冲距离,则该字段的值可以是数字 (5),也可以是数字加上有效的线性单位(5 千米)。如果字段值只包含数字,则距离使用“输入要素”空间参考的线性单位(如果该“输入要素”使用地理坐标系,该值以米 为单位)。如果在字段值中指定的线性单位无效或无法识别,则默认情况下将使用输入要素空间参考的线性单位。
-
融合字段参数添加字段按钮仅在模型构建器中使用。在模型构建器中,如果前面的工具尚未运行或其派生的数据不存在,则可能不可以使用字段名称来填充融合字段参数。添加字段按钮可用于将所需字段添加到融合字段列表,从而完成“缓冲区”工具对话框。
如果将融合选项设置为 NONE,输出要素类将具有一个 ORIG_FID 字段。输出要素的 ORIG_FID 值是相关输入要素的 ObjectID 值。
仅当具有 Advanced 许可时,侧类型 (line_side) 选项 LEFT、RIGHT 和 OUTSIDE_ONLY 以及末端类型 (line_end_type) 选项 FLAT 才可用。
语法
参数 | 说明 | 数据类型 |
in_features |
要进行缓冲的输入点、线或面要素。 | Feature Layer |
out_feature_class |
包含输出缓冲区的要素类。 | Feature Class |
buffer_distance_or_field |
与要缓冲的输入要素之间的距离。该距离可以用表示线性距离的某个值来指定,也可以用输入要素中的某个字段(包含用来对每个要素进行缓冲的距离)来指定。 如果未指定线性单位或输入了“未知”,则将使用输入要素空间参考的线性单位。 在脚本中指定距离时,如果所需线性单位含有两个单词,如 Decimal Degrees,请将两个单词合并成一个词(例如,“20 DecimalDegrees”)。 | Linear unit ;Field |
line_side (可选) |
将在输入要素的哪一侧进行缓冲。
许可: 此可选参数不适用于 Basic 或 Standard 许可。 | String |
line_end_type (可选) |
线输入要素末端的缓冲区形状。此参数对于面输入要素无效。
许可: 此可选参数不适用于 Basic 或 Standard 许可。 | String |
dissolve_option (可选) |
指定要执行哪种融合操作以移除缓冲区重叠。
| String |
dissolve_field [dissolve_field,...] (可选) |
融合输出缓冲区所依据的输入要素的字段列表。融合共享所列字段(传递自输入要素)属性值的所有缓冲区。 | Field |
代码实例
以下 Python 窗口脚本演示了如何使用缓冲区 (Buffer) 工具。
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.Buffer_analysis("roads", "C:/output/majorrdsBuffered", "100 Feet", "FULL", "ROUND", "LIST", "Distance")
查找尚未受主要道路严重影响的相应植被区域。
# Name: Buffer.py
# Description: Find areas of suitable vegetation which exclude areas heavily impacted by major roads
# import system modules
import arcpy
from arcpy import env
# Set environment settings
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.Buffer_analysis(roads, roadsBuffer, distanceField, sideType, endType, 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)