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

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

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

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

Иллюстрация

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

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

  • К входным объектам будут добавлены следующие поля. Если эти поля уже существуют, их значения обновляются. Эти имена полей можно настроить с помощью параметра Имена полей (field_names).

    • NEAR_FID – Object ID самого близкого объекта. Если ближайшие объекты не найдены, значение будет равно -1.
    • NEAR_DIST – Расстояние между входным и ближайшим объектом. Это значение приводится в линейных единицах измерения системы координат входных объектов или метрах, если параметр Метод задан как Геодезический, а входные данные в географической системе координат. Если ближайшие объекты не найдены, значение будет равно -1.
    • NEAR_FC – путь к классу объектов, содержащему ближайший объект. Это поле добавляется в выходную таблицу только в том случае, если указано несколько Ближайших объектов. Если ближайший объект не найден, значение будет пустой строкой или null.

    К входным объектам будут добавлены следующие поля, если параметр Местоположение включен (параметр location задан в LOCATION как Python). Если поля уже существуют, их значения обновляются. Единицы измерения значения поля зависит от метода, выбранного в параметре Метод. Если выбрано Плоскостные, значение дается в линейных единицах измерения системы координат входных объектов. Если выбрано Геодезические, значение дается в географической системе координат, связанной с системой координат входных объектов.

    • NEAR_X – x-координата точки ближайшего объекта, наиболее близкой к входному объекту. Если ближайшие объекты не найдены, значение будет равно -1.
    • NEAR_Y – y-координата точки ближайшего объекта, наиболее близкой к входному объекту. Если ближайшие объекты не найдены, значение будет равно -1.

    Следующее поле будет добавлено к входным объектам, если параметр Угол отмечен (параметр angle задан как ANGLE в Python). Если поля уже существуют, их значения обновляются.

    • NEAR_ANGLE – угол линии в местоположении FROM_X и FROM_Y, которая соединяет входные объекты с ближайшим объектом. Если ближайшие объекты не найдены, или ближайший объект пересекается с входным объектом, значение будет равно 0.

  • Если в пределах радиуса поиска не найдено пространственных объектов, значения NEAR_FID и NEAR_DIST будут равны -1.

  • И входные, и ближайшие пространственные объекты могут быть точками, мультиточками, линиями или полигонами.

  • Ближайшие объекты могут включать один или нескольких классов пространственных объектов с разными типами геометрии (точек, мультиточек, линий и полигонов).

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

  • Входные объекты могут являться слоем, на котором вы выполняете выбор. Выбранные объекты будут использоваться и обновляться при выполнении этого инструмента. Вновь созданные поля (NEAR_FID и NEAR_DIST) будут иметь значение -1.

  • Когда несколько ближайших объектов находятся на равном кратчайшем расстоянии от входного объекта, один из них выбирается в качестве самого близкого объекта случайным образом.

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

    Более подробно о картографических проекциях и системах координат.

  • Для визуализации местоположений FROM_X, FROM_Y, NEAR_X и NEAR_Y выходная таблица может использоваться в качестве входных данных для инструмента Создать слой событий XY или XY в линию.

Параметры

ПодписьОписаниеТип данных
Входные объекты

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

Feature Layer
Ближайшие объекты

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

Feature Layer
Радиус поиска
(Дополнительный)

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

Linear Unit
Местоположение
(Дополнительный)

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

  • Не отмечено – местоположения записываться не будут. Это значение по умолчанию
  • Отмечено — местоположения будут записаны.
Boolean
Угол
(Дополнительный)

Определяет, будут ли вычислены и записаны в поле NEAR_ANGLE выходной таблицы угловые направления к ближайшим объектам. Угол до ближайшего объекта измеряет направление линии, соединяющей входной объект и ближайший объект по кратчайшему расстоянию. Если значением параметра Метод является Плоскостные, угол может принимать значения в диапазоне от -180° до 180°, где 0° – восток, 90° – север, 180° (или -180°) – запад и -90° – юг. Если используется метод Геодезические, угол может принимать значения в диапазоне от -180° до 180°, где 0° – север, 90° – восток, 180° (или -180°) – юг и -90° – запад.

  • Не отмечено — поле NEAR_ANGLE не добавляется. Это значение по умолчанию
  • Отмечено —­ поле NEAR_ANGLE будет добавлено.
Boolean
Метод
(Дополнительный)

Определяет, будет ли использоваться кратчайший путь на сфероиде или на плоской земной поверхности. Настоятельно рекомендуется использовать метод Геодезические, если данные хранятся в координатной системе, не подходящей для измерения расстояний (такой как Web Mercator и все географические системы координат), или если анализ охватывает большую географическую область.

  • Планарный — Между объектами будут использоваться плоскостные расстояния. Это значение по умолчанию
  • Геодезический — Между объектами будут использоваться геодезические расстояния. Этот метод учитывает кривизну сфероида и корректно обрабатывает данные вблизи линии перемены дат и полюсов.
String
Имена полей
(Дополнительный)

Определяет имена полей атрибутов, которые добавляются в ходе обработки.

Если этот параметр не используется, либо какие-то из добавляемых полей будут исключены из этого параметра, будут использоваться имена полей по умолчанию.

По умолчанию всегда добавляются поля NEAR_FID и NEAR_DIST, поля NEAR_X и NEAR_Y будут добавлены, когда включен параметр Местоположение (location в Python), поле NEAR_ANGLE добавляется, когда включен параметр Угол (angle в Python), а поле NEAR_FC будет добавлено, если используется несколько входных наборов данных.

Value Table

Производные выходные данные

ПодписьОписаниеТип данных
Обновленные входные объекты

Обновленные входные объекты.

Feature Layer

arcpy.analysis.Near(in_features, near_features, {search_radius}, {location}, {angle}, {method}, {field_names})
ИмяОписаниеТип данных
in_features

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

Feature Layer
near_features
[near_features,...]

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

Feature Layer
search_radius
(Дополнительный)

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

Linear Unit
location
(Дополнительный)

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

  • NO_LOCATIONИнформация о местоположении записываться не будет. Это значение по умолчанию
  • LOCATIONИнформация о местоположении будет записана.
Boolean
angle
(Дополнительный)

Определяет, будут ли вычислены и записаны в поле NEAR_ANGLE выходной таблицы угловые направления к ближайшим объектам. Угол до ближайшего объекта измеряет направление линии, соединяющей входной объект и ближайший объект по кратчайшему расстоянию. Если метод PLANAR используется в параметре method, угловое направление может принимать значения в диапазоне от -180° до 180°, где 0° – восток, 90° – север, 180° (или -180°) – запад и -90° – юг. Если используется метод GEODESIC, угол может принимать значения в диапазоне от -180° до 180°, где 0° – север, 90° – восток, 180° (или -180°) – юг и -90° – запад.

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

Определяет, будет ли использоваться кратчайший путь на сфероиде или на плоской земной поверхности. Настоятельно рекомендуется использовать метод GEODESIC, если данные хранятся в координатной системе, не подходящей для измерения расстояний (такой, как Web Mercator и все географические системы координат), или если анализ охватывает большую географическую область.

  • PLANARМежду объектами будут использоваться плоскостные расстояния. Это значение по умолчанию
  • GEODESICМежду объектами будут использоваться геодезические расстояния. Этот метод учитывает кривизну сфероида и корректно обрабатывает данные вблизи линии перемены дат и полюсов.
String
field_names
[[property, fieldname],...]
(Дополнительный)

Определяет имена полей атрибутов, которые добавляются в ходе обработки.

Если этот параметр не используется, либо какие-то из добавляемых полей будут исключены из этого параметра, будут использоваться имена полей по умолчанию.

По умолчанию всегда добавляются поля NEAR_FID и NEAR_DIST, поля NEAR_X и NEAR_Y будут добавлены, когда включен параметр Местоположение (location в Python), поле NEAR_ANGLE добавляется, когда включен параметр Угол (angle в Python), а поле NEAR_FC будет добавлено, если используется несколько входных наборов данных.

Value Table

Производные выходные данные

ИмяОписаниеТип данных
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.Near_analysis('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.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 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: Да

Связанные разделы