Ближайший объект (Near) (Анализ)
Резюме
Определяет расстояние от каждого объекта входных пространственных объектов до ближайшего объекта на заданном радиусе поиска.
<Более подробно о вычислении близости в инструментах геообработки
Рисунок

Использование
-
Следующие два поля будут добавлены в таблицу атрибутов входных объектов. Если поля уже существуют, их значения обновляются.
- NEAR_FID – Хранит идентификатор ближайшего объекта.
- NEAR_DIST – Хранит расстояние от входного до ближайшего объекта. Значение данного поля представляет собой значение в линейных единицах измерения системы координат входных данных.
-
Значения для NEAR_FID и NEAR_DIST будут равны -1, если в пределах радиуса поиска не найдено пространственного объекта.
В таблицу атрибутов входных объектов могут быть также добавлены поля NEAR_X, NEAR_Y, NEAR_ANGLE и NEAR_FC. Если поля уже существуют, их значения обновляются. Если в пределах радиуса поиска не будет найдено ни одного пространственного объекта, то для этих полей будут указаны специальные значения: -1 для NEAR_X и NEAR_Y, 0 – для NEAR_ANGLE и null – для NEAR_FC.
-
И входные, и ближайшие пространственные объекты могут быть точками, мультиточками, линиями или полигонами.
-
Ближайшие объекты могут состоять из одного или нескольких классов пространственных объектов разных типов геометрии.
-
Тот же набор данных может использоваться как входные объекты и как ближайшие объекты. Если ближайший к входному объект – тот же самый объект (NEAR_DIST равен 0), этот объект игнорируется при вычислении, и будет произведен поиск следующего ближайшего объекта.
-
Входные объекты могут являться слоем, на котором вы выполняете выбор. Выбранные объекты будут использоваться и обновляться при выполнении этого инструмента. В новых полях оставшихся объектов (например, в полях NEAR_FID и NEAR_DIST) будут установлены значения -1.
Расстояния, вычисленные этим инструментом, задаются в единицах измерения, соответствующих системе координат входных объектов. Если входные данные заданы в географической системе координат и вы хотите измерять выходные расстояния в линейных единицах (а не в десятичных градусах), необходимо сначала спроецировать входные данные в систему координат проекции с помощью инструмента Проецировать (Project). Для получения наилучших результатов используйте равнопромежуточную проекцию или проекцию, соответствующую вашей изучаемой территории (например, UTM).
Когда более одного ближайшего объекта имеют равное кратчайшее расстояние от входного объекта, один из них выбирается в качестве ближайшего объекта случайным образом.
Синтаксис
Параметр | Объяснение | Тип данных |
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, соответственно.
| Boolean |
angle (дополнительно) |
Задает, будут ли вычислены значения углов до ближайших объектов в десятичных градусах и записаны в новое поле, NEAR_ANGLE. Угловое значение измеряется от оси x (горизонтальная ось) по направлению линии, соединяющей входной объект с ближайшим объектом в ближайшем местоположении; этот угол находится в пределах диапазона от 0 до 180 или от 0 до -180 десятичных градусов — 0 для востока, 90 для севера, 180 (-180°) для запада и -90 для юга.
| Boolean |
Пример кода
Пример скрипта Python для функции Ближайший объект с запуском из окна Python в ArcGIS.
import arcpy
arcpy.env.workspace = "C:/data/city.gdb"
## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
Пример скрипта 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]
Следующий скрипт 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) Скрипт ищет для каждого ближайшего объекта, к каким входным объектам он ближе всего.
# 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]}