Resumen
Encuentra dónde coinciden espacialmente las entidades de línea de actualización con las entidades de línea de base y detecta los cambios espaciales, los cambios en atributos o ambas cosas, así como la inexistencia de cambios, y genera una clase de entidad de salida que contiene entidades de actualización coincidentes con información sobre los cambios, las entidades de actualización sin coincidencia y las entidades de base sin coincidencia.
Más información sobre el funcionamiento de las coincidencias de entidades
Ilustración
Uso
Un caso de uso típico de esta herramienta es usar un conjunto de entidades de línea, por ejemplo, carreteras, y recibir actualizaciones periódicamente de socios en forma de conjuntos nuevos de entidades de carreteras. En este caso querrá saber cuáles de las entidades actualizadas son modificaciones de las entidades de base existentes o se trata de entidades nuevas que se deben agregar, y qué entidades de base son antiguas y se deben eliminar. Esta herramienta busca las entidades coincidentes entre los datasets de línea de base y de actualización, detecta cambios espaciales, cambios en atributos o ambas cosas, así como la ausencia de cambios, y crea una clase de entidad de salida que contiene información sobre los cambios en las entidades.
La clase de entidad de salida contiene todas las entidades de actualización que participan (coincidentes o no) y todas las entidades de base sin coincidencia. La información sobre los cambios detectados se escribe en los campos siguientes:
- UPDATE_FID: Id. de entidad de la entidad de actualización. El valor es -1 para una entidad de base no coincidente.
- BASE_FID: el Id. de entidad de la entidad base. El valor es -1 para una entidad de actualización no coincidente.
- CHANGE_TYPE: el tipo de cambio detectado, como se muestra a continuación.
- S para espacial, indica una entidad de actualización coincidente con un cambio espacial.
- A para atributo, indica una entidad de actualización coincidente con un cambio en atributos.
- SA para espacial y atributo, indica una entidad de actualización coincidente con cambios espaciales y en atributos.
- S_LD para el cambio espacial, así como para direcciones de líneas opuestas.
- SA_LD para cambios espaciales y de atributo, así como para direcciones de líneas opuestas.
- NC indica que no hay cambios; una entidad de actualización coincidente sin cambios.
- N para nuevo; indica una entidad de actualización sin coincidencia nueva en los datos de base.
- D para eliminación; indica una entidad de base sin coincidencia que tal vez deba eliminarse de los datos de base.
El proceso de cotejo de entidades se hace primero según la Distancia de búsqueda y la Coincidencia de campos opcional. Es posible generar una tabla de coincidencias de salida para almacenar la información de coincidencias.
El parámetro Distancia de búsqueda se utiliza para buscar candidatos que coinciden. Utilice una distancia que sea lo suficientemente grande para captar la mayoría de cambios entre las entidades correspondientes, pero no demasiado para generar el procesamiento innecesario de un exceso de candidatos y obtener potencialmente coincidencias erróneas.
Una vez que se encuentran candidatos a coincidencias, se continúa con la evaluación mediante un conjunto de mediciones geométricas para determinar si son lo suficientemente parecidas para considerarse que coinciden espacialmente.
Si especifica una o más parejas de campos para el parámetro Campos coincidentes, los candidatos coincidentes espacialmente se comprueban frente a estos valores de campo para ayudar a determinar la coincidencia correcta. Por ejemplo, supongamos que tanto las entidades base como las de actualización tienen un campo STREET_NAME que contiene nombres de calles. Si una entidad de actualización coincide espacialmente con dos entidades base, pero solo un candidato base tiene el mismo valor STREET_NAME que la entidad de actualización, se considera la mejor concordancia. La comparación de cadenas de texto no distingue mayúsculas de minúsculas, lo que significa que Calle Mayor se considera igual que calle mayor.
La Tabla de concordancia de salida es opcional. Esta tabla de concordancia proporciona exhaustiva información de coincidencia de entidades, incluidos los FID de origen y destino, los grupos coincidentes, las relaciones coincidentes y el nivel de confianza de la correspondencia derivada de las condiciones coincidentes de espacio y atributo. Esta información puede servir para comprender las situaciones coincidentes y facilitar la inspección posterior, la postedición y los análisis adicionales. Consulte Acerca de la geocodificación de entidades y la tabla de coincidencias para obtener información detallada.
En la tabla de concordancias de salida, los valores de los campos SRC_FID y TGT_FID representan Id. de entidades de actualización e Id. de entidades base respectivamente.
El proceso de identificación de cambios se realiza después de la coincidencia de entidades. Las condiciones espaciales y de atributos, así como las direcciones de líneas de todas las entidades de actualización coincidentes, se comparan con las entidades base correspondientes para determinar sus valores de CHANGE_TYPE.
Se detecta un cambio espacial (tipo de cambio S) cuando se produce uno de los puntos siguientes o ambos:
- Las entidades de actualización coincidentes difieren de sus entidades base correspondientes en topología. Por ejemplo, una entidad de actualización coincide con dos entidades base.
- Dentro de cada grupo de coincidencia, cualquier parte de la entidad base o de actualización queda fuera de Cambiar tolerancia.
Cambiar tolerancia sirve como ancho de una zona de influencia alrededor de las entidades de actualización o base. Para cada grupo de coincidencia, se crea una zona de influencia de actualización alrededor de todas las entidades de actualización y una zona de influencia base alrededor de todas las entidades base. A continuación, se comprueban todas las entidades de actualización respecto a la zona de influencia base y todas las entidades base respecto a la zona de influencia de actualización. Si alguna parte de las entidades de actualización queda fuera de la zona de influencia base o bien si alguna parte de las entidades base queda fuera de la zona de influencia de actualización (o ambos casos), se considera un cambio espacial. Cuando se especifica un valor mayor que 0, la salida contiene dos campos adicionales:
- LEN_PCT: este campo almacena valores de porcentaje de longitud basados en grupos de coincidencia.
- LEN_ABS: este campo almacena valores de longitud absoluta en unidades de entidad basados en grupos de coincidencia.
Los valores de estos campos vienen determinados por el grupo de coincidencia al que pertenece la entidad de salida, dependiendo de las condiciones siguientes:
- Si solo las entidades de actualización quedan fuera de la zona de influencia base:
- Lu = longitud total de las partes externas de las entidades de actualización.
- Pu (el porcentaje de longitud) = Lu / la longitud total de todas las entidades de actualización * 100.
- LEN_PCT = Pu
- LEN_ABS = Lu
- Si solo las entidades base quedan fuera de la zona de influencia de actualización:
- Lb = longitud total de las partes externas de las entidades base.
- Pb (el porcentaje de longitud) = Lb / la longitud total de todas las entidades base * 100.
- LEN_PCT = Pb
- LEN_ABS = Lb
- Si se dan ambos casos:
- Se escribe el valor mayor de Lu y Lb, junto con su valor de porcentaje asociado. En el caso de que se escriba Lb, se agrega un signo negativo por el mismo motivo mencionado anteriormente.
El valor del porcentaje va desde 0 hasta 100, donde 0 indica que las entidades de actualización y base en un grupo de coincidencia se incluyen por completo en las zonas de cambio de tolerancia y 100 indica que todas las entidades de actualización o base quedan fuera de las zonas de cambio de tolerancia.
Los valores de LEN_PCT y LEN_ABS pueden ayudar a determinar si un cambio es significativo o no. Cuanto mayores son los valores, mayor es el cambio. Solo las entidades con cambios espaciales reciben estos valores; las demás obtienen -1.
Un cambio en atributos (cambio de tipo A) se detecta en función del parámetro Comparar campos. Si se especifican uno o más pares de campos en Comparar campos, las entidades coincidentes se comprueban teniendo en cuenta estos campos para determinar si hay un cambio en los atributos. La comparación de cadenas de texto no distingue mayúsculas de minúsculas, lo que significa que Calle Mayor se considera igual que calle mayor. Si se detectan cambios espaciales y en atributos en una entidad de actualización coincidente, se le asigna el tipo de cambio SA. Si no se detectan cambios espaciales ni en atributos en una entidad de actualización coincidente, se considera que no hay cambios y se le asigna el tipo de cambio NC.
El cambio en la dirección de las líneas (tipos de cambio con _LD) se considera un cambio espacial y se puede detectar como una opción.
- Las entidades de actualización coincidentes obtienen el tipo de cambio S_LD si la dirección de alguna de sus líneas es opuesta en una o más entidades base coincidentes, con o sin los cambios espaciales descritos anteriormente. Dicho de otra manera, son del tipo S o NC si no se comparan las direcciones de las líneas.
- Las entidades de actualización coincidentes obtienen el tipo de cambio SA_LD si la dirección de alguna de sus líneas es opuesta en una o más entidades base coincidentes, además del cambio de atributo o de los cambios espaciales y de atributos descritos anteriormente. Dicho de otra manera, son del tipo A o SA si no se comparan las direcciones de las líneas.
La unión de las extensiones de entrada se utiliza como extensión de procesamiento. Los recuentos de las entidades de origen y destino que participan se notifican en los mensajes de procesamiento.
La precisión de la coincidencia de entidades depende mucho de la calidad de los datos, la complejidad y la similitud de las dos entradas.
Como entrada durante el procesamiento previo, debe minimizar los errores de datos y seleccionar las entidades relevantes. En general, siempre es útil que dentro de un dataset de entrada, las entidades sean topológicamente correctas, tengan una geometría válida y sean de parte simple y no duplicadas; de lo contrario, pueden producirse errores inesperados.
Los cambios detectados se pueden revisar en la clase de entidad de salida. Puede encontrar que las diferencias espaciales entre las dos fuentes de datos son significativas y decidir que una de ellas se debe ajustar para que coincida mejor con la otra. También es posible que quiera transferir atributos entre entidades de actualización y entidades de base. Las herramientas de rubbersheeting y transferencia de atributos en el Conjunto de herramientas Combinación pueden ayudarle a realizar los cambios.
Sintaxis
arcpy.management.DetectFeatureChanges(update_features, base_features, out_feature_class, search_distance, {match_fields}, {out_match_table}, {change_tolerance}, {compare_fields}, {compare_line_direction})
Parámetro | Explicación | Tipo de datos |
update_features | Entidades de línea para comparar con las entidades de base. | Feature Layer |
base_features | Entidades de línea para comparar con las entidades de actualización para detectar cambios. | Feature Layer |
out_feature_class | Clase de entidad de línea de salida con información de cambios. La salida contiene todas las entidades de actualización que participan (coincidentes o no) y todas las entidades de base sin coincidencia. | Feature Class |
search_distance | Distancia utilizada para buscar candidatos que coinciden. Se debe especificar una distancia que debe ser mayor que cero. Puede elegir la unidad que prefiera; el valor predeterminado es la unidad de la entidad. | Linear Unit |
match_fields [[source_field, target_field],...] (Opcional) | Lista de campos de entidades de actualización y de base. Si se especifican, cada pareja de campos se comprueba para candidatos coincidentes con el fin de ayudar a determinar la concordancia adecuada. | Value Table |
out_match_table (Opcional) | Tabla de salida que contiene información completa de coincidencia de entidades. | Table |
change_tolerance (Opcional) | Distancia que se utiliza para determinar si hay un cambio espacial. Todas las entidades de actualización y las entidades base coincidentes se comprueban con relación a esta tolerancia. Si alguna parte de las entidades de actualización o base queda fuera de la zona alrededor de la entidad coincidente, se considera un cambio espacial. Una distancia puede ser igual o mayor que cero. El valor predeterminado es 0. Si se especifica un valor mayor que cero, en la salida se incluirán los campos LEN_PCT y LEN_ABS. Puede elegir la unidad que prefiera; el valor predeterminado es la unidad de la entidad. | Linear Unit |
compare_fields [[source_field, target_field],...] (Opcional) | Campos que sirven para determinar si hay un cambio en atributos entre entidades coincidentes de actualización y de base. | Value Table |
compare_line_direction (Opcional) | Especifica si desea o no comparar las direcciones de las líneas de las entidades coincidentes.
| Boolean |
Muestra de código
Ejemplo de DetectFeatureChanges 1 (ventana de Python)
El siguiente script de la ventana de Python demuestra cómo utilizar la función DetectFeatureChanges en modo inmediato.
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.DetectFeatureChanges_edit("update_Roads.shp",
"base_Roads.shp", "output_changes.shp"
"25 Feet", #, #, "7.6 Meters",
["rdClass", "roadClass"])
Ejemplo 2 de DetectFeatureChanges (script independiente)
El siguiente script independiente es un ejemplo de cómo aplicar la función DetectFeatureChanges en un entorno de scripts.
# Name: DetectFeatureChanges_example_script2.py
# Description: Perform change detection between newly received road data and
# existing road data and find the number of new roads and the
# total length of them.
# Author: Esri
# -----------------------------------------------------------------------
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflationTools\ScriptExamples\data.gdb"
# Set local variables
updateFeatures = "updateRoads"
baseFeatures = "baseRoads"
dfcOutput = "dfc_out"
search_distance = "300 Feet"
match_fields = "RD_NAME FULLNAME"
statsTable = "new_roads_stats"
# Perform spatial change detection
arcpy.DetectFeatureChanges_management(updateFeatures, baseFeatures, dfcOutput, search_distance, match_fields)
# ====================================================================================
# Note 1: The result of DetectFeatureChanges may contain errors; see tool reference.
# Inspection and editing may be necessary to ensure correct CHANGE_TYPE N, which
# represents un-matched update feautres, before further calculations.
#
# One of the quick ways of checking whether the CHANGE_TYPE N features have
# matching base features is to find their mid-points and use them to search for
# features in base data, as processed below.
# ====================================================================================
# ======== Check update roads with CHANGE_TYPE N for potential match
# Make Feature Layer with selection of CHANGE_TYPE = 'N' (un-matched update features)
arcpy.MakeFeatureLayer_management(dfcOutput, "sel_N_layer", "CHANGE_TYPE = 'N'")
# Get mid-points of the selected features; the mid-points carry all the attributes.
arcpy.FeatureVerticesToPoints_management("sel_N_layer", "in_memory\midPts", "MID")
# Find nearest base features from the mid-points
arcpy.Near_analysis("in_memory\midPts", baseFeatures, "300 Feet")
# ====================================================================================
# Note 2: At this point you can manually inspect the midPts by the NEAR_DIST values;
# the lower the values, the higher chance (not always) a match was missed in the
# dfc process. Delete features from midPts that have found matching base features
# before further process.
# ====================================================================================
# Transfer CHANGE_TYPE values from features of midPts to update features
arcpy.JoinField_management(updateFeatures, "OBJECTID", "in_memory\midPts", "UPDATE_FID", "CHANGE_TYPE")
# Get the count of new roads and the total length; the remaining roads have
# Null values for CHANGE_TYPE.
arcpy.Frequency_analysis(updateFeatures, statsTable, "CHANGE_TYPE", "Shape_Length")
Entornos
Información de licenciamiento
- Basic: No
- Standard: No
- Advanced: Sí