Em 160319: Erro ao encerrar uma sessão de edição com salvar edições—ArcGIS Pro | Documentação solicita-se ajuda de quem encontrar esse erro.
Ao investigar Redes Lineares LRS, encontrei um procedimento que gera esse erro toda vez que é executado pela segunda vez dentro de uma sessão do ArcGIS Pro 3.0.0.
O código está abaixo e a forma como estou executando é como uma ferramenta Python Script sem parâmetros.
Se a ferramenta for executada uma vez, funciona. Se for executada novamente, apresenta:
arcgisscripting.ExecuteError: ERRO 160319: Erro ao encerrar uma sessão de edição com salvar edições
Erro ao encerrar uma sessão de edição com salvar edições [TestLRSNetwork]
Falha ao executar (AppendRoutes).
# Este script tem o objetivo de criar um dataset LRS vazio e carregar
# as geometrias de uma classe de feição polilinha de teste com IDs de rota (TEXT),
# Nomes das Rotas (TEXT) e medidas inicial/final (DOUBLE) para que um
# Rede Linear LRS com essas rotas possa ser criada
import arcpy,uuid
def print_message(msg):
print(msg)
arcpy.AddMessage(msg)
arcpy.env.overwriteOutput = True
# Definir sistema de coordenadas e geodatabase a ser usado
srWGS84 = arcpy.SpatialReference("GCS_WGS_1984")
workingFolder = r"C:\temp"
gdbName = "test"
gdb = r"{0}\{1}.gdb".format(workingFolder,gdbName)
lrsName = "TestLRS"
lrsFD = r"{0}\{1}".format(gdb,lrsName)
testFCName = "testFC"
testFC = r"{0}\{1}".format(lrsFD,testFCName)
testStatsTableName = "testStats"
testStatsTable = r"{0}\{1}".format(gdb,testStatsTableName)
testDissolvedFC = r"{0}{1}".format(testFC,"_Dissolve")
calibrationFC = r"{0}\{1}".format(lrsFD,"Calibration_Point")
centerlineFC = r"{0}\{1}".format(lrsFD,"Centerline")
lrsNetworkName = "testLRSNetwork"
lrsNetworkFC = r"{0}\{1}".format(lrsFD,lrsNetworkName)
redlineFC = r"{0}\{1}".format(lrsFD,"Redline")
centerlineSequenceTable = r"{0}\{1}".format(gdb,"Centerline_Sequence")
newCalibrationPointsFCName = "NewCalibrationPoints"
newCalibrationPointsFC = r"{0}\{1}".format(lrsFD,newCalibrationPointsFCName)
newCalibrationPointsFCTempName = newCalibrationPointsFCName+"Temp"
newCalibrationPointsFCtemp = r"{0}\{1}".format(lrsFD,newCalibrationPointsFCTempName)
uniqueCalibrationPointsFCName = "UniqueCalibrationPoints"
uniqueCalibrationPointsFC = r"{0}\{1}".format(lrsFD,uniqueCalibrationPointsFCName)
# Criar geodatabase vazia para testes
arcpy.management.CreateFileGDB(workingFolder,gdbName)
# Criar dataset TestLRS vazio com nomes padrão para três classes de feição
# (Calibration_Point,Centerline,Redline) e uma Hierarquia LRS (TestLRS)
# dentro dele, e três tabelas (Centerline_Sequence, Lrs_Edit_Log,Lrs_Locks)
print_message("Criando dataset LRS chamado {0} em {1}".format(lrsName,gdb))
arcpy.locref.CreateLRS(gdb,lrsName,"Centerline","Calibration_Point",
"Redline","Centerline_Sequence",srWGS84)
# Preparar classe de feição da qual as rotas serão adicionadas à Rede LRS depois
# Criar classe de feição vazia e seu esquema
print_message('Criando classe de feição polilinha "pronta para rota" ({0}) no dataset LRS ({1})'.format(testFC,lrsFD))
arcpy.management.CreateFeatureclass(lrsFD,"testFC","POLYLINE")
arcpy.management.AddField(testFC,"RouteID","TEXT", None, None, 10)
arcpy.management.AddField(testFC,"RouteName","TEXT", None, None, 10)
arcpy.management.AddField(testFC,"FromMeasure","DOUBLE")
arcpy.management.AddField(testFC,"ToMeasure","DOUBLE")
arcpy.management.AddField(testFC,"FromDate","DATE")
arcpy.management.AddField(testFC,"ToDate","DATE")
# Escrever três polilinhas e seus atributos de rota na classe de feição
cursor = arcpy.da.InsertCursor(testFC,["SHAPE@","RouteID","RouteName","FromMeasure","ToMeasure"])
array = arcpy.Array([arcpy.Point(0.0,0.0),
arcpy.Point(0.0,1.0)])
polyline = arcpy.Polyline(array,srWGS84)
cursor.insertRow([polyline,"Route1","Route 1",0.0,750.0])
array = arcpy.Array([arcpy.Point(0.0,1.0),
arcpy.Point(1.0,1.0)])
polyline = arcpy.Polyline(array,srWGS84)
cursor.insertRow([polyline,"Route1","Route 1",750.0,2000.0])
array = arcpy.Array([arcpy.Point(1.0,1.0),
arcpy.Point(1.0,0.0)])
polyline = arcpy.Polyline(array,srWGS84)
cursor.insertRow([polyline,"Route2","Route 2",0.0,999.0])
del cursor
arcpy.management.CalculateField(testFC, "FromDate", "datetime.datetime.now()", "PYTHON3", '', "TEXT", "NO_ENFORCE_DOMAINS")
print_message('Escrevendo estatísticas da classe de feição polilinha ({0}) na tabela ({1})'.format(testFC,testStatsTable))
arcpy.analysis.Statistics(testFC,testStatsTable,"FromMeasure MIN;ToMeasure MAX","RouteID")
# Dissolver testFC para que haja apenas uma polilinha por rota
print_message("Dissolvendo {0} principalmente por RouteID para criar {1}".format(testFC,testDissolvedFC))
arcpy.management.Dissolve(testFC,testDissolvedFC,
"RouteID;RouteName;FromDate;ToDate",
None, "SINGLE_PART", "UNSPLIT_LINES")
# Adicionar e preencher campos para suportar Linhas na Rede LRS
print_message("Adicionando e preenchendo campos para suportar Linhas nas polilinhas 'prontas para rota' em {1}".format(testFC,testDissolvedFC))
arcpy.management.AddField(testDissolvedFC,"Line_GUID","Text",None,None,255)
arcpy.management.AddField(testDissolvedFC,"LineName","Text",None,None,10)
arcpy.management.AddField(testDissolvedFC,"LineOrder","LONG")
# Apenas uma Linha neste teste
lineGUID = "{0}".format('{'+str(uuid.uuid4())+'}')
lineOrder = 100
with arcpy.da.UpdateCursor(testDissolvedFC,["Line_GUID","LineName","LineOrder"]) as cursor:
for row in cursor:
cursor.updateRow([lineGUID,"Linha 1",lineOrder])
lineOrder+=100
arcpy.management.JoinField(testDissolvedFC,"RouteID",testStatsTable,"RouteID","MIN_FromMeasure;MAX_ToMeasure")
# Criar Rede TestLRSNetwork no dataset TestLRS
print_message("Criando Rede LRS ({0}) no dataset LRS ({1})".format("TestLRSNetwork","TestLRS"))
arcpy.locref.CreateLRSNetwork(gdb, "TestLRS", "TestLRSNetwork",
"RouteID", "RouteName", "FromDate", "ToDate", "DO_NOT_DERIVE", '',
"INCLUDE", "LineId", "LineName", "LineOrder", "METERS")
# "DO_NOT_INCLUDE", "LineId", "LineName", "LineOrder", "METERS")
lrsNetworkFC = r"{0}\{1}".format(lrsFD,"TestLRSNetwork")
# Adicionar rotas do testFC na TestLRSNetwork que deve adicioná-las na classe Centerline ao mesmo tempo
print_message("Adicionando Rotas de {1} na Rede LRS ({1}) no dataset LRS ({2})".format(testFC,"TestLRSNetwork","TestLRS"))
arcpy.locref.AppendRoutes(testDissolvedFC,lrsNetworkFC, "RouteID", "RouteName", "FromDate", "ToDate",
"Line_GUID","LineName","LineOrder", None, "ADD")
# Gerar pontos de calibração e calibrar rotas usando-os
arcpy.locref.GenerateCalibrationPoints(testDissolvedFC,"RouteID","FromDate","ToDate",calibrationFC,
lrsNetworkName, "DIGITIZED_DIRECTION","ATTRIBUTE_FIELDS","MIN_FromMeasure","MAX_ToMeasure")
# lrsNetworkName, "MEASURE_DIRECTION", "GEOMETRY_LENGTH")
arcpy.locref.GenerateRoutes(lrsNetworkFC, "NO_RECORD_CALIBRATION_CHANGES")
Se eu fechar o ArcGIS Pro e executar a ferramenta novamente, ela funcionará, mas se eu tentar executá-la pela segunda vez dará o erro novamente.