Resumen
Divide entidades de entrada en función de sus relaciones de concordancia, para obtener una mejor correspondencia de segmentación de línea.
Al trabajar con entidades de línea en dos datasets diferentes (por ejemplo, carreteras municipales y carreteras estatales), tener entidades con relaciones de concordancia de 1:1 y no de muchos a muchos (m:n) ayudará en las tareas de alineación completa, como la transferencia de atributos de un origen a otro. Esta herramienta está pensada para ayudar a convertir las coincidencias m:n en más coincidencias 1:1.
Las entidades de entrada y las entidades coincidentes se deben concordar previamente con una de las herramientas de alineación completa basadas en la coincidencia de entidades, como Detectar cambios de entidades, con una tabla de concordancias producida. Las relaciones de concordancia registradas en la tabla de concordancias son entre las entidades de origen y de destino.
En cada grupo de coincidencia, la herramienta divide las entidades de entrada en función de las condiciones de nodo de las entidades coincidentes. Un nodo puede ser un extremo de línea de nodo colgado (dangle), un pseudonodo entre dos líneas o un cruce de varias líneas. Por ejemplo, un grupo coincidente 1:2 significa que una entidad de origen se concordó con dos entidades de destino, y las dos entidades de destino están unidas en un pseudonodo. La herramienta dividirá la línea de entrada en una ubicación cercana al pseudonodo de destino. La finalidad es mejorar las correspondencias entre las líneas de origen y destino para que la siguiente tanda de coincidencia de entidades produzca más coincidencias 1:1 para las necesidades de alineación completa.
Ilustración
Uso
La clase de entidad de salida contiene todas las entidades de entrada que se han dividido o que no se han modificado, así como todos sus atributos. Se agregan los siguientes campos:
- ORIG_FID: los Id. de entidad de la entrada.
- SBM_LnFlag: almacena los siguientes valores:
- Dividido: líneas que se han dividido.
- No dividido: líneas de entrada que no se han modificado.
- Grupo de coincidencia corto: líneas que no pueden participar en el proceso porque no cumplen la condición del parámetro Longitud mínima de grupo de coincidencia.
Se puede generar una clase de entidad de punto opcional para almacenar ubicaciones en las que las líneas se han dividido o no se han podido dividir. Estos puntos se pueden utilizar para inspeccionar el resultado en caso necesario. Esta salida incluye los siguientes campos:
- ORIG_FID: los Id. de entidad de la entrada en las ubicaciones de división.
- SBM_PtFlag: almacena los siguientes valores:
- At vertex: ubicaciones en las que una línea de entrada se ha dividido en un vértice existente.
- At nearest: ubicaciones en las que una línea de entrada se ha dividido en la ubicación más cercana al nodo en las entidades coincidentes.
- Short segment: ubicaciones en las que una línea de entrada no se puede dividir de acuerdo con la Longitud mínima de división especificada.
- Out of range: ubicaciones en las que una línea de entrada no se puede dividir porque la ubicación de división candidata está más allá de la distancia de búsqueda. Algunas de estas ubicaciones aún se pueden utilizar para dividir las líneas como un proceso posterior.
Tras la inspección, podría ser posible dividir líneas adicionales por cualquiera de los puntos marcados como Segmento corto o Fuera de rango con la herramientaDividir línea en punto.
El parámetro Distancia de búsqueda se utiliza para buscar ubicaciones candidatas para dividir una línea de entrada de un nodo en las entidades coincidentes. Para asegurar una mayor posibilidad de encontrar una ubicación de división más cercana a un nodo en las entidades coincidentes, se deriva un valor de distancia interno en función de la cercanía de un nodo a una entidad de entrada. Si la distancia derivada es inferior a un tercio de la distancia de búsqueda, la distancia derivada se establece en un tercio de la distancia de búsqueda. Si la distancia derivada es mayor que la distancia de búsqueda, el valor de distancia derivada se establece en la distancia de búsqueda. Cualquier valor de distancia derivada intermedio se utiliza tal cual. Por tanto, la distancia de búsqueda especificada es el valor máximo que se usará. Por ejemplo, si especifica 90 metros como distancia de búsqueda, los valores de distancia derivada utilizados en el proceso serían 30 metros, 90 metros y cualquier valor intermedio.
Es importante definir una distancia de búsqueda adecuada. El valor que utilizó en la concordancia previa puede ser una buena opción. Cuanto mayor es la distancia de búsqueda, más probable es que se utilice un vértice más alejado para dividir una línea de entrada y que se encuentre un nodo de entrada más alejado, lo que impedirá que se produzca una división.
La distancia de búsqueda derivada internamente se utiliza para buscar ubicaciones candidatas en la entidad de entrada de un nodo en las entidades coincidentes. Se utilizan las siguientes reglas para determinar si la línea de entrada debería dividirse y, en caso afirmativo, dónde debería dividirse.
- Si un pseudonodo de coincidencia encuentra un pseudonodo de entrada, no se producirá ninguna división.
- Si un nodo de coincidencia no pseudo encuentra cualquier nodo de entrada, no se producirá ninguna división. Por ejemplo, si un nodo de coincidencia de nodo colgado (dangle) encuentra un nodo de entrada en un cruce en T, la línea de entrada no se dividirá.
- De lo contrario, la entidad de entrada se dividirá en el único vértice encontrado, o el vértice más cercano encontrado, o bien, si no se encuentra ningún vértice, la ubicación más cercana en la línea de entrada. Sin embargo, si un pseudonodo de coincidencia encuentra un nodo de entrada no pseudo, la línea de entrada siempre se dividirá.
Las líneas colgantes se pueden dividir mediante el parámetro Dividir entidades de nodo colgado (dangle). Si una línea de nodo colgado (dangle) de entrada se extiende más allá de la entidad coincidente en el extremo del nodo colgado (dangle), se dividirá de forma predeterminada. Una línea colgante se puede dividir para identificar la diferencia real entre las entidades de origen y destino en la siguiente coincidencia de entidades.
El parámetro Longitud mínima de grupo de coincidencia se puede utilizar para excluir cualquier grupo de coincidencia que sea demasiado corto para ser dividido en relación con el valor especificado. En un grupo de coincidencia determinado, si la longitud total de las entidades de entrada y la longitud total de las entidades coincidentes son menores que el valor especificado, el grupo se excluirá. La división de entidades se debe evitar en grupos de coincidencia cortos para evitar una división excesiva o no satisfactoria. Todas las líneas de entrada implicadas en grupos de coincidencia cortos se escribirán en la salida y se marcarán como Grupo de coincidencia corto en el campo SBM_LnFlag.
El parámetro Longitud mínima de división se puede utilizar para evitar que se produzcan líneas cortas. Si la división de una línea de entrada diera lugar a una línea más corta que este valor, la línea de entrada no se dividirá. Un punto en la ubicación de división marcado mediante Segmento corto en el campo SBM_PtFlag se escribirá en la clase de entidad de punto, si se especifica, como referencia para la inspección.
El parámetro Campos de división se puede utilizar para especificar uno o varios campos numéricos, por ejemplo, una longitud de medición de campo, para que sus valores se dividan en función de las proporciones de las líneas de división.
Sintaxis
SplitLineByMatch(in_features, matched_features, in_match_table, out_feature_class, search_distance, {in_features_as}, {out_point_feature_class}, {split_dangle}, {min_match_group_length}, {min_split_length}, {split_fields})
Parámetro | Explicación | Tipo de datos |
in_features | Entidades de línea de entrada que se dividirán. Se deben concordar previamente con las entidades coincidentes. | Feature Layer |
matched_features | Las entidades coincidentes se utilizan como referencia al dividir las entidades de entrada. Se deben concordar previamente con las entidades de entrada. | Feature Layer |
in_match_table | Una tabla que incluye información de coincidencia entre las entidades de entrada y coincidentes. | Table View |
out_feature_class | La clase de entidad de salida que contiene líneas de división y líneas originales que no se dividen. | Feature Class |
search_distance | El valor de distancia utilizado para determinar ubicaciones de división. El valor debe ser mayor que 0. Si no se especifican unidades, se utilizarán las unidades de la entrada. | Linear Unit |
in_features_as (Opcional) | Especifica si las entidades de entrada de la tabla de concordancias son entidades de origen o entidades de destino, para que se dividan las entidades correctas.
| String |
out_point_feature_class (Opcional) | La clase de entidad de punto de salida que contiene puntos que representan ubicaciones de división. | Feature Class |
split_dangle (Opcional) | Especifica si las líneas colgantes se dividirán.
| Boolean |
min_match_group_length (Opcional) | Un grupo de coincidencia determinado solo participará en el proceso de división si la longitud total de las entidades de entrada o la longitud total de las entidades coincidentes son mayores que el valor especificado. | Linear Unit |
min_split_length (Opcional) | Si una división da lugar a que una o ambas partes de la división sean más cortas que el valor especificado, la división no se producirá. | Linear Unit |
split_fields [split_field,...] (Opcional) | Una lista de campos numéricos de las entidades de entrada. Sus valores de campo se basarán en las proporciones de las líneas de división. | Field |
Muestra de código
Ejemplo 1 de SplitLineByMatch (ventana de Python)
El siguiente script de la ventana de Python demuestra cómo utilizar la función SplitLineByMatch en el modo inmediato.
import arcpy
arcpy.env.workspace = "C:/data/roads.gdb"
arcpy.SplitLineByMatch_edit("city_Roads", "county_Roads", "match_table",
"city_roads_split", "50 Meters")
Ejemplo 2 de SplitLineByMatch (script independiente)
El siguiente script independiente es un ejemplo de cómo aplicar la función SplitLineByMatch en un entorno de scripts.
# Name: SplitLineByMatch_example_script2.py
# Description: Use DetectFeatureChanges to get initial matching and then use
# SplitLineByMatch to split the source and target to improve spatial
# correspondence.
# Finally use TransferAttributes to transfer a field value from the
# split source to the split target features.
# Author: Esri
# -----------------------------------------------------------------------
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflation\Tools\splitlinebym\roads.gdb" #r"D:\conflation\roads.gdb"
try:
# Set local variables
sourceFeatures = "sourceRoads"
targetFeatures = "targetRoads"
dfcOutput = "DFC"
searchDistance = "100 Feet"
dfcMatchTable = "DFC_mtable"
slbmSourceOutput = "out_source"
slbmSourceOutputPts = "out_sourcePoints"
slbmTargetOutput = "out_target"
slbmTargetOutputPts = "out_targetPoints"
dangle = "SPLIT_DANGLE"
minSplitLength = "300 Feet"
transfer_fields = "Mile_Length"
# User Detect Feature Changes tool to generate the needed match table
arcpy.DetectFeatureChanges_management(sourceFeatures, targetFeatures, dfcOutput, searchDistance, dfcMatchTable)
# Use Split Line By Match tool twice to split source and then target features to improve spatial correspondence
arcpy.SplitLineByMatch_edit(sourceFeatures, targetFeatures, dfcMatchTable, slbmSourceOutput, searchDistance,
"AS_SOURCE", slbmSourceOutputPts, dangle, "", minSplitLength)
arcpy.SplitLineByMatch_edit(targetFeatures, sourceFeatures, dfcMatchTable, slbmTargetOutput, searchDistance,
"AS_TARGET", slbmTargetOutputPts, dangle, "", minSplitLength)
# Perform attribute transfer using the split results
arcpy.TransferAttributes_edit(slbmSourceOutput, slbmTargetOutput, transfer_fields, searchDistance)
# print messages
print(arcpy.GetMessages())
except arcpy.ExecuteError as aex:
print(arcpy.GetMessages(2))
except Exception as ex:
print(ex.args[0])
Entornos
Información sobre licencias
- Basic: No
- Standard: No
- Advanced: Sí