Export Map Server Cache (Server)
Summary
Exports tiles from a map or image service cache as a cache dataset or as a tile package to a folder on disk. The tiles can either be imported into other caches or they can be accessed from ArcGIS for Desktop or mobile devices as a raster dataset, independently from their parent service.
Usage
Before running this tool, create the folder on disk that will hold the exported tiles.
The ArcGIS Server account must have write access to the target cache folder. If the ArcGIS Server account cannot be granted write access to the target cache folder, but the ArcGIS for Desktop client has write access to it, then choose the Copy data from server (copy_data_from_server) parameter.
The Overwrite Tiles parameter was added to this tool at 10.1 Service Pack 1 and allows the exported tiles to completely overwrite the tiles in the destination cache, rather than blending the images. Exported tiles can still be constrained to an area of interest.
Parameters have changed for this tool at version 10.1. Models and scripts written prior to 10.1 that use this tool will need to be modified to work in 10.1.
When moving to 10.1 Service Pack 1, you must open and validate any models that use this tool because it has a new parameter. This process is described in Automating cache creation and updates with geoprocessing.
Syntax
Parameter | Explanation | Data Type |
input_service | The map or image service whose cache tiles will be exported. This is a string containing both the server and service information. To see how to construct this string, open ArcCatalog, select your service in the Catalog tree, and note the text in the Location toolbar. Then change the backslashes to forward slashes, for example, GIS Servers/arcgis on MYSERVER (admin)/USA.MapServer. | String |
target_cache_path |
The folder into which the cache will be exported. This folder does not have to be a registered server cache directory. The ArcGIS Server account must have write access to the target cache folder. If the server account cannot be granted write access to the destination folder but the ArcGIS for Desktop client has write access to it, then choose the Copy data from server parameter. | Folder |
export_cache_type |
Choose to export cache as a Cache Dataset or a Tile Package. Tile packages are suitable for ArcGIS Runtime and ArcGIS Mobile deployments.
| String |
copy_data_from_server | Set this option to COPY_DATA if the ArcGIS Server account cannot be granted write access to the target folder and the ArcGIS for Desktop client has write access to it. The software exports the tiles in the server output directory before moving them to the target folder.
| Boolean |
storage_format_type |
The storage format of the exported cache.
| String |
scales [scales,...] |
A list of scale levels at which tiles will be exported. | Double |
num_of_caching_service_instances (Optional) |
The total number of instances of the System/CachingTools service that you want to dedicate toward running this tool. You can increase the maximum number of instances per machine of the System/CachingTools service using the Service Editor window available through an administrative connection to ArcGIS Server. Ensure your server machines can support the chosen number of instances. | Long |
area_of_interest (Optional) |
An area of interest (polygon) that spatially constrains where tiles are exported from the cache. This can be a feature class, or it can be a feature that you interactively define in ArcMap. This parameter is useful if you want to export irregularly shaped areas, as the tool clips the cache dataset at pixel resolution. If you do not specify an area of interest, the full extent of the map is exported. | Feature Set |
export_extent (Optional) |
A rectangular extent defining the tiles to be exported. By default the extent is set to the full extent of the map service into which you are importing. Note the optional parameter on this tool Area of Interest that allows you to alternatively import using a polygon. It is recommended not to provide values for both the parameters for a job. If values are provided for both parameters, the Area of Interest takes precedence over Import Extent | Extent |
overwrite (Optional) |
| Boolean |
Code Sample
ExportMapServerCache example1
Export cache tiles for a feature class while changing the storage format from EXPLODED to COMPACT.
# Name: ExportMapServerCache.py for ArcGIS Server
# Description: The following stand-alone script demonstrates how to export
# cache as CACHE_DATASET in COMPACT storage format and MERGE tiles
# using an AREA_OF_INTEREST to TARGET_CACHE_PATH
# which is accessible to server instances
# Requirements: os, sys, time and traceback modules
# Any line that begins with a pound sign is a comment and will not be executed
# Empty quotes take the default value.
# To accept arguments from the command line replace values of variables to
# "sys.argv[]"
# Import system modules
import arcpy
from arcpy import env
import os, sys, time, datetime, traceback, string
# Set environment settings
env.workspace = "C:/data"
# List of input variables for map service properties
connectionFile = r"C:\Users\<username>\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog"
server = "arcgis on MyServer_6080 (publisher)"
serviceName = "Rainfall.MapServer"
inputService = connectionFile + "\\" + server + "\\" + serviceName
targetCachePath = "C:/data/temp"
exportCacheType = "CACHE_DATASET"
copyDataFromServer = "DO_NOT_COPY"
storageFormat = "COMPACT"
scales = [500000,250000,125000,64000]
numOfCachingServiceInstances = "2"
areaOfInterest = "C:/data/101/Portland/Metro.shp"
exportExtents = ""
overwriteTiles = "MERGE"
currentTime = datetime.datetime.now()
arg1 = currentTime.strftime("%H-%M")
arg2 = currentTime.strftime("%Y-%m-%d %H:%M")
file = 'C:/data/report_%s.txt' % arg1
# print results of the script to a report
report = open(file,'w')
# use "scaleValues[0]","scaleValues[-1]","scaleValues[0:3]"
# Enter rectangular custom extent values for the "exportExtents" variable to
# constrain the exporting cache along the rectangular extents
try:
starttime = time.clock()
result = arcpy.ExportMapServerCache_server(inputService, targetCachePath,
exportCacheType,
copyDataFromServer,
storageFormat, scales,
numOfCachingServiceInstances,
areaOfInterest, exportExtents,
overwriteTiles)
finishtime = time.clock()
elapsedtime = finishtime - starttime
#print messages to a file
while result.status < 4:
time.sleep(0.2)
resultValue = result.getMessages()
report.write ("completed " + str(resultValue))
print "Exported cache successfully for mapservice " + serviceName
" to " + targetCachePath + "\n using " + areaOfInterest + "\n in "
str(elapsedtime) + " sec \n on " + arg2
except Exception, e:
# If an error occurred, print line number and error message
tb = sys.exc_info()[2]
report.write("Failed at \n" "Line %i" % tb.tb_lineno)
report.write(e.message)
print "Exported Map server Cache using area of Interest"
report.close()
ExportMapServerCache example2
Export cache as a TILE_PACKAGE when the destination folder is inaccessible to ArcGIS Server instances.
# Name: ExportMapServerCache.py
# Description: The following stand-alone script demonstrates how to export cache
# as TILE_PACKAGE for default number of scales of a service, to a
# TARGET_CACHE_PATH which is inaccessible to server instances using
# COPY_DATA_FROM_SERVER
# Requirements: os, sys, time and traceback modules
# Any line that begins with a pound sign is a comment and will not be executed
# Empty quotes take the default value.
# To accept arguments from the command line replace values of variables to
# "sys.argv[]"
# Import system modules
import arcpy
from arcpy import env
import os, sys, time, datetime, traceback, string
# Set environment settings
env.workspace = "C:/data"
# List of input variables for map service properties
connectionFile = r"C:\Users\<username>\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog"
server = "arcgis on MyServer_6080 (publisher)"
serviceName = "Rainfall.MapServer"
inputService = connectionFile + "\\" + server + "\\" + serviceName
targetCachePath = "C:/temp/usa"
exportCacheType = "TILE_PACKAGE"
copyDataFromServer = "COPY_DATA"
storageFormat = "COMPACT"
scaleValues = [500000,250000,125000,64000]
numOfCachingServiceInstances = "2"
exportExtents = ""
areaOfInterest = ""
overwriteTiles = "MERGE"
currentTime = datetime.datetime.now()
arg1 = currentTime.strftime("%H-%M")
arg2 = currentTime.strftime("%Y-%m-%d %H:%M")
file = 'C:/data/report_%s.txt' % arg1
# print results of the script to a report
report = open(file,'w')
# use "scaleValues[0]","scaleValues[-1]","scaleValues[0:3]"
try:
starttime = time.clock()
result = arcpy.ExportMapServerCache_server(inputService, targetCachePath,
exportCacheType,
copyDataFromServer,
storageFormat, scales,
numOfCachingServiceInstances,
areaOfInterest,
exportExtents, overwriteTiles)
finishtime = time.clock()
elapsedtime = finishtime - starttime
#print messages to a file
while result.status < 4:
time.sleep(0.2)
resultValue = result.getMessages()
report.write ("completed " + str(resultValue))
print "Exported cache successfully for mapservice " + serviceName + " to "
targetCachePath + " in " + str(elapsedtime) + " sec \n on" + arg2
except Exception, e:
# If an error occurred, print line number and error message
tb = sys.exc_info()[2]
report.write("Failed at step 1 \n" "Line %i" % tb.tb_lineno)
report.write(e.message)
print "Exported Map server Cache "
report.close()