Resumen
Calcula la distancia y la información de proximidad adicional entre entidades de entrada y la entidad más cercana en otras clases de entidad o capa.
Más información acerca del cálculo de la proximidad en las herramientas de geoprocesamiento
Ilustración
Uso
Los campos siguientes se agregarán a la entrada. Si los campos ya existen, los valores de campo se actualizarán. Estos nombres de campo se pueden configurar con el parámetro Nombres de campo (field_names).
- NEAR_FID: el ObjectID de la entidad más cercana. Si no se encuentra ninguna entidad próxima, el valor será -1.
- NEAR_DIST: la distancia entre la entidad cercana y la de entrada. El valor está en unidades lineales del sistema de coordenadas de entidades de entrada o en metros cuando el parámetro Método está establecido en Geodésico y la entrada está definida en un sistema de coordenadas geográficas. Si no se encuentra ninguna entidad próxima, el valor será -1.
- NEAR_FC: la ruta de catálogo a la clase de entidad que contiene la entidad cercana. Este campo solo se agrega a la tabla de salida si se especifican varias entidades cercanas. Si no se encuentra ninguna entidad próxima, el valor será nulo o una cadena de caracteres vacía.
Los siguientes campos se agregarán a las entidades de entrada si el parámetro Ubicación está activado (parámetro location establecido en LOCATION en Python). Los valores de campo se actualizan, si los campos ya existen. Las unidades de valor de campo varían en función del método seleccionado para el parámetro Método. Si se establece como Planar, el valor estará en la unidad lineal del sistema de coordenadas de la entidad de entrada. Si se establece como Geodésico, el valor estará en el sistema de coordenadas geográficas asociado al sistema de coordenadas de la entidad de entrada.
Nombre de campo Descripción NEAR_X La coordenada x de la ubicación de la entidad cercana que está más cerca de la entidad de entrada. Si no se encuentra ninguna entidad próxima, el valor será -1.
NEAR_Y La coordenada x de la ubicación de la entidad cercana que está más cerca de la entidad de entrada. Si no se encuentra ninguna entidad próxima, el valor será -1.
El siguiente campo se agregará a las entidades de entrada si el parámetro Ángulo está activado (parámetro angle definido como ANGLE en Python). Los valores de campo se actualizan, si los campos ya existen.
Campo Descripción NEAR_ANGLE El ángulo de la línea en las ubicaciones FROM_X y FROM_Y que conecta las entidades de entrada con la entidad cercana. Si no se encuentra una entidad próxima o esta interseca la entidad de entrada, el valor será 0.
Los valores para NEAR_FID y NEAR_DIST serán de -1 si no se encuentra una entidad dentro del radio de búsqueda.
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 (punto, multipunto, línea o polígono).
La misma capa o clase de entidad se puede usar tanto como entidades cercanas como de entrada. En esta situación, la entidad de entrada que se está evaluando se excluye de los candidatos de entidad cercana para evitar que todas las entidades estén próximas a ellas mismas.
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.
Cuando la distancia más corta de una entidad de entrada es la misma en más de una entidad próxima, una de ellas es elegida de forma aleatoria como la entidad más cercana.
Cuando se utiliza la opción Planar para el parámetro Método, las entidades de entrada deben tener una proyección que sea adecuada para la medición de distancia, como una proyección equidistante.
Más información sobre sistemas de coordenadas y proyecciones.
Para visualizar las ubicaciones FROM_X, FROM_Y, NEAR_X y NEAR_Y, la tabla de salida se puede usar como entrada de las herramientas Crear capa de eventos XY o De XY a línea.
Sintaxis
arcpy.analysis.Near(in_features, near_features, {search_radius}, {location}, {angle}, {method}, {field_names})
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,...] | Una o más capas de entidad o clases de entidad que contienen candidatos de entidades próximas. Las entidades cercanas pueden ser poligonales, de punto, polilínea o multipunto. Si se especifican varias capas o clases de entidad, se agrega un campo NEAR_FC a la tabla de entrada que almacenará las rutas de la clase de entidad de origen que contiene las entidades más cercanas encontradas. La misma capa o clase de entidad se puede usar tanto como entidades cercanas como de entrada. | Feature Layer |
search_radius (Opcional) | El radio que se utiliza para buscar entidades cercanas. Si no se especifica ningún valor, se tendrán en cuenta las entidades próximas. Si se especifica una distancia, pero no se especifica ninguna unidad o se especifica una unidad desconocida, se utilizan las unidades del sistema de coordenadas de las entidades de entrada. Si la opción Geodésico se utiliza en el parámetro Método (method='GEODESIC' en Python), utilice una unidad lineal, como kilómetros o millas. | Linear Unit |
location (Opcional) | Especifica si las coordenadas x e y de la ubicación más cercana de la entidad próxima se escribirán en los campos NEAR_X y NEAR_Y.
| Boolean |
angle (Opcional) | Especifica si el ángulo cercano se calculará y se escribirá en un campo NEAR_ANGLE en la tabla de salida. Un ángulo cercano mide la dirección de la línea que conecta una entidad de entrada con su entidad más cercana en sus ubicaciones más cercanas. Cuando el método PLANAR se utiliza en el parámetro method, el ángulo se encuentra dentro del rango de -180° a 180°, con 0° al este, 90° al norte, 180° (o -180°) al oeste y -90° al sur. Cuando se utiliza el método GEODESIC, el ángulo se encuentra dentro del rango de -180° a 180°, con 0° al norte, 90° al este, 180° (o -180°) al sur y -90° al oeste.
| Boolean |
method (Opcional) | Especifica si se utilizará una ruta más corta en el método esferoide (geodésico) o de Tierra plana (planar). Se recomienda utilizar el método Geodésico con datos almacenados en un sistema de coordenadas que no sea adecuado para mediciones de distancias (por ejemplo, Web Mercator o cualquier sistema de coordenadas geográficas), y cualquier análisis que abarque una extensa área geográfica.
| String |
field_names [[property, fieldname],...] (Opcional) | Especifica los nombres de los campos de atributos que se agregarán durante el procesamiento. Si no se utiliza este parámetro o se excluyen de este parámetro los campos que se agregarán, se usarán los nombres de campo predeterminados. De forma predeterminada, los campos NEAR_FID y NEAR_DIST siempre se agregarán, los campos NEAR_X y NEAR_Y se agregarán cuando el parámetro Ubicación (location en Python) esté activado, el campo NEAR_ANGLE se agregará cuando el parámetro Ángulo (angle en Python) esté activado y el campo NEAR_FC se agregará cuando se utilicen varias entradas. | Value Table |
Salida derivada
Nombre | Explicación | Tipo de datos |
out_feature_class | Las entidades de entrada actualizadas. | Capa de entidades |
Muestra de código
El siguiente script de la ventana interactiva de Python demuestra cómo utilizar la función Near en el modo inmediato.
import arcpy
arcpy.env.workspace = "C:/data/city.gdb"
## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
El siguiente script de Python muestra cómo utilizar la función Near en un script independiente.
# 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])
El siguiente script de Python demuestra cómo convertir el ángulo cercano a acimutal.
# 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.
El siguiente script de Python demuestra el procesamiento posterior con la salida derivada de la herramienta Near. El script busca, para cada entidad cercana, las entidades de entrada que se encuentran 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]}
Entornos
Información de licenciamiento
- Basic: Sí
- Standard: Sí
- Advanced: Sí