Résumé
Calcule la distance et d'autres informations de proximité entre les entités en entrée et l'entité la plus proche dans une autre couche ou classe d'entités.
Pour en savoir plus sur le calcul de la proximité dans les outils de géotraitement
Illustration
Utilisation
Les champs suivants seront ajoutés à l'entrée. Si les champs existent déjà, les valeurs de champ seront mises à jour. Vous pouvez configurer ces noms de champ à l’aide du paramètre Field Names (Noms de champ) (field_names).
- NEAR_FID : ObjectID de l’entité de proximité la plus proche. Si aucune entité en entrée n'est trouvée, la valeur est -1.
- NEAR_DIST : distance entre l’entrée et l’entité de proximité. La valeur est exprimée dans l’unité linéaire du système de coordonnées des entités en entrée ou en mètres si le paramètre Method (Méthode) est défini sur Geodesic (Géodésique) et que l’entrée est dans un système de coordonnées géographiques. Si aucune entité de proximité n'est trouvée, la valeur est -1.
- NEAR_FC : chemin d’accès du catalogue à la classe d’entités qui contient l’entité de proximité. Ce champ est ajouté à la table en sortie uniquement si plusieurs entités de proximité sont spécifiées. Si aucune entité de proximité n'est détectée, la valeur sera une chaîne vide ou Null.
Les champs suivants seront ajoutés aux entités en entrée si le paramètre Location (Localisation) est sélectionné (paramètre location défini sur LOCATION dans Python). Si les champs existent déjà, les valeurs de champ sont mises à jour. Les unités des valeurs de champ dépendent de la méthode sélectionnée pour le paramètre Method (Méthode). Si le paramètre est défini sur Planar (Planaire), la valeur est exprimée dans l’unité linéaire du système de coordonnées de l’entité en entrée. Si le paramètre est défini sur Geodesic (Géodésique), la valeur est exprimée dans le système de coordonnées géographiques associé au système de coordonnées de l’entité en entrée.
Nom du champ Description NEAR_X Coordonnée x de la localisation de l’entité de proximité la plus proche de l’entité en entrée. Si aucune entité de proximité n'est trouvée, la valeur est -1.
NEAR_Y Coordonnée y de la localisation de l’entité de proximité la plus proche de l’entité en entrée. Si aucune entité en entrée n'est trouvée, la valeur est -1.
Le champ suivant sera ajouté aux entités en entrée si le paramètre Angle est sélectionné (paramètre angle défini sur ANGLE dans Python). Si les champs existent déjà, les valeurs de champ sont mises à jour.
Champ Description NEAR_ANGLE Angle de la ligne aux emplacements FROM_X et FROM_Y qui relie les entités en entrée à l’entité de proximité. Si aucune entité en entrée n'est trouvée ou si l'entité de proximité intersecte l'entité en entrée, la valeur est 0.
Les valeurs de NEAR_FID et NEAR_DIST sont -1 si aucune entité n'est trouvée dans le rayon de recherche.
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 (ponctuelle, multi-points, linéaire ou surfacique).
La même classe d’entités ou couche peut être utilisée à la fois pour les entités en entrée et de proximité. Dans ce cas, l’entité en entrée en cours d’évaluation est exclue des entités de proximité candidates, afin d’éviter que toutes les entités soient les plus proches d’elles-mêmes.
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.
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.
Lorsque vous utilisez l’option Planar (Planaire) pour le paramètre Method (Méthode), les entités en entrée doivent être dans une projection adéquate pour une mesure de distance, par exemple une projection équidistante.
En savoir plus sur les systèmes de coordonnées et projections.
Pour visualiser les localisations FROM_X, FROM_Y, NEAR_X et NEAR_Y, la table en sortie peut être utilisée en entrée pour l’outil Générer une couche d’événements XY ou XY vers lignes.
Syntaxe
Near(in_features, near_features, {search_radius}, {location}, {angle}, {method}, {field_names})
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,...] | Une ou plusieurs couches d'entités ou classes d'entités contenant des candidats d'entités de proximité. Les entités de proximité peuvent être de type point, polyligne, polygone ou multi-points. Si plusieurs couches ou classes d’entités sont spécifiées, le champ NEAR_FC est ajouté à la table en entrée pour stocker les chemins de la classe d’entités source contenant l’entité la plus proche trouvée. La même classe d’entités ou couche peut être utilisée à la fois pour les entités en entrée et de proximité. | Feature Layer |
search_radius (Facultatif) | Rayon utilisé pour rechercher les entités de proximité. Si aucun valeur n'est spécifiée, toutes les entités de proximité sont prises en compte. Si une distance est spécifiée sans unité ou si elle est définie comme étant inconnue, les unités du système de coordonnées des entités en entrée sont utilisées. Si l’option Geodesic (Géodésique) est utilisée pour le paramètre Method (Méthode) (method='GEODESIC' dans Python), utilisez une unité linéaire, telle que les kilomètres ou les miles. | 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 les champs NEAR_X et NEAR_Y.
| Boolean |
angle (Facultatif) | Spécifie si l’angle de proximité est calculé et écrit dans un champ NEAR_ANGLE dans la table en sortie. Un angle de proximité mesure la direction de la ligne qui connecte une entité en entrée avec son entité la plus proche à leurs emplacements les plus proches. Lorsque la méthode PLANAR est utilisée dans le paramètre method, l’angle se situe dans la plage -180° à 180°, avec 0° à l’est, 90° au nord, 180° (ou -180°) à l’ouest et -90° au sud. Lorsque la méthode GEODESIC est utilisée, l’angle se situe dans la plage -180° à 180°, avec 0° au nord, 90° à l’est, 180° (ou -180°) au sud et -90° à l’ouest.
| Boolean |
method (Facultatif) | Spécifie si le chemin le plus court est utilisé sur une sphéroïde (géodésique) ou une méthode de terre plate (plane). Il est conseillé d’utiliser la méthode Geodesic (Géodésique) avec des données stockées dans un système de coordonnées non approprié pour les mesures de distance (par exemple, Web Mercator ou tout système de coordonnées géographiques) et toute analyse couvrant une zone géographique importante.
| String |
field_names [[property, fieldname],...] (Facultatif) | Spécifie les noms des champs attributaires qui sont ajoutés au cours du traitement. Si ce paramètre n’est pas utilisé ou si des champs à ajouter sont exclus de ce paramètre, les noms de champ par défaut sont utilisés. Par défaut, les champs NEAR_FID et NEAR_DIST sont toujours ajoutés, les champs NEAR_X et NEAR_Y sont ajoutés lorsque le paramètre Location (Localisation) (location dans Python) est activé, le champ NEAR_ANGLE est ajouté lorsque le paramètre Angle (angle dans Python) est activé, et le champ NEAR_FC est ajouté lorsque plusieurs entrées sont utilisées. | Value Table |
Sortie dérivée
Nom | Explication | Type de données |
out_feature_class | Entités en entrée mises à jour. | Couche d’entités |
Exemple de code
Le script de fenêtre interactif Python ci-dessous illustre l’utilisation de la fonction Near 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 l'outil Near dans un script autonome.
# 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])
Le script Python suivant 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.
Le script Python suivant illustre le post-traitement avec la sortie dérivée de l’outil Near. 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]}
Environnements
Informations de licence
- Basic: Non
- Standard: Non
- Advanced: Oui
Rubriques connexes
Vous avez un commentaire à formuler concernant cette rubrique ?