Mapping#
The ESRI Python library provides a module to manipulate .mxd files with functions to automate managing, exporting, and printing.
To access a map document (.mxd) properties and methods, create a Python object as shown below:
>>> import arcpy
>>> mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
Functions#
Function |
Description |
|---|---|
|
Returns the list of DataFrame objects within a single map. Also used to return a DataFrame object. |
|
Returns the list of Layer objects within a single dataframe. Also used to return a Layer object. |
|
Returns elements from a page layout (not map annotations). Types: “DATAFRAME_ELEMENT”, “GRAPHIC_ELEMENT”, “LEGEND_ELEMENT”, “MAPSURROUND_ELEMENT”, “PICTURE_ELEMENT”, “TEXT_ELEMENT” |
|
Inserts a layer at a specific location within a dataframe |
Object Properties#
Any objects (dataframes, layers, elements, etc.) provide access to important properties. You can get or set position, change text, modify rotation, and more. The Python object is created by assigning a variable to an item from the list of objects.
For example, given 2 dataframes (DF1 and DF2), to work on DF2: create the list of dataframes selecting only DF2 with a wildcard. The list has only one item. The object will be the item at position [0].
>>> dataframe_list = arcpy.mapping.ListDataFrames(mxd, "DF2")
>>> dataframe_obj = dataframe_list[0]
DataFrame Properties#
Property |
Description |
|---|---|
name |
DataFrame’s name as it appears in the table of contents |
displayUnits |
Data frame distance units |
elementHeight/Width |
Height or width of the element in page units |
elementPositionX/Y |
X or Y location of the data frame element’s anchor position in page units |
extent |
Map extent using map coordinates (map units) |
mapUnits |
Data frame map units |
referenceScale |
Data frame’s reference scale |
scale |
Scale of the active data frame |
panToExtent |
Pans and centers the data frame extent using an extent object |
Layer Properties#
Property |
Description |
|---|---|
name |
Name of a layer as it appears in the ArcMap table of contents |
isFeatureLayer |
True/False if layer is a Feature Class |
isGroupLayer |
True/False if layer is a Group of layers |
isRasterLayer |
True/False if layer is a Raster |
dataSource |
The complete path for the layer’s data source |
definitionQuery |
Get or set a layer’s definition query |
brightness/contrast |
Get or set brightness and contrast value (between +100% and -100%) |
visible |
Controls the display of a layer |
GraphicElement Properties#
Property |
Description |
|---|---|
name |
Name of the element |
elementHeight/Width |
Height or width in page units |
elementPositionX/Y |
X or Y location of the anchor position in page units |
TextElement Properties#
Property |
Description |
|---|---|
name |
Name of the element |
elementHeight/Width |
Height or width in page units |
elementPositionX/Y |
X or Y location of the anchor position in page units |
text |
The text string associated with the element |
Usage Example#
>>> dataframes_list = arcpy.mapping.ListDataFrames(mxd)
>>> for df in dataframes_list:
... print(df.name)
... print(df.extent)
... print(df.displayUnits)
Layers
2624322.3646503 1340246.53411237 6536340.36465029 5431630.53411241
Meters
>>> dataframe = arcpy.mapping.ListDataFrames(mxd)[0]
>>> list_layers = arcpy.mapping.ListLayers(mxd, "*", dataframe)
>>> for lyr in list_layers:
... print(lyr.name, lyr.dataSource, lyr.visible)
NUTS, C:\Project\NUTS.shp, True
Rivers, C:\Project\rivers.shp, True
Samples, C:\Project\sample_points.shp, False
Complete Example#
This script inserts a new shapefile layer, applies symbology from another layer, changes the title text of the map, and saves a copy of the project.
import arcpy
# Create the map object
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
# Create the dataframe object
dataframe = arcpy.mapping.ListDataFrames(mxd)[0]
# Create the layer objects
ref_layer = arcpy.mapping.ListLayers(mxd, "ref_layer", dataframe)[0]
my_layer = arcpy.mapping.Layer(r"C:\Project\mylayer.shp")
# Change symbology and insert layer
arcpy.ApplySymbologyFromLayer_management(my_layer, ref_layer)
arcpy.mapping.InsertLayer(dataframe, ref_layer, my_layer, "AFTER")
# Change the title text
elems = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "Title")[0]
elems.text = "Map of my layer"
# Save a copy of the project
mxd.saveACopy(r"C:\Project\Project1.mxd")
del mxd