Résumé
Joint des attributs d'une entité vers une autre en fonction des relations spatiales. Les entités cible et les attributs joints des entités jointes sont écrits dans la classe d'entités en sortie.
Utilisation
Une jointure spatiale apparie les lignes des Join Features (Entités jointes) avec les Target Features (Entités cible) en fonction de leurs positions spatiales relatives.
Par défaut, tous les attributs des entités jointes sont ajoutés aux attributs des entités cible et copiés dans la classe des entités en sortie. Vous pouvez déterminer quels attributs sont écrits dans la sortie en les manipulant via le paramètre Field Map of Join Features (Appariement des champs des entités jointes).
Deux nouveaux champs, Join_Count et TARGET_FID, sont ajoutés à la classe d’entités en sortie. Join_Count indique le nombre d’entités jointes correspondant à chaque entité cible (TARGET_FID).
Un autre nouveau champ, JOIN_FID, est ajouté à la sortie lorsque Join one to many (Joindre un vers plusieurs) (JOIN_ONE_TO_MANY dans Python) est spécifié dans le paramètre Join Operation (Opération de jointure) (join_operation dans Python).
Lorsque le paramètre Opération de jointure est Joindre un vers plusieurs, il peut exister plusieurs lignes dans la classe d'entités en sortie pour chaque entité cible. Le champ JOIN_FID permet de déterminer quelle entité est jointe à quelle entité cible (TARGET_FID). Une valeur égale à -1 dans le champ JOIN_FID signifie qu’aucune entité ne remplit la relation spatiale spécifiée avec l’entité cible.
Toutes les entités cible en entrée sont écrites dans la classe d'entités en sortie si les deux conditions suivantes s’appliquent :
- Le paramètre Join Operation (Opération de jointure) est défini sur Join one to one (Joindre un vers un).
- L'option Conserver toutes les entités cible est activée (join_type = "KEEP_ALL" dans Python).
Tous les champs du jeu de données en sortie et leur contenu peuvent être gérés à l'aide du contrôle Appariement des champs.
- Pour modifier l’ordre des champs, sélectionnez un nom de champ et faites-le glisser jusqu’à l’emplacement souhaité.
- Le type de données par défaut d’un champ en sortie est identique au type de données du premier champ en entrée (du même nom) qu’il rencontre. Vous pouvez à tout moment changer manuellement le type de données pour tout autre type de données valide.
- Les règles de combinaison suivantes sont disponibles : premier, dernier, joindre, somme, moyenne, médiane, mode, minimum, maximum, écart type, et total.
- Lorsque vous utilisez la règle de combinaison Join (Joindre), vous pouvez spécifier un délimiteur (espace, virgule, point, tiret, etc.). Pour utiliser un espace, vérifiez que le pointeur de votre souris se trouve au début de la zone de saisie et appuyez une fois sur la barre d'espacement.
- Vous pouvez spécifier les positions de début et de fin des champs de texte à l'aide de l'option de format.
- N’exécutez pas d’écart type sur une entrée unique car les valeurs ne peuvent pas être divisées par zéro. L'écart type n'est pas une option valide pour les entrées uniques.
Les règles de combinaison spécifiées dans le paramètre Appariement des champs des entités jointes s'appliquent uniquement aux attributs des entités jointes, lorsque plusieurs entités sont appariées à une entité cible (lorsque Join_Count > 1). Si, par exemple, trois entités avec des valeurs attributaires DEPTH égales à 15,5, 2,5 et 3,3 sont jointes, et si une règle de combinaison de moyenne est appliquée, le champ en sortie aura une valeur de 6,1. Les valeurs Null des champs de jointure sont ignorées dans le calcul de statistiques. Par exemple, 15,5, <null> et 2,5 produisent 9,0 pour Moyenne et 2 pour Total.
Lorsque le paramètre Match Option (Option de correspondance) est défini sur Closest (Le plus proche) ou sur Closest geodesic (Géodésique le plus proche), il est possible qu'au moins deux entités jointes soient à la même distance de l'entité cible. Lorsque c’est le cas, l'une des entités jointes est sélectionnée de manière aléatoire en tant qu'entité appariée (l’ID d’objet de l'entité jointe n'influence pas cette sélection aléatoire). Si vous souhaitez trouver les 2e, 3e ou Ne entités les plus proches, utilisez l'outil Générer la table de proximité.
Si une entité jointe présente une relation spatiale avec plusieurs entités cible, elle est comptabilisée autant de fois qu’une correspondance est détectée avec l’entité cible. Par exemple, si un point se trouve dans trois polygones, il est comptabilisé trois fois, à savoir une fois pour chaque polygone.
Pour plus d'informations sur l'utilisation des relations spatiales tridimensionnelles Intersect 3D (Intersection 3D) et Within a distance 3D (Dans une distance 3D), reportez-vous à la rubrique Sélectionner selon l’emplacement : relations 3D.
Syntaxe
SpatialJoin(target_features, join_features, out_feature_class, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
Paramètre | Explication | Type de données |
target_features | Les attributs des entités cible et les attributs des entités jointes sont transférés vers la classe d'entités en sortie. Toutefois, un sous-ensemble d'attributs peut être défini dans le paramètre d'appariement des champs. | Feature Layer |
join_features | Les attributs des entités jointes sont joints aux attributs des entités cible. Reportez-vous à l'explication du paramètre join_operation pour en savoir plus sur les répercussions du type d'opération de jointure sur l'agrégation des attributs joints. | Feature Layer |
out_feature_class | Nouvelle classe d'entités contenant les attributs des entités jointes et cible. Par défaut, tous les attributs des entités cible et les attributs des entités jointes sont écrits dans la sortie. Toutefois, l'ensemble d'attributs à transférer peut être contrôlé par le paramètre d'appariement des champs. | Feature Class |
join_operation (Facultatif) | Spécifie 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) | Spécifie si toutes les entités cible sont conservées dans la classe d'entités en sortie (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 quels champs attributaires se trouveront en sortie. Par défaut, tous les champs des entrées seront inclus. Il est possible d’ajouter, de supprimer, de renommer, de réorganiser les champs, ainsi que de modifier leurs propriétés. Les règles de combinaison permettent de spécifier la manière dont les valeurs de deux champs en entrée ou plus sont combinées ou fusionnées en une seule valeur en sortie. Plusieurs règles de combinaison permettent de déterminer de quelle manière sont renseignées les valeurs du champ en sortie.
Dans Python, vous pouvez utiliser la classe FieldMappings pour définir ce paramètre. | Field Mappings |
match_option (Facultatif) | Spécifie les critères utilisés pour l'appariement des lignes.
| 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. Un rayon de recherche est valide uniquement lorsque la relation spatiale est spécifiée (match_option) est défini sur INTERSECT, WITHIN_A_DISTANCE, WITHIN_A_DISTANCE_GEODESIC, HAVE_THEIR_CENTER_IN, CLOSEST ou CLOSEST_GEODESIC. Par exemple, l'utilisation d'un rayon de recherche de 100 mètres avec la relation spatiale WITHIN_A_DISTANCE permet de joindre une entité à moins de 100 mètres d'une entité cible. Pour les trois relations WITHIN_A_DISTANCE, si aucune valeur n'est spécifiée pour search_radius, une distance de 0 est utilisée. | 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. Ce paramètre est valide uniquement lorsque la relation spatiale est spécifiée (match_option définie sur CLOSEST ou CLOSEST_GEODESIC). La valeur de ce champ est -1 si aucune entité ne fait l'objet d'une correspondance dans un rayon de recherche. Si aucun nom de champ n'est spécifié, le champ n'est pas ajouté à la classe d'entités 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 montre comment utiliser la fonction SpatialJoin pour joindre 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)
Environnements
Informations de licence
- Basic: Oui
- Standard: Oui
- Advanced: Oui
Rubriques connexes
Vous avez un commentaire à formuler concernant cette rubrique ?