Na 160319: Chyba při ukončování editační relace se uložením úprav—ArcGIS Pro | Dokumentace se žádá o pomoc každého, kdo narazí na tuto chybu.
Při zkoumání LRS Line Networks jsem narazil na postup, který vždy při druhém spuštění v rámci jedné relace ArcGIS Pro 3.0.0 vede k této chybě.
Kód je uveden níže a spouštím ho jako Python Script nástroj bez parametrů.
Pokud je nástroj spuštěn jednou, funguje. Pokud je spuštěn podruhé, zobrazí se:
arcgisscripting.ExecuteError: CHYBA 160319: Chyba při ukončování editační relace se uložením úprav
Chyba při ukončování editační relace se uložením úprav [TestLRSNetwork]
Nepodařilo se provést (AppendRoutes).
# Tento skript má za cíl vytvořit prázdný LRS dataset a načíst
# geometrie testovací polyline feature class s ID tras (TEXT),
# názvy tras (TEXT) a měření od/do (DOUBLE) do něj, aby bylo možné
# vytvořit LRS Line Network s těmito trasami
import arcpy,uuid
def print_message(msg):
print(msg)
arcpy.AddMessage(msg)
arcpy.env.overwriteOutput = True
# Nastavení souřadnicového systému a geodatabáze pro použití
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)
# Vytvoření prázdné geodatabáze pro testování
arcpy.management.CreateFileGDB(workingFolder,gdbName)
# Vytvoření prázdného TestLRS datasetu s výchozími názvy tří feature class
# (Calibration_Point, Centerline, Redline) a LRS hierarchie (TestLRS)
# uvnitř něj a tří tabulek (Centerline_Sequence, Lrs_Edit_Log, Lrs_Locks)
print_message("Vytvářím LRS dataset s názvem {0} v {1}".format(lrsName,gdb))
arcpy.locref.CreateLRS(gdb,lrsName,"Centerline","Calibration_Point",
"Redline","Centerline_Sequence",srWGS84)
# Příprava feature class, ze které budou později připojeny trasy do LRS Networku
# Vytvoření prázdné feature class a jejího schématu
print_message('Vytvářím polyline feature class připravenou na trasy ({0}) v LRS datasetu ({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")
# Zápis tří polyliní a jejich atributů tras do feature class
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('Zapis statistik z polyline feature class ({0}) do tabulky ({1})'.format(testFC,testStatsTable))
arcpy.analysis.Statistics(testFC,testStatsTable,"FromMeasure MIN;ToMeasure MAX","RouteID")
# Rozpouštění testFC tak, aby byla jedna polyline na trasu
print_message("Rozpouštím {0} primárně podle RouteID pro vytvoření {1}".format(testFC,testDissolvedFC))
arcpy.management.Dissolve(testFC,testDissolvedFC,
"RouteID;RouteName;FromDate;ToDate",
None, "SINGLE_PART", "UNSPLIT_LINES")
# Přidání a vyplnění polí pro podporu Lines v LRS Networku
print_message("Přidávám a vyplňuji pole pro podporu Lines na 'route-ready' polylinách v {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")
# Pouze jedna Line v tomto testu
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,"Line 1",lineOrder])
lineOrder+=100
arcpy.management.JoinField(testDissolvedFC,"RouteID",testStatsTable,"RouteID","MIN_FromMeasure;MAX_ToMeasure")
# Vytvoření prázdné TestLRSNetwork v TestLRS datasetu
print_message("Vytvářím LRS Network ({0}) v LRS datasetu ({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")
# Připojení tras z testFC do TestLRSNetwork což by mělo zároveň připojit do Centerline feature class
print_message("Připojuji trasy z {1} do LRS Network ({1}) v LRS datasetu ({2})".format(testFC,"TestLRSNetwork","TestLRS"))
arcpy.locref.AppendRoutes(testDissolvedFC,lrsNetworkFC, "RouteID", "RouteName", "FromDate", "ToDate",
"Line_GUID","LineName","LineOrder", None, "ADD")
# Generování kalibračních bodů a kalibrace tras pomocí nich
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")
Pokud zavřu ArcGIS Pro a nástroj spustím znovu, funguje to, ale pokud ho spustím podruhé za sebou, chyba se opět objeví.