Proche (Analyse)
Récapitulatif
Détermine la distance entre chaque entité dans les entités en entrée et l'entité la plus proche dans les entités de proximité, à l'intérieur du rayon de recherche.
Pour en savoir plus sur le calcul de la proximité dans les outils de géotraitement
Illustration
Utilisation
-
Les deux champs suivants sont ajoutés à la table attributaire des entités en entrée. Si les champs existent déjà, les valeurs de champ sont mises à jour.
- NEAR_FID : stocke l'identifiant de l'entité la plus proche.
- NEAR_DIST : stocke la distance entre l'entité en entrée et l'entité la plus proche. La valeur de ce champ est exprimée dans l'unité linéaire du système de coordonnées de l'entité en entrée.
-
NEAR_FID et NEAR_DIST ont la valeur -1 si aucune entité n'est trouvée dans le rayon de recherche.
Les champs NEAR_X, NEAR_Y, NEAR_ANGLE et NEAR_FC peuvent également être ajoutés à la table attributaire des entités en entrée, comme indiqué dans les entrées concernant les entités de proximité et les paramètres facultatifs. La valeur d'un champ est mise à jour si les champs existent déjà. Si aucune entité ne figure dans le rayon de recherche, les valeurs de ces champs sont -1 pour NEAR_X et NEAR_Y, 0 pour NEAR_ANGLE et nul pour NEAR_FC.
-
Les entités en entrée et les entités de proximité peuvent être des points, des multi-points, des lignes ou des polygones.
-
Les Entités de proximité peuvent comprendre une ou plusieurs classes d'entités ayant des types de forme différents.
-
Un même jeu de données peut être utilisé à la fois pour les Entités en entrée et les Entités de proximité. Lorsque l'entité la plus proche d'une entité en entrée est elle-même (NEAR_DIST égal à 0), cette entité est ignorée du calcul et la prochaine entité la plus proche est recherchée.
-
Les entités en entrée peuvent correspondre à une couche sur laquelle vous avez effectué une sélection. Les entités sélectionnées sont utilisées et mises à jour durant l'exécution de l'outil. La valeur des champs nouvellement créés (comme NEAR_FID et NEAR_DIST) pour les entités restantes est définie sur -1.
Les distances calculées par cet outil sont exprimées dans l'unité du système de coordonnées des entités en entrée. Si votre entrée se trouve dans un système de coordonnées géographiques et si vous souhaitez que les distances en sortie soient mesurées dans une unité linéaire (par opposition aux degrés décimaux), vous devez tout d'abord projeter votre entrée vers un système de coordonnées projetées à l'aide de l'outil Projeter. Pour des résultats optimaux, utilisez une projection équidistante ou une projection prévue pour votre zone d'étude (UTM, par exemple).
Lorsque plusieurs entités de proximité présentent la même distance la plus courte jusqu'à l'entité en entrée, l'une d'elles est choisie de manière aléatoire comme entité la plus proche.
Syntaxe
Paramètre | Explication | Type de données |
in_features |
Entités en entrée qui peuvent être de type point, polyligne, polygone ou multi-points. | Feature Layer |
near_features [near_features,...] |
Valeur utilisée pour retrouver les entités les plus proches d'entités en entrée. Il peut y avoir une ou plusieurs entrées d'entités de proximité : chaque entrée peut être de type point, polyligne, polygone ou multi-points. Lorsque plusieurs entrées d'entités de proximité sont spécifiées, un nouveau champ, NEAR_FC, est ajouté à la table en entrée pour stocker les chemins de la classe d'entités source qui contient les entités les plus proches. | Feature Layer |
search_radius (Facultatif) |
Spécifie le rayon utilisé pour rechercher les entités de proximité candidates. Les entités de proximité dans ce rayon sont prises en compte pour le calcul de l'entité la plus proche. Si aucune valeur n'est spécifiée, autrement dit si le rayon par défaut (vide) est utilisé, toutes les entités de proximité sont prises en compte pour le calcul. Par défaut, l'unité du rayon de recherche correspond à celles du système de coordonnées des unités en entrée. Vous pouvez changer les unités. Par défaut, cela n'a aucun impact sur les unités du champ NEAR_DIST qui est basé sur les unités du système de coordonnées des entités en entrée. | Linear unit |
location (Facultatif) |
Spécifie si les coordonnées x et y de l'emplacement le plus proche de l'entité de proximité sont écrites dans de nouveaux champs, à savoir respectivement NEAR_X et NEAR_Y.
| Boolean |
angle (Facultatif) |
Spécifie si les valeurs d'angle de proximité en degrés décimaux seront calculées et écrites dans un nouveau champ, NEAR_ANGLE. Un angle de proximité effectue une mesure à partir de l'axe des x (axe horizontal) dans la direction de la ligne qui connecte une entité en entrée à son entité la plus proche, à leurs emplacements les plus proches. Cette valeur est comprise entre 0 et 180 ou 0 et -180 degrés décimaux, -0 à l'est, 90 au nord, 180 (-180°) à l'ouest et -90 au sud.
| Boolean |
Exemple de code
Le script de fenêtre interactive Python ci-dessous illustre l'utilisation de la fonction Proche en mode immédiat.
import arcpy
arcpy.env.workspace = "C:/data/city.gdb"
## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
Le script Python ci-dessous illustre l'utilisation de la fonction Proche dans un script autonome.
# 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]
Le script Python ci-dessous illustre la méthode de conversion de l'angle de proximité vers l'azimut.
# 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.
Illustre le post-traitement avec la sortie dérivée de l'outil Proche. Le script détecte les entités en entrée les plus proches de chaque entité.
# 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]}