5 votos

Problemas de adición de capas MapServerCache Raster a Mxd

He creado una consolidación de los datos de la herramienta. Se consolida usuarios mxd vectoriales y de trama de datos en una estructura de proyecto. También permite al usuario la opción de caché de nuestras empresas de ArcGIS Web del Servidor de Mapas. El arcpy.gp.ExportMapServerCache produce un compacto de caché conjunto de datos, que se convierte en una capa con arcpy.MakeRasterLayer_management y añadido a un mxd con arcpy.la cartografía.AddLayer.

La capa es de un agregado con éxito a la mxd. Pero no es el mismo que cuando lo hace el usuario de forma manual. El arcpy capas "origen de datos" no es el que fue dictado, sino que hace referencia a una temp de los usuarios de la carpeta de datos de aplicación en su lugar.

¿Por qué se hace referencia temporal, y NO de la trama de la caché?

### MOVE CONSOLIDATED MXD TO PROJECT CORE LEVELS
MasterMxdPath = UserProjectPath+"\\Extract_"+Project_Name+".mxd" #new mxd name
mxd2Name = UserProjectPathGDB+"\\v101\\"+mxdNAME #get consolidated mxd
mxd2 = arcpy.mapping.MapDocument(mxd2Name)
mxd2.saveACopy(MasterMxdPath, "10.1")
del mxd2

### ADDING WEB CACHE TO MXD
try:
    UserProjectPathCache = UserProjectPath+"\\Cache"
    arcpy.env.workspace = UserProjectPathCache
    RastersL = arcpy.ListRasters("*", "ALL")
    RcCount = len(RastersL)

    if RcCount >0: ### If there's a web cache:
        arcpy.AddMessage("    J: Web Cache Exists:")
        arcpy.AddMessage("    J: There are: " +str(RcCount) +" rasters")

        ### Get Dataframe From MXD
        mxd3 = arcpy.mapping.MapDocument(MasterMxdPath)
        df = arcpy.mapping.ListDataFrames(mxd3)[0]

        ### Turn Rasters Into Layers & Add To Dataframe
        CNTR = 0
        for raster in RastersL:
            arcpy.AddMessage("    J: Cache Name: "+str(raster))
            CNTR = CNTR + 1
            RasterLayerName = "WebServiceCache_"+str(CNTR)          
            RasterPath = UserProjectPathCache+"\\"+raster
            arcpy.AddMessage("    J: New Layer Name: "+ RasterLayerName)
            RLayer = arcpy.MakeRasterLayer_management(RasterPath,RasterLayerName)
            layer = RLayer.getOutput(0)
            arcpy.mapping.AddLayer(df, layer, 'Bottom')
            mxd3.save()
            arcpy.AddMessage("    J: Mxd Saved With Cache Layer")
            del RLayer, layer, df
        del mxd3

        ### Remove Webservices From Dataframes in MXD
        mxd4 = arcpy.mapping.MapDocument(MasterMxdPath)
        df2 = arcpy.mapping.ListDataFrames(mxd4)[0]

        for lyr2 in arcpy.mapping.ListLayers(mxd4, "", df2):
            if lyr2.supports("SERVICEPROPERTIES"):
                servProp2 = lyr2.serviceProperties
                if lyr2.serviceProperties["ServiceType"] != "SDE":
                    arcpy.AddMessage("    J: Removing WEB SERVICE LAYER: " + lyr.name)
                    arcpy.mapping.RemoveLayer(df2, lyr2)
        mxd4.save()
        arcpy.AddMessage("    J: Final Mxd Saved: ")
        del mxd4

    else: ### If there's no web cache
        arcpy.AddMessage("J: No Web Cache Exists:")

except Exception as e:
    arcpy.AddError(e.message)
    arcpy.AddMessage(" DID NOT ADD RASTER TO MXD")

Image Showing Layer Paths

1voto

zfz Puntos 111

Resulta que esto es causado por un "problema" en el env.settings. Utilicé arcpy. ResetEnvironments() y arcpy. ClearEnvironment("workspace") antes de usar el arcpy.arcpy.MakeRasterLayer_management y todo funcionó como se esperaba.

    arcpy.ClearEnvironment("workspace") 
    arcpy.ResetEnvironments()

    AddRasterMxd = arcpy.mapping.MapDocument(MasterMxdPath)
    AddRasterdf = arcpy.mapping.ListDataFrames(AddRasterMxd)[0]
    arcpy.env.workspace = UserProjectPathCache
    RasterList = []
    count = 0
    arcpy.AddMessage("    - Adding Raster Cache To Extract Mxd:")
    for dirname, dirnames, filenames in os.walk(UserProjectPathCache):
        for subdirname in dirnames:
            arcpy.env.workspace = os.path.join(dirname, subdirname)
            RasterList = arcpy.ListRasters("Layers", "")
            RasterLayerName = subdirname
            for raster in RasterList:
                if raster == "Layers":
                    count = count + 1
                    arcpy.AddMessage("      - Raster "+str(count)+" Name: " +str(subdirname))
                    RLayer = arcpy.arcpy.MakeRasterLayer_management(raster,RasterLayerName)
                    FinalRasterLayer = RLayer.getOutput(0)
                    arcpy.mapping.AddLayer(AddRasterdf, FinalRasterLayer, 'Bottom')

    arcpy.env.spatialreference = StoredSR
    AddRasterMxd.save()
    del AddRasterMxd
    del AddRasterdf
    del RLayer
    del FinalRasterLayer

1voto

Farid Cher Puntos 5306

Aquí está su respuesta:

Como usted está intentando agregar una carpeta de imágenes en caché, debe utilizar MakeImageServerLayer_management en lugar de MakeRasterLayer_management.

Aquí está el fragmento de código sencillo para hacer lo que usted necesita. Simplemente pega en la ventana de python y ver la respuesta. sólo cambia la ruta a la carpeta de memoria caché compacto (trama):

import arcpy

mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]
layerpath = r"D:\Cache\World Cities Population"
RLayer = arcpy.MakeImageServerLayer_management(layerpath ,"ImageServerCacheLayer")
arcpy.mapping.AddLayer(dataFrame, "ImageServerCacheLayer", "BOTTOM")

Espero que te sirva.

0voto

Spyros Puntos 56

Existe un insecto llamado NIM082145 - capa de rasterizada en memoria carece de fuente de información y fichas son no de todo correctas.

Se crea un archivo .afr en lugar de un archivo .lyr. Este tema ha sido encontrado en 10.1 y en fijo en 10.1 SP1.

Así, fácil arreglo: actualización 10.2/3 o simplemente instala 10.1 SP1 desde aquí.

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