6 votos

¿Cómo es un "paquete de mapa" creado mediante programación?

Dado un documento de mapa cargado (mxd) ¿Cómo averiguo los geodatabase objetos relacionados con las capas de contenido? Quiero copiarlos con el documento de mapa, por lo que el mapa se puede mover en la máquina local de cada usuario de un recurso compartido de red. ¿Existe una API para hacer esto? ¿Puede alguien señalar código que hace esto?

Para aclarar (después de los excelentes comentarios): ¿cómo se crea un "paquete de mapa" mediante programación utilizando la API de ArcEngine? ¿Es esto posible?

2voto

theman_on_osx Puntos 192

Esto es lo que ESRI me dijo. Por supuesto, este utiliza la ArcPy caja de herramientas. Pero ArcPy se instala con cada versión de software ArcGIS (incluyendo el motor de tiempo de ejecución.) Tenga en cuenta que usted tiene que pasar la ruta de acceso completa para el archivo de mapa y el paquete de destino del archivo. Además, la ayuda que se le advierte de que se debe establecer la "Descripción" para el archivo de mapa o esto NO funcionará. Por supuesto, no hay tal cosa como una "Descripción" de la propiedad de un archivo de mapa. El archivo "GUARDAR" debe incluir: documentInfo.Comentarios = "Algunos Comentarios necesarios."; (Cast MapDocument a IDocumentInfo (o IDocumentInfo2) y el conjunto de los Comentarios de la propiedad.)

using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.DataManagementTools;

Geoprocessor geoprocessor = new Geoprocessor();
PackageMap packageMap = new PackageMap();
packageMap.in_map = mapFile;
packageMap.output_file = packageFile;
geoprocessor.Execute( packageMap, null );

Por ahora voy a vivir con esto - estoy seguro y espero que se decidan a ofrecer menor nivel de código en 10.1.1 (incluso tho 10.1 está tratando de resumen más.)

1voto

Niall C. Puntos 1234

Hay muchas maneras de lograr esto fuera de la api.
El que va a determinar cuál es la estrategia que el uso de "en" la API.
Inicio aquí y mirar para la replicación, la capa de paquete, paquete de mapas, exportar.
Para algunas de las formas en que podría llevarse a cabo.
Entonces, tal vez será más fácil para ayudarle con la API de dirección.
ESRI Web de Ayuda

Encontré esto en el foro...
pero es a partir de 2010
esri foro
Otra sugerencia podría ser que si se mira un paquetes de capa y cambiarle el nombre de lpk a zip - hace exactamente eso. se baja la cremallera.

import os
import sys
import arcpy
import arcpy.mapping as mapping

# get input parameters 
outDir = arcpy.GetParameterAsText(0)
packageMap = arcpy.GetParameter(1)
checkBrokenLayers = arcpy.GetParameter(2)

# get the map document in which this code is running ("Current" keyword)
mxd = mapping.MapDocument('Current')

# build a pathname to the output report (text file)
reportPath = outDir + '\\' + mxd.title + '.txt'
# open the file (will be created if it doesn't exist)
reportFile = open(reportPath, 'w')
arcpy.AddMessage('Writing report to ' + reportPath)

# start writing report text to a string variable
reportText = 'Title: ' + mxd.title + '\n'
reportText += 'Author: ' + mxd.author + '\n'
reportText += 'Description: ' + mxd.description + '\n'
reportText += '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' + '\n'

# if the user chose to do so, create map package
if packageMap:
    packagePath = outDir + '\\' + mxd.title.replace('.', '_') + '.mpk'
    if (os.path.exists(packagePath)):
    arcpy.AddMessage('Map package already exists (' + packagePath + ')')
    else:
    arcpy.AddMessage('Creating map package (' + packagePath + ')' )
    arcpy.PackageMap_management(mxd.filePath, packagePath)

# loop thru all data frames in the map
dataFrames = mapping.ListDataFrames(mxd, '')
for frame in dataFrames:
    # report data frame name and spatial reference
    reportText += '\nData Frame: ' + frame.name + '\n'
    reportText += 'Spatial Reference: ' + frame.spatialReference.name + '\n'
    # get all layers in this data frame
    layers = mapping.ListLayers(mxd, '', frame)
    i = 0 # layer index position
    # loop thru all layers in the data frame
    for lyr in layers:
        # report index position and name
    reportText += '\tLayer ' + str(i) + ': ' + lyr.name + '\n'
    i += 1 # same as i = i + 1

# if the user has requested it, check for layers with a missing data source
if checkBrokenLayers:
    arcpy.AddMessage('Checking for missing data sources')
    brokenList = mapping.ListBrokenDataSources(mxd)
    # report the count of broken layers
    reportText += '\nFound ' + str(len(brokenList)) + ' layers with missing data.'
    # loop thru all broken layers in the list
    for broken in brokenList:
        # report broken layer name
    reportText += '\t- ' + broken.name + '\n'

# write the text stored in the reportText variable to the output file
reportFile.write(reportText)
reportFile.close() # close the file
del mxd # delete the mxd object

0voto

Hameno Puntos 129

Otra opción es usar un script de arcpy para una lista de las capas en un mxd particular sin necesidad de abrir manualmente. Las herramientas de secuencia de comandos de muestra arcpy.mapping tiene un script llamado Multi MXD Resumen (informe), que hace esto. Se puede personalizar la secuencia de comandos para mover automáticamente mxd que contienen archivos de geodatabase (moviendo el mxd y la geodatabase).

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