1 votos

FeatureClassToFeatureClass_conversion tarda demasiado tiempo

Escribí un script en python para obtener todas las características cercanas a un punto y sus distancias. Para ello, utilizo LocateFeaturesAlongRoutes_lr, luego realizo un join con una capa de características y finalmente utilizo un objeto field mappings para renombrar y eliminar atributos. Este último paso se realiza utilizando FeatureClassToFeatureClass_conversion que acepta asignaciones de campos como parámetro.

Mi problema es que FeatureClassToFeatureClass_conversion tarda aproximadamente 1'20'' en completarse, lo que es demasiado teniendo en cuenta que sólo quedan unos pocos rasgos después de la unión.

La cuestión se vuelve aún más extraña cuando me di cuenta de que TableToTable_conversion consume sólo unos milisegundos.

¿Puedo acelerar la conversión FeatureClassToFeatureClass_conversion? ¿O utilizar otro método para renombrar y eliminar atributos (los parámetros de información de campo de MakeFeatureLayer_management podrían simplemente eliminar campos)?

def renameAttribute(fms, old_name, new_name):
    index = fms.findFieldMapIndex(old_name)
    fieldMap = fms.getFieldMap(index)
    output_field = fieldMap.outputField
    output_field.name = new_name
    output_field.aliasName = new_name
    fieldMap.outputField = output_field
    fms.replaceFieldMap(index, fieldMap)

points_fc = arcpy.GetParameterAsText(0)
radius = arcpy.GetParameterAsText(1)
lines_grf_fl = arcpy.GetParameterAsText(2)
view_lines = arcpy.GetParameterAsText(3)

distance_table = arcpy.LocateFeaturesAlongRoutes_lr(points_fc, lines_grf_fl, 'ID_LOGRADOURO', radius, 'in_memory\\distance_table', 'ID_LOGRADOURO POINT MEASURE', route_locations='ALL').getOutput(0)
distance_table_view = arcpy.MakeTableView_management(distance_table, 'distance_table_view').getOutput(0)
arcpy.AddJoin_management(view_lines, 'ID_LOGRADOURO_24', distance_table_view, 'ID_LOGRADOURO', 'KEEP_COMMON')
distance_fl = arcpy.MakeFeatureLayer_management(view_lines, 'distance_fl') .getOutput(0)
fms = arcpy.FieldMappings()
fms.addTable(distance_fl)
fieldMapsToRemove = \
    ['CODIGO_MUNICIPIO', \
    'NOME_MUNICIPIO', \
    'ABREV_PREFIXO', \
    'DESC_PREFIXO', \
    'ABREV_TIPO', \
    'DESC_TIPO', \
    'DESC_PREPOSICAO', \
    'ABREV_TITULO', \
    'DESC_TITULO', \
    'NOME', \
    'ID_LOGRADOURO_INICIO', \
    'ID_LOGRADOURO_FIM', \
    'HISTORIA', \
    'STATUS_CANCELAMENTO', \
    'FAIXA_VISIVEL', \
    'BAIRROS', \
    'tabela_distancias_ID_LOGRADOURO', \
    'tabela_distancias_ObjectId']
for name in fieldMapsToRemove:
    index = fms.findFieldMapIndex(name)
    fms.removeFieldMap(index)

renameAttribute(fms, 'ID_LOGRADOURO_24', 'ID_LOGRADOURO_GEO')
renameAttribute(fms, 'ID_LOGRADOURO', 'ID_LOGRADOURO_ALFA')
renameAttribute(fms, 'tabela_distancias_Distance', 'DISTANCIA')
renameAttribute(fms, 'tabela_distancias_MEASURE', 'MEASURE')
renameAttribute(fms, 'CODIGO', 'CODIGO_LOGRADOURO')
renameAttribute(fms, 'NOME_COMPLETO', 'NOME_COMPLETO_LOGRADOURO')
renameAttribute(fms, 'SHAPE_LEN', 'COMPRIMENTO_LOGRADOURO')

results = arcpy.FeatureClassToFeatureClass_conversion(distance_fl, 'in_memory', 'results', field_mapping=fms).getOutput(0)
arcpy.SetParameter(4, results)

[EDIT 1]

He modificado el script para utilizar CopyFeatures_management en lugar de FeatureClassToFeatureClass_conversion pero esta tardando mucho en terminar.

3voto

Barry Brown Puntos 9774

Yo recomendaría utilizar un cursor de búsqueda para escribir sus atributos de clase de características en un diccionario utilizando la clave primaria y una lista de atributos como par de valores. A continuación, borrar todos los campos antiguos de la clase de características de salida (excepto el atributo de clave primaria), añada los campos nuevos en el orden que desee y rellene los atributos mediante una función actualizar cursor .

Este método requiere un poco más de programación, pero ofrece un gran rendimiento.

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