Cercano (Análisis)
Resumen
Determina la distancia de cada entidad de las entidades de entrada a la entidad más cercana de las entidades cercanas, dentro del radio de búsqueda.
Más información acerca del cálculo de la proximidad en las herramientas de geoprocesamiento
Ilustración
Uso
-
Los dos siguientes campos se agregarán a la tabla de atributos de las entidades de entrada. Los valores de campo se actualizan, si los campos ya existen.
- NEAR_FID: almacena el Id. de entidad de la entidad más cercana.
- NEAR_DIST: almacena la distancia de una entidad de entrada a la entidad más cercana. El valor de este campo se encuentra en la unidad lineal del sistema de coordenadas de entrada.
-
Los valores para NEAR_FID y NEAR_DIST serán de -1 si no se encuentra una entidad dentro del radio de búsqueda.
Opcionalmente, también se pueden agregar los campos NEAR_X, NEAR_Y, NEAR_ANGLE y NEAR_FC a la tabla de atributos de entidades de entrada como se explica en las entradas sobre los parámetros opcionales y las entidades cercanas. El valor de un campo se actualiza, si los campos ya existen. Si no se encuentra ninguna entidad dentro del radio de búsqueda, los valores de estos campos serán -1 para NEAR_X y NEAR_Y, 0 para NEAR_ANGLE y nulo para NEAR_FC.
-
Tanto las entidades de entrada como las entidades próximas pueden ser entidades de puntos, multipuntos, líneas o polígonos.
-
Las Entidades cercanas pueden incluir una clase de entidad o más de diferentes tipos de forma.
-
El mismo dataset se puede utilizar como Entidades de Entrada y como Entidades Próximas. Cuando la entidad más cercana de una entidad de entrada es ella misma (NEAR_DIST es 0), esta entidad se omite del cálculo y se busca la próxima entidad más cercana.
-
Las entidades de entrada pueden ser de una capa en la que realizó una selección. Las entidades seleccionadas se utilizarán y actualizarán durante la ejecución de la herramienta. Las entidades restantes tendrán valores de los campos creados recientemente (como NEAR_FID y NEAR_DIST) configurados en -1.
Las distancias calculadas por esta herramienta están en la unidad del sistema de coordenadas de las entidades de entrada. Si su entrada está en un sistema de coordenadas geográficas y desea que se midan las distancias de salida en una unidad lineal (a diferencia de los grados decimales), primero debe proyectar su entrada a un sistema de coordenadas proyectadas con la herramienta Proyectar. Para obtener mejores resultados, use una proyección equidistante o una proyección para su área de estudio (UTM, por ejemplo).
Cuando la distancia más corta de una entidad de entrada es la misma en más de una entidad cercana, una de ellas es elegida de forma aleatoria como la entidad más cercana.
Sintaxis
Parámetro | Explicación | Tipo de datos |
in_features |
Las entidades de entrada que pueden ser de tipo punto, polilínea, polígono o multipunto. | Feature Layer |
near_features [near_features,...] |
El valor que se utiliza para buscar las entidades más cercanas de las entidades de entrada. Puede haber una o más entradas de entidades próximas; cada entrada puede ser de tipo punto, polilínea, polígono o multipunto. Cuando se especifican varias entradas de entidades próximas, se agrega un nuevo campo, NEAR_FC, a la tabla de entrada para almacenar las rutas de la clase de entidad de origen que contiene las entidades más cercanas. | Feature Layer |
search_radius (Opcional) |
Especifica el radio que se utiliza para buscar entidades cercanas candidatas. Las entidades próximas dentro de este radio se consideran para calcular la entidad más cercana. Si no se especifica un valor, es decir que se utiliza el radio predeterminado (vacío), se consideran todas las entidades próximas para el cálculo. La unidad del radio de búsqueda predeterminado para las unidades del sistema de coordenadas de las entidades de entrada. Las unidades se pueden cambiar a cualquier otra unidad. Sin embargo, esto no tiene ningún impacto en las unidades de NEAR_DIST que se basan en las unidades del sistema de coordenadas de las entidades de entrada. | Linear unit |
location (Opcional) |
Especifica si se escribirán las coordenadas x e y de la ubicación más cercana de la entidad próxima en los nuevos campos NEAR_X y NEAR_Y, respectivamente.
| Boolean |
angle (Opcional) |
Especifica si se calcularán los valores del ángulo cercano en grados decimales y si se escribirán en un campo nuevo, NEAR_ANGLE. Un ángulo cercano mide del eje x (eje horizontal) hacia la dirección de la línea que conecta una entidad de entrada a su entidad más cercana en las ubicaciones más cercanas, y está dentro del rango de 0 a 180 o de 0 a -180 grados decimales, de 0 hacia el este, 90 al norte, 180 (-180°) al oeste, y -90 al sur.
| Boolean |
Ejemplo de código
La siguiente secuencia de comandos de la ventana de Python interactiva demuestra cómo utilizar la función Cerca en modo inmediato.
import arcpy
arcpy.env.workspace = "C:/data/city.gdb"
## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
La siguiente secuencia de comandos Python demuestra cómo utilizar la función Cerca en una secuencia de comandos independiente.
# 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]
La siguiente secuencia de comandos de Python demuestra cómo convertir el ángulo cercano de acimut.
# 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.
Demuestra el procesamiento posterior con la salida derivada de la herramienta Cerca. La secuencia de comandos busca, para cada entidad cercana, de cuáles entidades de entrada está más cerca.
# 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]}