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.