1 votos

Uso de la selección de redes de rastreo en un script independiente en ArcGIS Pro

Estoy tratando de crear un script que me permita establecer varios puntos de partida en una red. Luego realizar un rastreo ascendente y exportar las líneas seleccionadas a una nueva clase de características. Sin embargo, no importa lo que intente, sigo copiando toda la clase de características y no puedo llegar a los archivos seleccionados desde el rastreo.

Esto tiene que ser una aplicación independiente

Esto es lo que tengo hasta ahora:

import arcpy
import os

def get_source_id(network, network_layer):
    d = arcpy.Describe(network_layer)
    fc_name = d.name

    d = arcpy.Describe(network)
    for s in d.sources:
        if s.name == fc_name:
            return s.sourceID

    arcpy.AddError(
        'Could not determine network source ID for ' + network_layer.name)
    raise arcpy.ExecuteError

def point_to_flag(shape_xy, spatial_ref, source_id, global_id):
    flag_fc = arcpy.CreateFeatureclass_management(
        out_path=r"C:\Users\jconshick.BARTON\Desktop\TemporaryProject\ArcHydroTemplate.gdb\Layers",
        out_name='flag',
        geometry_type='POINT',
        has_m='ENABLED',
        has_z='ENABLED',
        spatial_reference=spatial_ref)[0]
    flag_fc = arcpy.management.AddField(flag_fc, 'SOURCEID', 'LONG')[0]
    flag_fc = arcpy.management.AddField(flag_fc, 'FEATUREGLOBALID', 'GUID')[0]
    fields = ['SHAPE@XY', 'SOURCEID', 'FEATUREGLOBALID']
    with arcpy.da.InsertCursor(flag_fc, fields) as cursor:
        cursor.insertRow((shape_xy, source_id, global_id))
    return flag_fc

arcpy.env.overwriteOutput = True
arcpy.env.workspace = r"C:\Users\jconshick.BARTON\Desktop\TemporaryProject\ArcHydroTemplate.gdb\Layers"

network = "AHStormwater_New"
junction_layer = "PipeOutlet"
pipes = "pipe"
test = "Test6"

Trace_Results_Aggregated_Points = "Trace_Results_Aggregated_Points"
Trace_Results_Aggregated_Lines = "Trace_Results_Aggregated_Lines"
grpLyr = "Test"

spatial_ref = arcpy.Describe(junction_layer).spatialReference
source_id = get_source_id(network, junction_layer)

with arcpy.da.SearchCursor(junction_layer, ['SHAPE@XY', 'GLOBALID']) as cursor:
    for i, row in enumerate(cursor):        
        flag = point_to_flag(row[0], spatial_ref, source_id, row[1])

        arcpy.tn.Trace(in_trace_network=network,
                       trace_type='UPSTREAM',
                       starting_points=flag,
                       validate_consistency="DO_NOT_VALIDATE_CONSISTENCY",
                       result_types="NETWORK_LAYERS",
                       out_network_layer=grpLyr)[0]

        print (grpLyr)
        arcpy.CopyFeatures_management(pipes, "Test3")
        print (arcpy.GetCount_management("Test3"))

1voto

John Kramlich Puntos 286

La razón por la que su salida incluye todas las características es porque está utilizando la herramienta CopyFeatures en la "cosa" equivocada.

La regla de oro para todas las herramientas de geoprocesamiento es que respeten las selecciones en CAPAS .

¿Cuál es su aportación a CopyFeatures? Es pipes que cuando se comprueba es simplemente "pipe" y como usted tiene la intención de ejecutar este script fuera del GIS ha establecido el espacio de trabajo. Así que lo que está suministrando a CopyFeatures no es un LAYER sino un FEATURECLASS . Piensa en eso como en los datos en bruto, una featureclass no tiene el concepto de lo que es una selección o de hecho lo que es la simbología, ese es el trabajo de la CAPA, la representación visual de la FEATURECLASS.

Así que puede ejecutar su rastreo tantas veces como quiera pero si sigue apuntando CopyFeatures a la FeatureClass siempre obtendrá todo el contenido de la FeatureClass.

Así que ahora usted sabe la diferencia que necesita para ser el suministro de CopyFeatures herramienta con la CAPA que tendrá su selección creada por el Trazado.

Mirando el archivo de ayuda de Rastrear y leer la información sobre el parámetro capa_de_red_salida que en su caso se llama grpLyr . Tienes que profundizar en eso y obtener el nombre de la CAPA y alimentar eso en la herramienta CopyFeatures.

Editar

Cuando se utiliza Trace en un entorno de scripting y para asegurarse de que su capa de grupo está poblada es necesario establecer el tipo de resultado a Capas de red . Esto está documentado aquí y más adelante en la ayuda dice lo siguiente:

La opción de tipos de resultados de las capas de red le permite devolver la traza como conjuntos de selección en capas de características en una capa de grupo. Cuando esta opción se selecciona en ArcGIS Pro, se añade una nueva capa de grupo al el mapa. Las capas de características sólo se crean para las clases que contienen características devueltas por el rastreo. Cada capa de características contiene un Cada capa de características contiene un conjunto de selección de características devueltas por el rastreo que puede utilizarse para trabajar con los resultados de un rastreo en ModelBuilder y Python.

Cuando se selecciona la opción Capas de red, un Grupo de salida adicional Nombre de la capa de salida se proporciona para nombrar la capa del grupo de salida que que se crea. Cuando se trabaja en ArcGIS Pro se añade una nueva capa de grupo al el mapa activo con el nombre especificado.

Parece que entonces se puede profundizar en la capa de grupo y obtener el objeto de capa con la selección.

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