Ближайший объект (Near) (Анализ)

Уровень лицензии:BasicStandardAdvanced

Резюме

Определяет расстояние от каждого объекта входных пространственных объектов до ближайшего объекта на заданном радиусе поиска.

<Более подробно о вычислении близости в инструментах геообработки

Рисунок

Поиск ближайшего объекта по типу геометрии.

Использование

Синтаксис

Near_analysis (in_features, near_features, {search_radius}, {location}, {angle})
ПараметрОбъяснениеТип данных
in_features

Входные объекты, которые могут быть точечного, полилинейного, полигонального или мультиточечного типа.

Feature Layer
near_features
[near_features,...]

Значение, используемое для поиска ближайших объектов для входных объектов. Может быть один или несколько классов ближайших объектов; каждый объект может быть точечного, полилинейного, полигонального или мультиточечного типа. Если задано несколько классов ближайших объектов, во входную таблицу добавляется новое поле NEAR_FC, в котором для каждого ближайшего объекта будет указан путь к соответствующему классу ближайших объектов.

Feature Layer
search_radius
(дополнительно)

Расстояние, в пределах которого проводится поиск потенциальных ближайших объектов. В выходной класс записываются только те ближайшие объекты, которые расположены в окружности, определяемой заданным радиусом. Если значение не задано, т.е. параметр Радиус поиска (Search radius) оставлен пустым (по умолчанию), в вычислениях участвуют все ближайшие пространственные объекты. По умолчанию для радиуса поиска используются единицы измерения, определенные в системе координат входных объектов. Эти единицы можно изменить на любые другие. Однако это не скажется на единицах измерения NEAR_DIST, которые основываются на единицах измерения системы координат входных объектов.

Linear unit
location
(дополнительно)

Определяет, будут ли координаты x и y ближайшего местоположения ближайшего объекта записаны в новые поля NEAR_X и NEAR_Y, соответственно.

  • NO_LOCATIONКоординаты x и y ближайшего местоположения не будут записаны. Это значение используется по умолчанию.
  • LOCATIONКоординаты x и y ближайшего местоположения будут записаны в поля NEAR_X and NEAR_Y.
Boolean
angle
(дополнительно)

Задает, будут ли вычислены значения углов до ближайших объектов в десятичных градусах и записаны в новое поле, NEAR_ANGLE. Угловое значение измеряется от оси x (горизонтальная ось) по направлению линии, соединяющей входной объект с ближайшим объектом в ближайшем местоположении; этот угол находится в пределах диапазона от 0 до 180 или от 0 до -180 десятичных градусов — 0 для востока, 90 для севера, 180 (-180°) для запада и -90 для юга.

  • NO_ANGLEЗначения углов не будут записаны. Это значение используется по умолчанию.
  • ANGLEУгловые значения ближайшего объекта будут записаны в поле NEAR_ANGLE.
Boolean

Пример кода

Ближайший объект. Пример 1 (окно Python)

Пример скрипта Python для функции Ближайший объект с запуском из окна Python в ArcGIS.

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

## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
Ближайший объект. Пример 2 (автономный скрипт Python)

Пример скрипта Python для функции Ближайший объект с запуском в автономном режиме.

# 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]
Ближайший объект. Пример 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.
Ближайший объект. Пример 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]}

Параметры среды

Связанные темы

Информация о лицензировании

ArcGIS for Desktop Basic: Требует Нет
ArcGIS for Desktop Standard: Требует Нет
ArcGIS for Desktop Advanced: Требует Да
9/10/2013