Ломаные пути в Arc 10.2 невозможно сохранить
Я пытаюсь "заменить DataSource" на наш новый путь sde. Я использую v2.7 в Arc10.2. У нас есть несколько путей прямого подключения и одно подключение службы, которое изменило серверы с использования Oracle на Sql Server. Мой код работает все время через операторы печати, но затем я получаю сообщение об ошибке "Не удалось сохранить копию, проверьте мои привилегии". Пожалуйста, дайте мне знать, если я на правильном пути, поместив все различные имена соединений в список, а затем перебирая их так, как я написал. Кроме того, я попытался сделать каждый отступ для mxd.saveACopy и del mxd, но после двух недель ничего не помогло, поэтому я подумал, что наконец-то попрослю немного мудрости для гео-гиков!
Code:
import arcpy, os, glob arcpy.env.workspace = "C: \ Users \ kmetivier \ Documents \ BrokenPaths \ Folder5"
для корневых, вложенных папок, файлов в>os.walk(r"C:\Users\kmetivier\Documents\BrokenPaths\Folder5"):
for filename in files: fullpath = os.path.join(root, filename) basename, extension = os.path.splitext(fullpath) if extension.lower() == ".mxd": print "------------------------------" print filename #open the map document mxd = arcpy.mapping.MapDocument(fullpath) #get all the layers for lyr in arcpy.mapping.ListLayers(mxd): #get the source from the layer if lyr.supports("datasource"): pathList = ["Database Connections\PWDB.arvada.org.sde","Database >Connections\GIS - PWDB.sde","Database Connections\PROD - GIS.sde","Database Connections\DC >- PROD - GIS.sde","Database Connections\GIS to SDE1.sde"] print "%s -> %s" % (lyr, pathList[0]) basename, extension = os.path.splitext (pathList[0]) if extension.lower() == ".sde": #NEW SOURCE datapath = r"Database Connections\GEODATA - GIS.sde" #overwrite the old path lyr.replaceDataSource(datapath, "SDE_WORKSPACE", "") print "replaced " + pathList[0] + " with " + datapath print "---------finished " + filename mxd.saveACopy(filename +"_2") del mxd
for lyr in arcpy.mapping.ListLayers(mxd): if lyr.supports("SERVICEPROPERTIES"): pathList1= r"(PWDB.arvada.org, 5151, {sde1}, {Database_authentication}, >{GDS}, {""}, {save_username_password}, {version}, {save_version_info}" servProp = lyr.serviceProperties print "Layer name:" + lyr.name print "-----------------------------------------------------" if lyr.serviceProperties["ServiceType"] != "SDE": print "Service Type: " + servProp.get('ServiceType', 'N/A') print " URL: " + servProp.get('URL', 'N/A') print " Connection: " + servProp.get('Connection', 'N/A') print " Server: " + servProp.get('Server', 'N/A') print " Cache: " + str(servProp.get('Cache', 'N/A')) print " User Name: " + servProp.get('UserName', 'N/A') print " Password: " + servProp.get('Password', 'N/A') print "" if extension.lower() == ".sde": #This is the NEW SOURCE that you want to point to datapath1 = r"Database Connections\GEODATA - GIS.sde" #replace the old path wih the new lyr.replaceDataSource(pathList1, "SDE_WORKSPACE", "") print "replaced " + pathList1 + " with " + datapath1 print "finished " + filename mxd.saveACopy(filename +"_2") else: print "Service Type: " + servProp.get('ServiceType', 'N/A') print " Database: " + servProp.get('Database', 'N/A') print " Server: " + servProp.get('Server', 'N/A') print " Service: " + servProp.get('Instance', 'N/A') print " Version: " + servProp.get('Version', 'N/A') print " User name: " + servProp.get('UserName', 'N/A') print " Authentication: " + servProp.get('AuthenticationMode', >'N/A') print "" del mxd>>