Proche (Analyse)

Niveau de licence :BasicStandardAdvanced

Récapitulatif

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

Recherche d'entités de proximité par type de géométrie

Utilisation

Syntaxe

Near_analysis (in_features, near_features, {search_radius}, {location}, {angle}, {method})
ParamètreExplicationType 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 en entrée de proximité peuvent être de type point, polyligne, polygone ou multi-points. Si plusieurs couches ou classes d'entités sont spécifiées, un champ nommé 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 sur des 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 est utilisée, vous devez utiliser une unité linéaire telle que le kilomètre ou le mètre.

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.

  • NO_LOCATION Les informations liées aux emplacements ne sont pas écrites dans la table en sortie. Il s'agit de l'option par défaut.
  • LOCATION Les informations liées aux emplacements sont écrites dans la table en sortie.
Boolean
angle
(Facultatif)

Spécifie si les valeurs d'angle de proximité sont calculées et écrites 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.

  • NO_ANGLELes valeurs d'angle de proximité ne sont pas écrites. Il s'agit de l'option par défaut.
  • ANGLELes valeurs d'angle de proximité sont écrites dans le champ NEAR_ANGLE.
Boolean
method
(Facultatif)

Détermine s'il convient d'utiliser un plus court chemin sur une sphéroïde (géodésique) ou une méthode de terre plate (plane). Il est fortement conseillé d'utiliser la méthode GEODESIC 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.

  • PLANARUtilise des distances planes entre les entités. Il s'agit de l'option par défaut.
  • GEODESICUtilise des distances géodésiques entre les entités. Cette méthode tient compte de la courbure de la sphéroïde et gère correctement les données situées près de la ligne de changement de jour et des pôles.
String

Exemple de code

1er exemple d'utilisation de la fonction Proche (fenêtre Python)

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')
2e exemple d'utilisation de la fonction Proche (script Python autonome)

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]
3e exemple d'utilisation de la fonction Proche (script Python autonome)

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.
4e exemple d'utilisation de la fonction Proche (script Python autonome)

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]}

Environnements

Thèmes connexes

Informations de licence

ArcGIS for Desktop Basic: Annuler
ArcGIS for Desktop Standard: Annuler
ArcGIS for Desktop Advanced: Oui
5/10/2014