摘要
提供了对书签方法和属性的访问。
说明
ArcGIS Pro 工程中的书签与为其创建书签的地图相关联并使用地图进行管理。 可以使用 Map 对象上的 listBookmarks 方法来引用书签。 要搜索工程中的所有书签,必须迭代所有地图。 借助 zoomToBookmark 方法,可以使用书签来更新页面布局上 MapFrame 或 MapView 的照相机设置。
尽管书签与特定地图相关联,但书签可以用在与不同地图相关联的地图框或地图视图上。 使用 2D 地图创建的书签可以与 3D 地图配合使用,反之亦然。 当前照相机属性是在创建书签时根据地图类型设置的。 如果 2D 书签用于本地或全球场景,则结果将为感兴趣区域的平面视图。 如果将 3D 书签与 2D 地图框类型配合使用,则将近似 3D 照相机属性以提供平面范围。
MapFrame 或 MapView 对象上的 createBookmark 方法将使用其当前的照相机设置,为其相关联的地图创建书签。 Map 对象上的 copyBookmark 方法可将现有书签复制到引用的地图中。 这两种方法都允许您修改新书签或复制书签的名称。 同一地图中的书签不能具有相同的名称,如果未提供新名称,则将自动对名称进行排序,例如 Bookmark、Bookmark [1]、Bookmark [2] 等。
Map 对象上的 exportBookmarks 和 importBookmarks 方法是将一张地图中的所有书签传输到同一工程中的另一张地图或者在不同工程的地图之间传输的有效方法。 两种方法均使用书签文件 (*.bkmx) 作为交换文件。 可以将一张地图中的书签导出到书签文件,然后将该文件导入到另一张地图中。 如果导入的书签超过所需数量,则可以调用 removeBookmark 方法。 如果您不希望一次导出所有书签,则可以使用 copyBookmark 方法一次将一个书签从一张地图复制到另一张地图以及跨工程复制书签。
在以下多种情况下,需要更新书签的缩略图: 首先,由于性能影响,从地图 (.mxd)、globe (.3dd) 或场景 (.sxd) 文档导入的书签不会自动更新其缩略图 - 应用程序可能需要较长时间才能自动执行此过程,因为在创建缩略图之前,需要生成每个书签感兴趣区域并完全绘制图层。 其次,地图(例如底图)中的数据可能会发生更改,并且您可能希望相应更新缩略图。 updateThumbnail 方法为这两种情况提供了解决方案。 hasThumbnail 属性用于确定可能已导入并且目前没有缩略图的书签。
注:
在 MapView 中使用书签时,由于独立脚本不支持地图视图,因此必须在应用程序内运行代码。 这包括使用诸如 updateThumbnail 和 zoomToBookmark 等方法。 这些方法将与具有在应用程序外部运行的独立脚本的 MapFrame 配合使用。
Layout 对象还具有 createBookmarkMapSeries 方法,借助该方法,可以根据一组提供的书签创建地图系列。 有关详细信息和代码示例,请参阅 BookmarkMapSeries 帮助主题。
属性
属性 | 说明 | 数据类型 |
description (可读写) | 书签的描述。 | String |
hasThumbnail (只读) | 如果缩略图与书签相关,则返回 True。 要更新图像,使用 updateThumbnail 方法。 | Boolean |
map (只读) | 与书签关联的地图。 | Map |
name (可读写) | 书签的名称。 | String |
方法概述
方法 | 说明 |
updateThumbnail () | 更新书签缩略图。 |
方法
updateThumbnail ()
更新书签缩略图。要确定书签是否具有缩略图,请检查 hasThumbnail 属性。
代码示例
以下脚本将通过缩放至每个属于 Yosemite National Park 地图的书签来更新地图框的感兴趣区域,并将结果导出至各个 PDF 文档:
import arcpy, os
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
lyt = aprx.listLayouts("Main Attractions*")[0]
mf = lyt.listElements("MAPFRAME_ELEMENT", "Yosemite National Park*")[0]
bkmks = mf.map.listBookmarks()
for bkmk in bkmks:
mf.zoomToBookmark(bkmk)
lyt.exportToPDF(os.path.join(r"C:\Projects\YosemiteNP", f"{bkmk.name}.pdf"))
del aprx
以下脚本将迭代工程中的所有书签,并更新缩略图(如果其缺失):
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
for m in aprx.listMaps():
for bkmk in m.listBookmarks():
if bkmk.hasThumbnail == False:
bkmk.updateThumbnail()
aprx.save()
del aprx
以下脚本将在新地图中创建书签,并将书签从另一个工程复制到新地图中:
#Create a new map and bookmark
p = arcpy.mp.ArcGISProject("CURRENT")
m = p.createMap("New Map", "MAP")
mv = m.openView()
mv.createBookmark("Default Extent", "The map's default extent")
#Reference a bookmark in a different project
p2 = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
m2 = p2.listMaps("Yosemite National Park")[0]
bkmk = m2.listBookmarks("Park Boundary")[0]
#Copy the referened bookmark into the new map
copyBkmk = m.copyBookmark(bkmk, "Yosemite National Park")
copyBkmk.updateThumbnail()
mv.zoomToBookmark(copyBkmk)
以下脚本将从一个工程中的地图中导出所有书签,并将其导入在新的空白工程中新创建的地图:
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
#Export the bookmarks from one map in a project
p1 = arcpy.mp.ArcGISProject(os.path.join(relpath, "Bookmarks.aprx"))
m1 = p1.listMaps('Great Lakes')[0]
m1.exportBookmarks(r"C:\Temp\test.bkmx")
#Import bkmks into a new, blank project after creating a new map
p2 = arcpy.mp.ArcGISProject(os.path.join(relpath, "Blank.aprx"))
m2 = p2.createMap('New Map')
m2.importBookmarks(r"C:\Temp\test.bkmx")
p2.saveACopy(os.path.join(relpath, "Blank_OUT.aprx"))
os.startfile(os.path.join(relpath, "Blank_OUT.aprx"))
以下脚本将使用 Python CIM Access,根据书签名称按字母顺序来排列地图中的所有书签:
p = arcpy.mp.ArcGISProject('current')
for m in p.listMaps():
cim = m.getDefinition('V3') #Get the CIM definition
#The following line alphabetizes the CIM bookmark list based on name
newList = sorted(cim.bookmarks, key=lambda Bookmark: Bookmark.name)
cim.bookmarks = newList
m.setDefinition(cim) #Set the CIM changes back to the map