Created
October 24, 2017 09:44
-
-
Save AlexArcPy/8f3e26f8f55b22b7cadb8e9a5cb6e1eb to your computer and use it in GitHub Desktop.
Migrate ArcMap map document bookmarks between map documents (.mxd files)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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