Unión espacial (Análisis)
Resumen
Une los atributos de una entidad con otra basada en la relación espacial. Las entidades de destino y los atributos unidos de las entidades de unión se escriben en la clase de entidad de salida.
Vea los ejemplos gráficos que explican las relaciones espaciales
Uso
Una unión espacial implica la concordancia de las filas de las Entidades de unión con las Entidades de destino según sus ubicaciones espaciales relativas.
Por defecto, todos los atributos de las entidades de unión se incorporan a los atributos de las entidades de destino y se copian a la clase de entidad de salida. Puede definir cuáles de los atributos se escribirán en la salida al manipularlos en el parámetro Campo del mapa de las entidades de unión.
Siempre se agregan dos nuevos campos llamados Join_Count y TARGET_FID a la clase de entidad de salida. Join_Count indica cuántas entidades de unión concuerdan con cada entidad de destino (TARGET_FID).
Otro nuevo campo, JOIN_FID se agrega a la salida cuando se especifica JOIN_ONE_TO_MANY en el parámetro Operación de unión.
Cuando el parámetro Operación de unión es JOIN_ONE_TO_MANY puede haber más de una fila en la clase de entidad de salida para cada entidad de destino. El campo JOIN_FID hace que sea más fácil determinar qué entidad se une a qué entidad de destino (TARGET_FID). Un valor de -1 para el campo JOIN_FID significa que ninguna entidad cumple con la relación espacial especificada con la entidad de destino.
Todas las entidades de destino de entrada se escriben en la clase de entidad de salida solo si:
- La Operación de unión está establecida en JOIN_ONE_TO_ONE y
- Mantener todas las entidades de destino está marcada (establecida en KEEP_ALL en la secuencia de comandos).
Las reglas de fusión especificadas en el parámetro Mapa de campo de Entidades de unión solo se aplican a los atributos de las entidades de unión y cuando más de una entidad se asocia con una entidad de destino (cuando Join_Count > 1). Por ejemplo, si tres entidades con valores de atributo DEPTH de 15,5; 2,5 y 3,3 se unen, y se aplica una regla de fusión de Valor medio, el campo de salida tendrá un valor de 6,1. Los valores nulos en los campos de unión se ignoran para el cálculo de estadísticas. Por ejemplo, 15,5, <nulo>, y 2,5 resultará en 9,0 para Valor medio y 2 para Recuento.
Cuando la Opción de coincidencia está establecida en MÁS CERCA, es posible que dos o más entidades de unión estén a la misma distancia de la entidad de destino. Cuando ocurre esta situación, una de las entidades de unión se selecciona de forma aleatoria como la entidad coincidente (el FID de la entidad de unión no afecta esta selección aleatoria). Si desea encontrar la 2a, 3a o enésima entidad más cercana, utilice la herramienta Generar tabla de cercanía.
Si una entidad de unión tiene una relación espacial con varias entidades de destino, entonces se cuenta tantas veces como coincidencias con la entidad de destino haya. Por ejemplo, si un punto está DENTRO de tres polígonos, entonces el punto se cuenta tres veces, una vez para cada polígono.
Sintaxis
Parámetro | Explicación | Tipo de datos |
target_features |
Los atributos de las entidades de destino y los atributos de las entidades unidas se transfieren a la clase de entidad de salida. Sin embargo, se puede definir un subconjunto de atributos en el parámetro del mapa de campo. Las entidades de destino pueden ser cualquier fuente de datos espaciales compatible con ArcGIS. | Feature Layer |
join_features |
Los atributos de las entidades de unión se unen a los atributos de las entidades de destino. Consulte la explicación del parámetro Operación de unión para obtener detalles sobre cómo la agregación de atributos unidos se ve afectada por el tipo de operación de unión. | Feature Layer |
out_feature_class |
Una nueva clase de entidad que contiene los atributos de las entidades de unión y de destino. Por defecto, todos los atributos de las entidades de destino y los atributos de las entidades unidas se escriben en la salida. Sin embargo, el conjunto de atributos que se transferirá se puede controlar mediante el parámetro del mapa de campo. | Feature Class |
join_operation (Opcional) |
Determina cómo se manejarán las uniones entre las entidades de destino y las entidades de unión en la clase de entidad de salida si se encuentran varias entidades de unión que tengan la misma relación espacial con una sola entidad de destino.
| String |
join_type (Opcional) |
Determina si todas las entidades de destino se mantendrán en la clase de entidad de salida (conocida como "unión externa") o solo se mantendrán aquellas que tengan la relación espacial especificada con las entidades de unión ("unión interna").
| Boolean |
field_mapping (Opcional) |
Controla qué campos de atributos estarán en la clase de entidad de salida. La lista inicial contiene todos los campos tanto de las entidades objetivo como de las entidades de unión. Los campos se pueden agregar, eliminar, se les puede cambiar el nombre o las propiedades. Los campos seleccionados de las entidades de destino se transfieren como están, pero los campos seleccionados de las entidades de unión se pueden agregar mediante una regla de fusión. Para obtener detalles sobre la asignación de campos, consulte Utilizar el control de asignación de campos y Asignar campos de entrada a campos de salida. Se pueden especificar varios campos y una combinación estadística. | Field Mappings |
match_option (Opcional) |
Define los criterios que se utilizan para hacer que concuerden las filas. Las opciones de correspondencia son:
| String |
search_radius (Opcional) |
Las entidades de unión que se encuentren dentro de esta distancia de una entidad de destino se considerarán para la unión espacial. Un radio de búsqueda solo es válido cuando se especifica la relación espacial (Opción de correspondencia) INTERSECT, WITHIN_A_DISTANCE, HAVE_THEIR_CENTER_IN o CLOSEST. Utilizar un radio de búsqueda de 100 metros con la relación espacial INTERSECT equivale a decir: si una entidad de unión está a menos de 100 metros de una entidad objetivo, se considerará que hay una correspondencia con la entidad de unión. | Linear unit |
distance_field_name (Opcional) |
El nombre de un campo que se va a agregar a la clase de entidad de salida, que contiene la distancia entre la entidad objetivo y la entidad de unión más cercana. Esta opción solo es válida cuando la relación espacial (Opción de correspondencia) se especifica en CLOSEST. El valor de este campo es -1 si no coincide ninguna entidad dentro de un radio de búsqueda. Si no se especifica ningún nombre de campo, el campo no se agregará a la clase de entidad de salida. | String |
Ejemplo de código
La siguiente secuencia de comandos muestra cómo utilizar la función SpatialJoin en una ventana de 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)
La siguiente secuencia de comandos independiente muestra cómo utilizar la función SpatialJoin para unir los atributos de las ciudades a los estados.
# 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)