Bei 160319: Fehler beim Beenden einer Bearbeitungssitzung mit gespeicherten Änderungen—ArcGIS Pro | Dokumentation wird um Hilfe von allen gebeten, die auf diesen Fehler stoßen.
Bei der Untersuchung von LRS Line Networks bin ich auf ein Verfahren gestoßen, das diesen Fehler jedes Mal auslöst, wenn es innerhalb einer ArcGIS Pro 3.0.0 Sitzung zum zweiten Mal ausgeführt wird.
Der Code ist wie unten gezeigt, und ich führe ihn als Python-Skriptwerkzeug ohne Parameter aus.
Wenn das Werkzeug einmal ausgeführt wird, funktioniert es. Wenn es dann erneut ausgeführt wird, erscheint:
arcgisscripting.ExecuteError: FEHLER 160319: Fehler beim Beenden einer Bearbeitungssitzung mit gespeicherten Änderungen
Fehler beim Beenden einer Bearbeitungssitzung mit gespeicherten Änderungen [TestLRSNetwork]
Ausführung von (AppendRoutes) fehlgeschlagen.
# Dieses Skript soll ein leeres LRS-Dataset erstellen und
# die Geometrien einer Test-Polyline-Feature-Class mit Routen-IDs (TEXT),
# Routennamen (TEXT) und From/To-Maßen (DOUBLE) darin laden,
# sodass ein LRS Line Network mit diesen Routen erstellt werden kann
import arcpy,uuid
def print_message(msg):
print(msg)
arcpy.AddMessage(msg)
arcpy.env.overwriteOutput = True
# Koordinatensystem und Geodatabase festlegen
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)
# Leere Geodatabase für Tests erstellen
arcpy.management.CreateFileGDB(workingFolder,gdbName)
# Leeres TestLRS-Dataset mit Standardnamen für drei Feature-Classes
# (Calibration_Point, Centerline, Redline) und einer LRS-Hierarchie (TestLRS)
# darin sowie drei Tabellen (Centerline_Sequence, Lrs_Edit_Log, Lrs_Locks) erstellen
print_message("Erstelle LRS-Dataset namens {0} in {1}".format(lrsName,gdb))
arcpy.locref.CreateLRS(gdb,lrsName,"Centerline","Calibration_Point",
"Redline","Centerline_Sequence",srWGS84)
# Feature-Class vorbereiten, aus der später Routen in das LRS Network eingefügt werden
# Leere Feature-Class und Schema erstellen
print_message('Erstelle "routenbereite" Polyline-Feature-Class ({0}) im LRS-Dataset ({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")
# Drei Polylinien und deren Routenattribute in die Feature-Class schreiben
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('Schreibe Statistiken aus Polyline-Feature-Class ({0}) in Tabelle ({1})'.format(testFC,testStatsTable))
arcpy.analysis.Statistics(testFC,testStatsTable,"FromMeasure MIN;ToMeasure MAX","RouteID")
# testFC auflösen, sodass pro Route nur eine Polyline existiert
print_message("Löse {0} hauptsächlich nach RouteID auf zur Erstellung von {1}".format(testFC,testDissolvedFC))
arcpy.management.Dissolve(testFC,testDissolvedFC,
"RouteID;RouteName;FromDate;ToDate",
None, "SINGLE_PART", "UNSPLIT_LINES")
# Felder hinzufügen und füllen zur Unterstützung von Linien im LRS Network
print_message("Füge Felder hinzu und fülle sie zur Unterstützung von Linien auf 'routenbereiten' Polylinien in {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")
# Nur eine Linie in diesem Test
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,"Linie 1",lineOrder])
lineOrder+=100
arcpy.management.JoinField(testDissolvedFC,"RouteID",testStatsTable,"RouteID","MIN_FromMeasure;MAX_ToMeasure")
# Leeres TestLRSNetwork im TestLRS-Dataset erstellen
print_message("Erstelle LRS Network ({0}) im LRS-Dataset ({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")
# Routen aus testDissolvedFC in TestLRSNetwork einfügen, was sie gleichzeitig in die Centerline-Feature-Class einfügt
print_message("Füge Routen von {1} in LRS Network ({1}) im LRS-Dataset ({2}) ein".format(testFC,"TestLRSNetwork","TestLRS"))
arcpy.locref.AppendRoutes(testDissolvedFC,lrsNetworkFC, "RouteID", "RouteName", "FromDate", "ToDate",
"Line_GUID","LineName","LineOrder", None, "ADD")
# Kalibrierungspunkte generieren und Routen damit kalibrieren
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")
Wenn ich ArcGIS Pro schließe und das Werkzeug erneut ausführe, funktioniert es; versuche ich es jedoch ein zweites Mal auszuführen, tritt der Fehler erneut auf.