Ближайший (Анализ)

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

Краткая информация

Вычисляет расстояние и дополнительную информацию о близости входных объектов и ближайшего объекта в другом слое или классе пространственных объектов.

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

Рисунок

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

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

Синтаксис

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

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

Feature Layer
near_features
[near_features,...]

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

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

Радиус поиска ближайших объектов. Если значение не указано, в вычисления включаются все ближайшие объекты. Если расстояние введено, но единица измерения не задана или неизвестна (Unknown), используются единицы системы координат входных объектов. Если используется опция GEODESIC, должна использоваться линейная единица измерения, такая как километры или мили.

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

Определяет, будут ли записаны в поля NEAR_X и NEAR_Y координаты x и 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) или на плоской земной поверхности (planar). Настоятельно рекомендуется использовать метод GEODESIC, если данные хранятся в координатной системе, не подходящей для измерения расстояний (такой как Web Mercator и все географические системы координат), или если анализ охватывает большую географическую область.

  • PLANARИспользует планарные расстояния между объектами. Это значение используется по умолчанию.
  • GEODESICИспользует геодезические расстояния между объектами. Этот метод учитывает кривизну сфероида и корректно обрабатывает данные вблизи демаркационной линии суточного времени и полюсов.
String

Пример кода

Ближайший объект. Пример 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: Да
5/10/2014