Detectar cambios de entidades (Gestión de datos)

Nivel de licencia:BasicStandardAdvanced

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

Detectar cambios de entidades

Uso

Sintaxis

DetectFeatureChanges_management (update_features, base_features, out_feature_class, search_distance, {match_fields}, {out_match_table}, {change_tolerance}, {compare_fields})
ParámetroExplicaciónTipo 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 comprueban 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 coincidentes se comprueban teniendo en cuenta esta tolerancia. Si cualquier parte de una entidad de actualización queda fuera de la zona, 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, la salida incluirá 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

Ejemplo de código

Ejemplo de DetectFeatureChanges 1 (ventana de Python)

La siguiente secuencia de comandos de la ventana de Python muestra cómo utilizar la función DetectFeatureChanges en el 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 Meterd",
                                ["rdClass", "roadClass"])
Ejemplo 2 de DetectFeatureChanges (secuencia de comandos de Python independiente)

La siguiente secuencia de comandos independiente es un ejemplo de cómo aplicar la función DetectFeatureChanges en un entorno de secuencias de comandos.

# 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

Temas relacionados

Información sobre licencias

ArcGIS for Desktop Basic: No
ArcGIS for Desktop Standard: No
ArcGIS for Desktop Advanced: Sí
5/12/2014