10 votos

Líneas que se cruzan frente Líneas de touch - ¿cómo distinguir?

¿Cómo puedo distinguir entre estos casos en ArcGIS 10? Estoy mirando el Recorte de la Línea de la función, pero eso no es lo que yo quiero (destructivo).

  • Caso 1: los dos extremos de una línea de tocar a otro de la línea
  • Caso 2: Ambos extremos cuelgan a través de las líneas que se cruza

El mundo real de casos de uso es distinguir entre el servicio de carreteras que conectan las dos calzadas de la autopista sin peaje, y en otros casos, de carreteras de la intersección de las autopistas.

enter image description hereenter image description here

14voto

auramo Puntos 161

Para un solo elemento a la vez, usted puede hacer esto con facilidad de forma interactiva con el modo normal de Seleccionar Por Ubicación de diálogo, utilizando la siguiente clave como guía a la relación espacial de los tipos de línea en línea de superposiciones (de Seleccionar por Ubicación: ejemplos gráficos):

image

Seleccione la línea de la línea de

SE CRUZAN A, C, D, E, F, G, H, I, J

CONTIENE G, H

COMPLETELY_CONTAINS G

CONTAINS_CLEMENTINI G, H

DENTRO DE F, H

COMPLETELY_WITHIN F

WITHIN_CLEMENTINI F, H

ARE_IDENTICAL_TO H

BOUNDARY_TOUCHES C, E

La relación correspondiente tipos, en este caso son INTERSECT y BOUNDARY_TOUCHES. Como se puede ver en el diagrama de arriba, usted puede usar BOUNDARY_TOUCHES a seleccionar las características que toque un extremo de la línea. Si exactamente dos características son seleccionados luego de tener a su Caso 1. Si una función no está tocado por cualquier otras características, pero sólo atravesada por ellos, a continuación, BOUNDARY_TOUCHES seleccionar nada. INTERSECT seleccionar todas las características que se cruzan, independientemente de que se toque en un extremo o no. Así que si usted sabe que no hay características de tocar los extremos, pero usted encontrará que hay características de la intersección, entonces usted tiene su Caso 2.

Para automatizar el proceso, puede usar la siguiente secuencia de comandos de Python (implementar como una herramienta de secuencia de comandos si se desea) para calcular el número de toques y de las intersecciones para cada característica en una capa o clase de entidad:

import arcpy

################################ Configuration #################################
numTouchesField = "NUM_TOUCHES"
numIntersectionsField = "NUM_INTERSECTIONS"
################################################################################

def countTouches(layer, feature):
    """Returns the number of times the boundary of a feature touches other
    features in the same feature layer."""
    return countSpatialRelation(layer, feature, "BOUNDARY_TOUCHES")

def countIntersections(layer, feature):
    """Returns the number of times a feature intersects other features in the
    same feature layer."""
    return countSpatialRelation(layer, feature, "INTERSECT") - 1 # Subtract 1 because the feature will always intersect its clone in the feature layer

def countSpatialRelation(layer, feature, relation):
    """Returns the number of times a feature meets the specified spatial
    relationship with other features in the same feature layer."""
    arcpy.SelectLayerByLocation_management(layer, relation, feature)
    count = int(arcpy.GetCount_management(layer).getOutput(0))
    return count

def addField(table, fieldName, fieldType):
    """Adds a fields of the given name and type to a table, unless a field with
    the same name already exists."""
    desc = arcpy.Describe(table)
    fieldInfo = desc.fieldInfo
    fieldIndex = fieldInfo.findFieldByName(fieldName)
    if fieldIndex == -1:
        # Field does not exist, add it
        arcpy.AddField_management(table, fieldName, fieldType)

def countTouchesAndIntersections(layer):
    """Adds and populates fields describing the number of times each feature
    touches and intersects other features in the feature layer."""
    addField(layer, numTouchesField, "LONG")
    addField(layer, numIntersectionsField, "LONG")
    desc = arcpy.Describe(layer)
    shapeField = desc.shapeFieldName
    rows = arcpy.UpdateCursor(layer)
    for row in rows:
        feature = row.getValue(shapeField)
        row.setValue(numTouchesField, countTouches(layer, feature))
        row.setValue(numIntersectionsField, countIntersections(layer, feature))
        rows.updateRow(row)
    del row, rows

if __name__ == "__main__":
    layer = arcpy.MakeFeatureLayer_management(arcpy.GetParameterAsText(0))
    countTouchesAndIntersections(layer)

Una vez que haya terminado, usted puede fácilmente consulta para las características que tocar exactamente dos veces y se cruzan exactamente dos veces (Caso 1), y los que tocan 0 veces y se cruzan exactamente dos veces (Caso 2).

Ejemplo de definición de las consultas:

  • Caso 1 (Toca dos veces, se cruza dos veces): "NUM_TOUCHES" = 2 AND "NUM_INTERSECTIONS" = 2
  • Caso 2 (Toca ninguno, se cruza dos veces): "NUM_TOUCHES" = 0 AND "NUM_INTERSECTIONS" = 2

Ver la siguiente captura de pantalla para ver una ilustración de las instancias de los dos casos que se encuentran: ArcMap screenshot showing various line intersection/touch relationships

Tenga en cuenta que con los datos del mundo real, normalmente segmentos de calle se dividen en las intersecciones, y cuelga sólo se producen cuando las carreteras pasar una sobre la otra, como en un intercambio o un puente. Así que normalmente tiene el mismo número de características de la intersección de como tocar.

Para el caso más general, es posible que desee buscar para cualquier cuelga mediante la comprobación de si "NUM_INTERSECTIONS" > "NUM_TOUCHES".

2voto

Erik Öjebo Puntos 6937

Línea De División En Los Vértices (Gestión De Datos)

"Se crea una clase de entidad que contiene las líneas que se generan por la división de líneas de entrada o polígono de límites en sus vértices"

Mantenga La Atribución.

enter image description here

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000003z000000

-1voto

peterorum Puntos 467

Cómo sobre la copia de la capa de entidad, el recorte de las líneas, a continuación, comparar los tapizados conjunto de características que el original para encontrar las características que han cambiado? No es bonita, casi sin duda requiere el uso de Python, pero parece que debería funcionar.

-2voto

John Kramlich Puntos 286

Usted puede también extraer fuera de los nodos de la red. En el caso 1 se llega a 2 nodos, cada uno con una valencia de 4. En el caso 2 no hay ningún nodo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X