近邻分析 (分析)

摘要

可计算输入要素与其他图层或要素类中的最近要素之间的距离和其他邻近性信息。

了解有关如何使用地理处理工具计算邻近值的详细信息

插图

近邻分析工具图示
显示了按几何类型查找近邻要素。

使用情况

  • 以下字段将添加到输入中。 如果字段已存在,则将更新字段值。 可以使用字段名称参数配置这些字段名称。

    • NEAR_FID- 最近邻要素的 ObjectID。 如果未发现近邻要素,则该值为 -1。
    • NEAR_DIST- 输入要素至近邻要素的距离。 如果将方法参数设置为测地线且输入位于地理坐标系中,则该值采用输入要素坐标系的线性单位或者采用“米”作为单位。 如果未发现近邻要素,则该值为 -1。
    • NEAR_FC- 发现包含最近要素的源要素类的路径。 如果使用图层作为输入,则会使用图层名称,如果使用路径作为输入,则会使用要素类的目录路径。 仅在指定了多个近邻要素时,才会将此字段添加到输出表中。 如果未发现近邻要素,则该值为空字符串或为空。

    如果选中位置参数,则会向输入添加以下字段。 如果字段已存在,将更新字段值。 字段值单位取决于方法参数值。 如果方法参数设置为平面,则字段值将使用输入要素坐标系的线性单位。 如果其设置为测地线,则字段值将使用与输入要素坐标系相关联的地理坐标系。

    • NEAR_X- 近邻要素中距离输入要素最近位置的 x 坐标。 如果未发现近邻要素,则该值为 -1。
    • NEAR_Y- 近邻要素中距离输入要素最近位置的 y 坐标。 如果未发现近邻要素,则该值为 -1。

    如果选中角度参数,则将向输入要素添加以下字段。 如果字段已存在,则会更新字段值。

    • NEAR_ANGLE- 连接输入要素和近邻要素的位于 FROM_XFROM_Y 位置处的线的角度。 如果未找到任何近邻要素或者近邻要素与输入要素相交,则该值将为 0。

  • 如果搜索半径中未找到要素,则 NEAR_FIDNEAR_DIST 的值将为 -1。

  • 输入要素和近邻要素均可以为点、多点、线或面。

  • 近邻要素参数值可以包括不同形状类型(点、多点、线或面)的一个或多个要素类。

  • 同一要素类或图层可同时用作输入要素和近邻要素。 这种情况下,所评估的输入要素将被排除在近邻要素候选项之外,以避免得出所有要素都与其自身最接近的结果。

  • 输入要素可以是图层,您可以在其中执行选择操作。 在工具运行期间,将使用并更新所选要素。 其余要素的新创建字段(例如 NEAR_FIDNEAR_DIST)的值将设置为 -1。

  • 当多个近邻要素与输入要素的最短距离相同时,将随机选择其中一个近邻要素作为最近要素。

  • 当使用方法参数的平面选项时,对于适用于距离测量值的输入要素,请使用投影,例如等距投影。

    了解有关坐标系和投影的详细信息

  • 要显示 NEAR_XNEAR_Y 位置,可将输出表用作创建 XY 事件图层XY 转线工具的输入。

  • 可以使用距离单位参数为 NEAR_DIST 字段设置测量单位,例如米、千米或英里。

参数

标注说明数据类型
输入要素

输入要素,可以为点、折线、面或多点类型。

Feature Layer
邻近要素

一个或多个包含邻近要素候选项的要素图层或要素类。 邻近要素可以是点、折线、面或多点。 如果指定了多个图层或要素类,则 NEAR_FC 字段将添加到输入表中,并将存储含有找到的最近要素的源要素类的路径。 同一要素类或图层可同时用作输入要素和邻近要素。

Feature Layer
搜索半径
(可选)

将用于搜索邻近要素的半径。 如果未指定任何值,则会考虑所有邻近要素。 如果指定了距离,但没有指定任何单位或将单位设置为未知,则将使用输入要素的坐标系单位。 如果 Method 参数使用了 Geodesic 选项,则使用线性单位(如公里或英里)。

Linear Unit
位置
(可选)

指定是否将近邻要素最近位置的 x 和 y 坐标写入 NEAR_XNEAR_Y 字段。

  • 未选中 - 将不会写入位置。 这是默认设置。
  • 选中 - 将写入位置。
Boolean
角度
(可选)

指定是否计算近邻角并将其写入输出表的 NEAR_ANGLE 字段。 近邻角测量连接了输入要素与其最近要素的最近位置的直线的方向。 在方法参数中使用平面方法时,角度在 -180° 到 180° 的范围内,0°代表东,90°代表北,180°(或 -180°)代表西,-90° 代表南。 使用测地线方法时,角度在 -180° 到 180° 的范围内,0° 代表北,90° 代表东,180°(或 -180°)代表南,-90° 代表西。

  • 未选中 - 不会计算近邻角,也不会添加 NEAR_ANGLE 字段。 这是默认设置。
  • 选中 - 将计算近邻角并添加 NEAR_ANGLE 字段。
Boolean
方法
(可选)

指定是使用椭球体上的最短路径(测地线)还是使用地平(平面)距离方法。 建议将测地线方法用于在不适合进行距离测量的坐标系(例如 Web 墨卡托或任何地理坐标系)中存储的数据,以及地理区域跨度较大的数据集。

  • 平面要素之间将使用平面距离。 这是默认设置。
  • 测地线将在要素之间使用测地线距离。 这种方法考虑到椭球体的曲率,并可以正确处理国际日期变更线和极点附近的数据。
String
字段名称
(可选)

在处理期间添加的属性字段的名称。

如果未使用此参数,或从该参数中排除要添加的任何字段,则将使用默认字段名称。

默认情况下,将添加 NEAR_FIDNEAR_DIST 字段;当选中位置参数时,将添加 NEAR_XNEAR_Y 字段;当选中角度参数时,将添加 NEAR_ANGLE 字段;当使用多个输入时,将添加 NEAR_FC 字段。

Value Table
距离单位
(可选)

指定 NEAR_DIST 字段的测量单位。 未指定任何测量单位时,NEAR_DIST 字段中的值将采用输入要素坐标系的线性单位。 如果输入位于地理坐标系中并且使用了测地线方法,则 NEAR_DIST 字段的单位将为米。

  • 千米单位将为公里。
  • 单位将为米。
  • 国际海里单位将为国际海里。
  • 法定英里单位将为法定英里。
  • 国际码单位将为国际码。
  • 国际英尺单位将为国际英尺。
  • 美国测量海里单位将为美国测量海里。
  • 美国测量英里单位将为美国测量英里。
  • 美国测量码单位将为美国测量码。
  • 美国测量英尺单位将为美国测量英尺。
String

派生输出

标注说明数据类型
更新的输入要素

更新后的输入要素。

Feature Layer

arcpy.analysis.Near(in_features, near_features, {search_radius}, {location}, {angle}, {method}, {field_names}, {distance_unit})
名称说明数据类型
in_features

输入要素,可以为点、折线、面或多点类型。

Feature Layer
near_features
[near_features,...]

一个或多个包含邻近要素候选项的要素图层或要素类。 邻近要素可以是点、折线、面或多点。 如果指定了多个图层或要素类,则 NEAR_FC 字段将添加到输入表中,并将存储含有找到的最近要素的源要素类的路径。 同一要素类或图层可同时用作输入要素和邻近要素。

Feature Layer
search_radius
(可选)

将用于搜索邻近要素的半径。 如果未指定任何值,则会考虑所有邻近要素。 如果指定了距离,但没有指定任何单位或将单位设置为未知,则将使用输入要素的坐标系单位。 如果针对 method 参数使用了 GEODESIC 选项,则使用线性单位,例如千米或英里。

Linear Unit
location
(可选)

指定是否将近邻要素最近位置的 x 和 y 坐标写入 NEAR_XNEAR_Y 字段。

  • NO_LOCATION将不会写入位置信息。 这是默认设置。
  • LOCATION将写入位置信息。
Boolean
angle
(可选)

指定是否计算近邻角并将其写入输出表的 NEAR_ANGLE 字段。 近邻角测量连接了输入要素与其最近要素的最近位置的直线的方向。 在 method 参数中使用 PLANAR 方法时,角度在 -180° 到 180° 的范围内,0°代表东,90°代表北,180°(或 -180°)代表西,-90° 代表南。 使用 GEODESIC 方法时,角度在 -180° 到 180° 的范围内,0° 代表北,90° 代表东,180°(或 -180°)代表南,-90° 代表西。

  • NO_ANGLE不会计算或写入近邻角的值。 这是默认设置。
  • ANGLE将计算近邻角的值并写入 NEAR_ANGLE 字段。
Boolean
method
(可选)

指定是使用椭球体上的最短路径(测地线)还是使用地平(平面)距离方法。 建议将 GEODESIC 方法用于在不适合进行距离测量的坐标系(例如 Web 墨卡托或任何地理坐标系)中存储的数据,以及地理区域跨度较大的数据集。

  • PLANAR要素之间将使用平面距离。 这是默认设置。
  • GEODESIC将在要素之间使用测地线距离。 这种方法考虑到椭球体的曲率,并可以正确处理国际日期变更线和极点附近的数据。
String
field_names
[[property, fieldname],...]
(可选)

在处理期间添加的属性字段的名称。

如果未使用此参数,或从该参数中排除要添加的任何字段,则将使用默认字段名称。

默认情况下,将添加 NEAR_FIDNEAR_DIST 字段;当 location 参数设置为 LOCATION 时,将添加 NEAR_XNEAR_Y 字段;当 angle 参数设置为 ANGLE 时,将添加 NEAR_ANGLE 字段;当使用多个输入时,将添加 NEAR_FC 字段。

Value Table
distance_unit
(可选)

指定 NEAR_DIST 字段的测量单位。 未指定任何测量单位时,NEAR_DIST 字段中的值将采用输入要素坐标系的线性单位。 如果输入位于地理坐标系中并且使用了测地线方法,则 NEAR_DIST 字段的单位将为米。

  • Kilometers单位将为公里。
  • Meters单位将为米。
  • NauticalMilesInt单位将为国际海里。
  • MilesInt单位将为法定英里。
  • YardsInt单位将为国际码。
  • FeetInt单位将为国际英尺。
  • NauticalMiles单位将为美国测量海里。
  • Miles单位将为美国测量英里。
  • Yards单位将为美国测量码。
  • Feet单位将为美国测量英尺。
String

派生输出

名称说明数据类型
out_feature_class

更新后的输入要素。

Feature Layer

代码示例

Near 示例 1(Python 窗口)

以下 Python 交互式窗口脚本演示了如何在即时模式下使用 Near 函数。

import arcpy
arcpy.env.workspace = "C:/data/city.gdb" 

# Find the nearest road from each house
arcpy.analysis.Near('houses', 'roads')
Near 示例 2(独立脚本)

以下 Python 脚本演示了如何在独立脚本中使用 Near 函数。

# Name: Near.py
# Description: Finds nearest features from input feature class to near feature class.

import arcpy

# Set workspace environment
arcpy.env.workspace = "C:/data/city.gdb"

try:
    # set local variables
    in_features = "houses"
    near_features = "parks"
    
    # find features only within search radius
    search_radius = "5000 Meters"
    
    # find location nearest features
    location = "LOCATION"
    
    # avoid getting angle of neares features
    angle = "NO_ANGLE"
    
    # execute the function
    arcpy.analysis.Near(in_features, near_features, search_radius, location, angle)
    
    # get geoprocessing messages
    print(arcpy.GetMessages())

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))
    
except Exception as err:
    print(err.args[0])
Near 示例 3(独立脚本)

以下 Python 脚本演示了如何将近邻角转换为方位角。

# Name: near_angle_to_azimuth.py

import arcpy

# Near tool does not calculate angle in azimuths
# This script, using the output of the tool, converts the angles
# to azimuth angles.

in_table = r"C:/data/city.gdb/near_table"
    
angles = arcpy.da.SearchCursor(in_table, ["NEAR_ANGLE"])

azimuth_angles = []

with angles as rows:
    for row in rows:
        angle = row[0]
        if angle <= 180 and angle > 90:
            azimuth_angles.append(360.0 - (angle - 90))
        else:
            azimuth_angles.append(abs(angle - 90))

# Use these azimuth angles as necessary.
Near 示例 4(独立脚本)

以下 Python 脚本演示了如何使用 Near 函数的派生输出进行后处理。 该脚本将为每个近邻要素查找最接近的输入要素。

# Name: features_closest_to_input.py

"""
    This script finds, for each input feature, a list of near feature it is closest to.
    If near features 6, 7, 10 are closest to input feature 3 then the 
    resulting dictionary will have a list [6, 7, 10] as value for key 3
"""

import os
import arcpy

in_fc = r"C:\data\cities.gdb\cities_many"

# create a dictionary to hold the list of near ids for each input id
nearest_dict = dict()

with arcpy.da.SearchCursor(in_fc, ["OID@", "NEAR_FID"]) as rows:
    for row in rows:
        nearest_id = row[0]  # get OID value for that row
        input_id = row[1]    # get NEAR_FID value 
        
        if input_id in nearest_dict:
            # if a dict key already exists, append near id to value list for that key
            nearest_dict[input_id].append(nearest_id)
        else:
            # if the key does not exist then create a new list with near id
            # and add it to the dictionary
            nearest_dict[input_id] = [nearest_id]
            
print(nearest_dict)

# output will look like:
# {1: [13, 28], 2: [2, 9, 14, 20, 22], 3: [11, 12, 24, 25]}

许可信息

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

相关主题