Jointure spatiale (Analyse)
Récapitulatif
Joint les attributs d'une classe d'entités avec une autre en fonction d'une relation spatiale. Les entités cible et les attributs joints à partir des entités faisant l'objet d'une jointure sont écrits dans la classe d'entités en sortie.
Utilisation
Une jointure spatiale implique l'appariement d'enregistrements provenant des Entités jointes vers les Entités cible en fonction de leurs emplacements spatiaux respectifs. Tous les attributs des entités jointes sont ajoutés par défaut aux attributs des entités cible. Vous pouvez sélectionner les attributs qui seront écrits dans la sortie en les manipulant dans le paramètre Appariement des champs des entités jointes.
Deux nouveaux champs, Join_Count et TARGET_FID, sont toujours ajoutés à la classe d'entités en sortie. Joint_Count indique le nombre d'entités jointes correspondant à chaque entité cible (TARGET_FID).
Les règles de combinaison spécifiées dans le paramètre Appariement des champs des entités jointes s'appliquent uniquement aux champs des entités jointes, et ce seulement lorsque plusieurs entités sont appariées avec une entité cible (Join_Count > 0). Par exemple, si trois entités dotées de valeurs attributaires DEPTH de 15,5, 2,5 et 3,3 sont jointes et qu'une règle de combinaison Moyenne est appliquée, la valeur du champ en sortie est de 6,1.
Lorsque le paramètreOpération de jointure est JOIN_ONE_TO_MANY, plusieurs lignes peuvent être générées dans la classe d'entités en sortie pour chaque entité cible. Un nouveau champ JOIN_FID est ajouté à la sortie. Cela facilite la décision de combinaison de telle entité jointe (JOIN_FID) avec telle entité cible (TARGET_FID).
Toutes les entités cible en entrée sont écrites dans la classe d'entités en sortie uniquement si :
- L'Opération de jointure est définie comme étant JOIN_ONE_TO_ONE et
- l'option Conserver toutes les entités cible est activée (définie comme étant JOIN_ALL dans le script).
Lorsque l'Option de correspondance est définie comme étant CLOSEST, il est possible que deux ou plus entités jointes se trouvent à la même distance de l'entité cible. Si tel est le cas, l'une des entités jointes est sélectionnée de manière aléatoire comme entité correspondante (le FID de l'entité jointe n'a aucune influence sur cette sélection aléatoire). Si vous souhaitez trouver la 2e, 3e ou Ne entité la plus proche, utilisez l'outil Générer la table de proximité.
Syntaxe
Paramètre | Explication | Type de données |
target_features |
Les attributs des entités cible et les attributs provenant des entités jointes sont transférés vers la classe d'entités en sortie. Cependant, un sous-ensemble d'attributs peut être défini dans le paramètre d'appariement de champs. Les entités cible peuvent correspondre à toute source de données spatiales prise en charge par ArcGIS. | Feature Layer |
join_features |
Les attributs provenant des entités jointes sont joints aux attributs des entités cible. Reportez-vous à la présentation du paramètre Opération de jointure pour plus d'informations sur la façon dont l'agrégation d'attributs joints est affectée par le type d'opération de jointure. Les entités jointes peuvent correspondre à toute source de données spatiales prise en charge par ArcGIS. | Feature Layer |
out_feature_class |
Nouvelle classe d'entités contenant les attributs des entités cible et jointes. Tous les attributs des entités cible et des entités jointes sont écrits par défaut dans la sortie. Cependant, l'ensemble d'attributs à transférer peut être contrôlé dans le paramètre d'appariement de champs. | Feature Class |
join_operation (Facultatif) |
Détermine le mode de traitement des jointures entre les entités cible et les entités jointes dans la classe d'entités en sortie, si plusieurs entités jointes présentent une relation spatiale identique avec une même entité cible.
| String |
join_type (Facultatif) |
Détermine si toutes les entités cible sont conservées dans la classe d'entités en sortie (appelée "jointure externe"), ou uniquement celles ayant la relation spatiale spécifiée avec les entités jointes ("jointure interne").
| Boolean |
field_mapping (Facultatif) |
Détermine les champs attributaires figurant dans la classe d'entités en sortie. La liste initiale contient tous les champs provenant à la fois des entités cible et des entités jointes. Vous pouvez ajouter, supprimer ou renommer les champs, ou modifier leurs propriétés. Les champs sélectionnés dans les entités cible sont transférés tels quels, mais ceux sélectionnés dans les entités jointes peuvent être agrégés par une règle de combinaison valide. Pour plus d'informations sur l'appariement de champs, reportez-vous aux rubriques d'aide Utilisation du contrôle d'appariement de champs et Appariement de champs en entrée aux champs en sortie. | Field Mappings |
match_option (Facultatif) |
Définit les critères utilisés pour l'appariement des enregistrements. Les options de correspondance sont les suivantes :
| String |
search_radius (Facultatif) |
Les entités jointes sont prises en compte pour la jointure spatiale si elles se trouvent à une distance égale ou inférieure à cette valeur d'une entité cible. L'option de rayon de recherche est valide uniquement lorsque l'Option de correspondance spécifiée est INTERSECT ou CLOSEST. L'utilisation d'un rayon de recherche de 100 mètres avec l'Option de correspondance INTERSECT revient à dire : si une entité jointe est à moins de 100 mètres d'une entité cible, transférer les attributs de l'entité jointe à l'entité cible. L'utilisation d'un rayon de recherche de 100 mètres avec l'Option de correspondance CLOSEST revient à dire : si une entité jointe est à moins de 100 mètres d'une entité cible et qu'elle est l'entité jointe la plus proche de cette entité cible, transférer les attributs de l'entité jointe à l'entité cible. | Linear unit |
distance_field_name (Facultatif) |
Nom d'un champ à ajouter à la classe d'entités en sortie contenant la distance entre l'entité cible et l'entité jointe la plus proche. Cette option est valide uniquement lorsque l'option de correspondance spécifiée est CLOSEST. Vous pouvez laisser ce paramètre vide si vous ne voulez pas de champ en sortie. | String |
Exemple de code
Le script ci-dessous illustre l'utilisation de la fonction SpatialJoin dans une fenêtre Python.
import arcpy target_features = "C:/data/usa.gdb/states" join_features = "C:/data/usa.gdb/cities" out_feature_class = "C:/data/usa.gdb/states_cities" arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class)
Le script autonome ci-dessous illustre l'utilisation de la fonction SpatialJoin pour la jointure des attributs de villes aux états.
# Name: SpatialJoin_Example2.py # Description: Join attributes of cities to states based on spatial relationships. # Requirements: os module # Import system modules import arcpy import os # Set local variables workspace = r"C:\gpqa\mytools\spatialjoin\usa.gdb" outWorkspace = r"C:\gpqa\mytools\spatialjoin\output.gdb" # Want to join USA cities to states and calculate the mean city population # for each state targetFeatures = os.path.join(workspace, "states") joinFeatures = os.path.join(workspace, "cities") # Output will be the target features, states, with a mean city population field (mcp) outfc = os.path.join(outWorkspace, "states_mcp2") # Create a new fieldmappings and add the two input feature classes. fieldmappings = arcpy.FieldMappings() fieldmappings.addTable(targetFeatures) fieldmappings.addTable(joinFeatures) # First get the POP1990 fieldmap. POP1990 is a field in the cities feature class. # The output will have the states with the attributes of the cities. Setting the # field's merge rule to mean will aggregate the values for all of the cities for # each state into an average value. The field is also renamed to be more appropriate # for the output. pop1990FieldIndex = fieldmappings.findFieldMapIndex("POP1990") fieldmap = fieldmappings.getFieldMap(pop1990FieldIndex) # Get the output field's properties as a field object field = fieldmap.outputField # Rename the field and pass the updated field object back into the field map field.name = "mean_city_pop" field.aliasName = "mean_city_pop" fieldmap.outputField = field # Set the merge rule to mean and then replace the old fieldmap in the mappings object # with the updated one fieldmap.mergeRule = "mean" fieldmappings.replaceFieldMap(pop1990FieldIndex, fieldmap) # Delete fields that are no longer applicable, such as city CITY_NAME and CITY_FIPS # as only the first value will be used by default x = fieldmappings.findFieldMapIndex("CITY_NAME") fieldmappings.removeFieldMap(x) y = fieldmappings.findFieldMapIndex("CITY_FIPS") fieldmappings.removeFieldMap(y) #Run the Spatial Join tool, using the defaults for the join operation and join type arcpy.SpatialJoin_analysis(targetFeatures, joinFeatures, outfc, "#", "#", fieldmappings)