Skip to content

Instantly share code, notes, and snippets.

@AlexArcPy
Created October 24, 2017 09:44
Show Gist options
  • Save AlexArcPy/8f3e26f8f55b22b7cadb8e9a5cb6e1eb to your computer and use it in GitHub Desktop.
Save AlexArcPy/8f3e26f8f55b22b7cadb8e9a5cb6e1eb to your computer and use it in GitHub Desktop.
Migrate ArcMap map document bookmarks between map documents (.mxd files)
from comtypes.client import GetModule, CreateObject
from snippets102 import GetStandaloneModules, InitStandalone
esriCarto = GetModule(r"C:\Program Files (x86)\ArcGIS\Desktop10.4\com\esriCarto.olb")
# First time through, need to import the “StandaloneModules”. Can comment out later.
#GetStandaloneModules()
#InitStandalone()
#----------------------------------------------------------------------
def create_mxd_file():
"""create an empty mxd file"""
# Create a map document object
mxdObject = CreateObject(esriCarto.MapDocument, interface=esriCarto.IMapDocument)
# Create new mxd file
mxdObject.New(r'C:\Student\MapTemplate.mxd')
#to switch interface
doc_info = mxdObject.QueryInterface(esriCarto.IDocumentInfo2)
#can change some properties
doc_info.Author = 'Python ninja'
doc_info.Subject = 'Learning accessing ArcObjects from Python'
mxdObject.Save()
#----------------------------------------------------------------------
def enum_mxd_bookmarks(mxd_bookmarks_obj):
"""return a list of IBookmark pointers"""
cur = mxd_bookmarks_obj.Bookmarks
for i in xrange(2):
yield cur.Next()
#----------------------------------------------------------------------
def copy_map_bookmark(to_mxd_name,book):
"""copy bookmark from source to destination mxd"""
# Create a map document object
mxdObject = CreateObject(esriCarto.MapDocument, interface=esriCarto.IMapDocument)
mxdObject.Open(to_mxd_name)
active_view = mxdObject.ActiveView
iMap = active_view.FocusMap
#access IMapBookmarks
to_bookmarks = iMap.QueryInterface(esriCarto.IMapBookmarks)
#managing source bookmarks
#access IAOIBookmark / ISpatialBookmark
aoi = book.QueryInterface(esriCarto.IAOIBookmark)
#access IEnvelope aoi.Location
to_bookmarks.AddBookmark(aoi)
print "added bookmark {0}".format(book.Name)
res = mxdObject.Save()
return
#----------------------------------------------------------------------
def migrate_mxd_bookmarks():
"""transfer bookmarks from one mxd to another"""
#http://resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/#/How_to_create_AOIs_and_bookmarks/0001000002w1000000/
# Create a map document object
mxdObject = CreateObject(esriCarto.MapDocument, interface=esriCarto.IMapDocument)
mxdObject.Open(r'C:\Student\FromBookmarks.mxd')
active_view = mxdObject.ActiveView
iMap = active_view.FocusMap
#access IMapBookmarks
mxd_bookmarks = iMap.QueryInterface(esriCarto.IMapBookmarks)
print [b.Name for b in enum_mxd_bookmarks(mxd_bookmarks)]
books = [b for b in enum_mxd_bookmarks(mxd_bookmarks)]
for book in books:
copy_map_bookmark(r'C:\Student\ToBookmarks.mxd',book)
#migrate_mxd_bookmarks()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment