Bookmark

Краткая информация

Обеспечивает доступ к методам и свойствам закладок.

Обсуждение

Закладки в проекте ArcGIS Pro связаны с картой, для которой они были созданы, и управляются ею. На них можно ссылаться, используя метод listBookmarks для объекта Map. Чтобы выполнить поиск по всем закладкам в проекте, необходимо выполнить итерацию по всем картам. Закладки можно использовать для обновления настроек камеры для MapFrame в компоновке страницы или в MapView, используя метод zoomToBookmark.

Несмотря на то, что закладка связана с определенной картой, ее можно использовать в фреймах карты или в видах карты, которые связаны с разными картами. Закладки, созданные с использованием 2D-карты, можно использовать с 3D-картами и наоборот. Именно во время создания закладки устанавливаются текущие свойства Камера в зависимости от типа карты. Если для локальной или глобальной сцены используется 2D-закладка, результатом будет плоский вид интересующей области. Если 3D-закладка используется с фреймом 2D-карты, свойства 3D-камеры аппроксимируются для получения контурного экстента.

Метод createBookmark на объекте MapFrame или MapView создает закладку для связанной с ним карты, используя текущие настройки камеры. Метод copyBookmark на объекте Map копирует имеющеюся закладку в связанную карту. Оба этих метода позволяют изменить название новой или скопированной закладки. Закладки на одной и той же карте не могут иметь одно и то же имя, и если новое имя не указано, оно присваивается по порядку, например, Закладка, Закладка [1], Закладка [2] и так далее.

Методы exportBookmarks и importBookmarks в объекте Map являются эффективным способом переноса всех закладок с одной карты на другую в том же проекте или между картами в разных проектах. Оба метода используют файлы закладок (*.bkmx) в качестве файла обмена. Вы экспортируете закладки с одной карты в файл закладок и импортируете этот же файл на другую карту. Если вы импортируете больше закладок, чем нужно, можно вызвать метод removeBookmark. Если вы не хотите экспортировать все закладки сразу, вы можете использовать метод copyBookmark для копирования по одной закладке за раз с одной карты на другую карту или между проектами.

Существует несколько сценариев, в которых потребуется обновить уменьшенное изображение закладки. Во-первых, миниатюры закладок, импортированных из документов карт (.mxd), глобусов (.3dd) или сцен (.sxd), автоматически не обновляются из-за снижения производительности - приложению может потребоваться много времени, чтобы автоматизировать этот процесс, поскольку должна быть сгенерирована каждая область закладки, представляющая интерес, а слои полностью отрисованы перед созданием эскиза. Во-вторых, данные на карте, например, базовая карта, могут измениться, и вы можете захотеть, чтобы эскизы были соответствующим образом обновлены. Метод updateThumbnail обеспечивает решение для этих двух сценариев. Свойство hasThumbnail позволяет определить, какие закладки возможно были импортированы и в данный момент не содержат уменьшенного изображения.

Примечание:

При работе с закладками в MapView код должен запускаться внутри приложения, поскольку представления карт не поддерживаются автономными скриптами. Это включает в себя использование таких методов, как updateThumbnail и zoomToBookmark. Эти методы будут работать с MapFrame с автономными скриптами, запускаемыми вне приложения.

Объект Layout также имеет метод createBookmarkMapSeries, позволяющий создавать серии карт из набора предоставленных закладок. Обратитесь к разделу справки BookmarkMapSeries для получения дополнительной информации и примеров кода.

Свойства

СвойствоОписаниеТип данных
description
(чтение и запись)

Описание закладки.

String
hasThumbnail
(только чтение)

Возвращает True, если образец связан с закладкой. Чтобы обновить изображение, воспользуйтесь методом updateThumbnail.

Boolean
map
(только чтение)

Карта, с которой связана закладка.

Map
name
(чтение и запись)

Имя закладки.

String

Обзор метода

МетодОписание
updateThumbnail ()

Обновляет изображение образца закладки.

Методы

updateThumbnail ()

Обновляет изображение образца закладки. Для определения того, существует ли образец для закладки, проверьте свойство hasThumbnail.

Пример кода

Bookmark, пример 1

Следующий скрипт будет обновлять область интереса фрейма карты путем масштабирования к каждой закладки, которая принадлежит карте 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
Bookmark, пример 2

Следующий скрипт выполняет итерацию по всем закладкам в проекте и обновляет уменьшенное изображение, если оно отсутствует:

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
Bookmark, пример 3

Следующий скрипт создает закладку на новой карте, а также копирует на новую карту закладку из другого проекта:

#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)
Bookmark, пример 4

Следующий скрипт экспортирует все закладки с карты в одном проекте и импортирует их во вновь созданную карту в новом пустом проекте:

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"))
Bookmark, пример 5

Следующий скрипт использует 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