近邻分析 (Analysis)

许可等级:BasicStandardAdvanced

摘要

在搜索半径范围内,确定输入要素中的每个要素与邻近要素中的最近要素之间的距离。

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

插图

Finding near feature by geometry type.

用法

语法

Near_analysis (in_features, near_features, {search_radius}, {location}, {angle})
参数说明数据类型
in_features

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

Feature Layer
near_features
[near_features,...]

用于查找与输入要素距离最近的要素的值。可以有一个或多个邻近要素的条目;每个条目可以是点、折线、面或多点类型。当指定邻近要素的多个条目时,会将新字段 NEAR_FC 添加到输入表中,以存储含有最近要素的源要素类的路径。

Feature Layer
search_radius
(可选)

指定用于搜索候选邻近要素的半径。将考虑此半径中的邻近要素来计算最近的要素。如果未指定值,即使用默认(空)半径,将在计算中考虑所有的邻近要素。搜索半径的单位默认为输入要素坐标系的单位。可以将单位更改为任何其他单位。但是,这对 NEAR_DIST 单位不会产生任何影响,后者基于输入要素的坐标系单位。

Linear unit
location
(可选)

指定是否将邻近要素最近位置的 x 和 y 坐标分别写入新字段 NEAR_X 和 NEAR_Y。

  • NO_LOCATION指定不写入最近位置的 x 和 y 坐标。这是默认设置。
  • LOCATION指定将最近位置的 x 和 y 坐标写入 NEAR_X 和 NEAR_Y 字段。
Boolean
angle
(可选)

指定是否计算以十进制度为单位的邻近角度值,以及是否将其写入新字段 NEAR_ANGLE。邻近角测量 x 轴(水平轴)与特定方向的直线(该直线连接输入要素与其最近要素的最近位置)之间的夹角,它的范围在 0 到 180 或 0 到 -180 十进制度之间。0 代表东、90 代表北、180 (-180°) 代表西和 -90 代表南。

  • NO_ANGLE指定将不写入邻近角值。这是默认设置。
  • ANGLE指定将邻近角值写入 NEAR_ANGLE 字段。
Boolean

代码实例

近邻分析 (Near) 示例 1(Python 窗口)

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

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

## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
近邻分析 (Near) 示例 2(独立 Python 脚本)

以下 Python 脚本演示了如何在独立脚本中使用近邻分析 (Near) 函数。

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

import arcpy
from arcpy import env

# Set workspace environment
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.Near_analysis(in_features, near_features, search_radius, location, angle)
    
    # get geoprocessing messages
    print arcpy.GetMessages()

except arcpy.ExecuteError:
    print arcpy.GetMessages(2)
    
except Exception as ex:
    print ex.args[0]
近邻分析 (Near) 示例 3(独立 Python 脚本)

以下 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 脚本)

演示了使用“近邻分析”工具的派生输出进行后处理。脚本为每个邻近要素查找最接近的输入要素。

# 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]}

环境

相关主题

许可信息

ArcGIS for Desktop Basic:否
ArcGIS for Desktop Standard:否
ArcGIS for Desktop Advanced:是
9/15/2013