Please refer to the ArcGIS Help document for the ListBookmarks (arcpy.mapping) function, example 3. Example 3 shows code that is supposed to convert each bookmark in a map document to a feature.
I cannot get this code to output polygons of bookmark extents in a mxd. I set the output feature class. I created a template feature class with a "Name" attribute (text, 50) with the same spatial reference as the dataframe of the mxd that contains the bookmarks. The code runs without error and creates the output feature class, however, it does not contain any records.
Does anyone have any ideas on how to get this code to work? I'm using ArcGIS 10.2.1.
I cannot get this code to output polygons of bookmark extents in a mxd. I set the output feature class. I created a template feature class with a "Name" attribute (text, 50) with the same spatial reference as the dataframe of the mxd that contains the bookmarks. The code runs without error and creates the output feature class, however, it does not contain any records.
Does anyone have any ideas on how to get this code to work? I'm using ArcGIS 10.2.1.
Code:
import arcpy, os
# The map with the bookmarks
mxd = arcpy.mapping.MapDocument(r"C:\Project\Counties.mxd")
# The output feature class to be created -
# This feature class will store the bookmarks as features
outFC = r'C:\Project\Counties.gdb\Bookmarks'
# A template feature class that contains the attribute schema
# Including a "Name" field to store the bookmark name
template = r'C:\Project\Counties.gdb\Template'
if arcpy.Exists(outFC):
arcpy.Delete_management(outFC)
arcpy.CreateFeatureclass_management(os.path.dirname(outFC),
os.path.basename(outFC),
"POLYGON", template,
spatial_reference=template)
cur = arcpy.da.InsertCursor(outFC, ["SHAPE@", "Name"])
array = arcpy.Array()
for bkmk in arcpy.mapping.ListBookmarks(mxd):
array.add(arcpy.Point(bkmk.extent.XMin, bkmk.extent.YMin))
array.add(arcpy.Point(bkmk.extent.XMin, bkmk.extent.YMax))
array.add(arcpy.Point(bkmk.extent.XMax, bkmk.extent.YMax))
array.add(arcpy.Point(bkmk.extent.XMax, bkmk.extent.YMin))
# To close the polygon, add the first point again
array.add(arcpy.Point(bkmk.extent.XMin, bkmk.extent.YMin))
cur.insertRow([arcpy.Polygon(array), bkmk.name])
array.removeAll()