3D 邻近 (3D Analyst)
摘要
计算每个输入要素到一个或多个邻近要素类中的最近要素的三维距离。
用法
支持所有几何类型,并且所有输入要素类必须具有 Z 值。
邻近要素可包括一个要素类或不同 shape 类型的多个要素类。
邻近要素可以是与输入要素相同的数据集。当输入要素的最近邻近要素是其本身(距离为 0)时,此要素将被忽略,并且将找到除此要素之外的最近要素。
邻近工具与 3D 邻近工具的根本区别在于,3D 邻近工具用于处理 3D 要素而不是 2D 要素。此外,3D 邻近工具所比较的距离是 3D 距离(斜距),而不是水平距离。还可以输出多个附加字段。
仅当角度选项启用时,才会创建和填充角度字段。
以下字段会追加到输入要素的属性表中:
- NEAR_FID - 最邻近要素的 FID。
- NEAR_DIST - 输入要素上的最近点与最邻近要素上的最近点之间的 2D 距离(水平距离)。
- NEAR_DIST3 - 输入要素上的最近点与最邻近要素上的最近点之间的 3D 距离(斜距)。
- NEAR_DELTX - 输入要素上的最近点与最邻近要素上的最近点在 X 轴方向上的距离。
- NEAR_DELTY - 输入要素上的最近点与最邻近要素上的最近点在 Y 轴方向上的距离。
- NEAR_DELTZ - 输入要素上的最近点与最邻近要素上的最近点在 Z 轴方向上的距离。
- NEAR_FROMX - 输入要素上与最邻近要素上的最近点距离最小的最近点的 X 坐标。
- NEAR_FROMY - 输入要素上与最邻近要素上的最近点距离最小的最近点的 Y 坐标。
- NEAR_FROMZ - 输入要素上与最邻近要素上的最近点距离最小的最近点的 Z 坐标。
- NEAR_X - 最邻近要素上的最近点的 X 坐标,或沿最邻近要素的最近虚点的 X 坐标。
- NEAR_Y - 最邻近要素上的最近点的 Y 坐标,或沿最邻近要素的最近虚点的 Y 坐标。
- NEAR_Z - 邻近要素上的最近点的 Z 坐标,或沿最邻近要素的最近虚点的 Z 坐标。
- NEAR_ANG_H - 水平地理角度(北方位角),以度为单位,位于输入要素上的最近点与最邻近要素上的最近点之间。它与先前版本中的邻近分析工具所使用的坐标系相同;它并不是方位角。正东为零;东北为 45;正北为 90;正南为 -90;正西为 180 或 -180。此值忽略高程。
- NEAR_ANG_V - 垂直角度(又称高度角或仰角),以度为单位,位于输入要素上的最近点与最邻近要素上的最近点之间。水平为零;垂直向上为 90;垂直向下为 -90;水平向上 10 度方向为 10。
- NEAR_FC - 包含最邻近要素的要素类的路径。仅当指定了多个邻近要素时,才会添加此字段。
如果前面提及的字段已存在,则更新字段值。
如果在搜索半径范围内未找到匹配项,则 NEAR_FID、NEAR_DIST 和 NEAR_DIST3 的值都将为 -1。
仅当增量选项启用时,才会创建和填充 NEAR_DELTX、NEAR_DELTY 和 NEAR_DELTZ 字段。
仅当选中位置复选框后,才会创建和填充 NEAR_FROMX、NEAR_FROMY、NEAR_FROMZ、NEAR_X、NEAR_Y 和 NEAR_Z 字段。
此工具是提供针对 3D 要素的分析函数的 3D 集合运算符。有关什么是集合运算符以及如何使用它们的详细信息,请参阅使用 3D 集合运算符。
语法
参数 | 说明 | 数据类型 |
in_features |
输入要素类,将使用有关最近要素的信息设置其要素属性。 | Feature Layer |
near_features |
计算邻近输入要素的一个或多个要素。如果指定了多个要素类,则将向输入要素类额外添加一个名为 NEAR_FC 的字段,以识别包含最近要素的邻近要素类。 | Feature Layer |
search_radius (可选) |
将要确定距离和 FID 的输入要素和邻近要素之间的最大距离。如果未指定搜索半径,将使用所有邻近要素。 | Linear Unit |
location (可选) |
确定是否将六个坐标字段(两组 XYZ 值)添加到各输入要素。这些值为输入要素的三个坐标(NEAR_FROMX、NEAR_FROMY、NEAR_FROMZ)和最近要素的三个坐标(NEAR_X、NEAR_Y、NEAR_Z)。无论如何设置“位置”选项,始终将添加字段 NEAR_FID 和 NEAR_DIST。
| Boolean |
angle (可选) |
确定是否计算输入要素与最邻近要素之间的角度并将计算所得角度存储到 NEAR_ANG_H 和 NEAR_ANG_V 字段中。两个角度值都以度为单位,一度表示圆的 1/360,小于一度的度数以小数形式表示。水平角度范围从 180° 到 -180°;0° 为东,90° 为北,180° (-180°) 为西,-90° 为南。垂直角度在水平方向为零度,垂直向上为 90°,垂直向下为 -90°。
| Boolean |
delta (可选) |
确定是否计算输入要素与最邻近要素在主轴方向上的距离并将计算所得距离存储到 NEAR_DELTX、NEAR_DELTY 和 NEAR_DELTZ 字段中。
| Boolean |
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.Near3D_3d("points_3D.shp", "buildings_multipatch.shp", "30", "LOCATION", "ANGLE", "DELTA")
下面的示例演示了如何在独立 Python 脚本中使用此工具:
'''****************************************************************************
Name: Near 3D Example
Description: This script demonstrates how to use
the Near 3D tool to identify the nearest z-aware features
that satisfy the results from a queried feature.
****************************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
from arcpy import env
try:
# Obtain a license for the ArcGIS 3D Analyst extension
arcpy.CheckOutExtension('3D')
# Set environment settings
env.workspace = 'C:/data'
# Set Local Variables
inFC = 'homes.shp'
nearFC = 'radiotowers.shp'
# See the 'Building an SQL expression' topic for more information
# Query the field 'MATERIAL' for the string 'Reinforced Concrete'
SQL_Expression = "'"'MATERIAL'"' = 'Reinforced Concrete'"
#Execute Make Feature Layer
arcpy.MakeFeatureLayer_management(nearFC, 'Near Layer', SQL_Expression)
result = arcpy.GetCount_management('Near Layer')
if int(result.getOutput(0)) == 0:
arcpy.AddMessage('{0} has no features that satisfy the query: {1}'\
.format(nearFC, SQL_Expression))
else:
#Execute Near3D
arcpy.Near3D_3d(inFC, 'nearLayer', '', 'LOCATION', 'ANGLE')
except arcpy.ExecuteError:
print arcpy.GetMessages()
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate error information into message string
pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
.format(tbinfo, str(sys.exc_info()[1]))
msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
# Return python error messages for script tool or Python Window
arcpy.AddError(pymsg)
arcpy.AddError(msgs)