Loading [MathJax]/extensions/TeX/mathchoice.js

1 votos

Encontrar y reemplazar script de origen de shapefile no está funcionando

Soy muy nuevo en Python, así que por favor, perdóname si este es un error simple. Tengo varios MXD's en los que cada uno tiene varias capas que hacen referencia a la misma fuente. Sin embargo, he movido estos datos a una nueva carpeta. He escrito un script para actualizar automáticamente las capas similares.

El script se ejecuta, sin embargo, cuando reviso para ver si funcionó, ninguna de las capas se actualizan. No estoy seguro de qué está mal.

import arcpy, os

# Espacio de trabajo para buscar MXDs
Workspace = r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\MXD"
arcpy.env.workspace = Workspace

# listado de documentos de mapa en la carpeta
mxdList = arcpy.ListFiles("*.mxd")
print mxdList

# establecer nuevo enlace para archivo de forma específico en cada MXD de la lista.
for file in mxdList:
# establecer documento de mapa a cambiar
    filePath = os.path.join(Workspace, file)
    mxd = arcpy.mapping.MapDocument(filePath)

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.supports("DATASOURCE"):
        if lyr.dataSource == r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1\MMO_South_Plan_Areas.shp":
            lyr.findAndReplaceWorkspacePath(r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1", r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\SHP")
    if lyr.dataSource == r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1\Land.shp":
            lyr.findAndReplaceWorkspacePath(r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1", r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\SHP")

arcpy.RefreshTOC()
arcpy.RefreshActiveView()
mxd.save()
print "Éxito"

2voto

UnkwnTech Puntos 21942

Como comentó @Luke, y como ambos estábamos trabajando hacia:

Si ese es tu código real, tu bucle for lyr en arcpy.mapping.ListLayers(mxd): solo se ejecutará en el último mxd ya que no está sangrado para estar dentro del bucle for file in mxdList:.

En lugar de tu código intenta con:

import arcpy, os

#workspace para buscar MXDs
Workspace = r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\MXD"
arcpy.env.workspace = Workspace

#listar documentos de mapa en carpeta
mxdList = arcpy.ListFiles("*.mxd")
print mxdList

#establecer nuevo enlace para shapefile específico en cada MXD de la lista
for file in mxdList:
#establecer documento de mapa a cambiar
    filePath = os.path.join(Workspace, file)
    mxd = arcpy.mapping.MapDocument(filePath)

    for lyr in arcpy.mapping.ListLayers(mxd):
        if lyr.supports("DATASOURCE"):
            if lyr.dataSource == r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1\MMO_South_Plan_Areas.shp":
                lyr.findAndReplaceWorkspacePath(r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1", r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\SHP")
        if lyr.dataSource == r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1\Land.shp":
                lyr.findAndReplaceWorkspacePath(r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\WP1", r"M:\TEAM_GIS\EDKM\Projects\mmo1065_south_habitat_mapping\20140708_Update_3_QA\3_Working_GIS_Files\SHP")

    mxd.save()
    print "Éxito"

Eliminé arcpy.RefreshActiveView() y arcpy.RefreshTOC() porque solo hacen algo cuando tu objeto MapDocument ha sido creado usando "CURRENT".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X