AddLayer method (MapDoc)

Добавляет в карту слой с указанным именем.

Применяется к:

MapDoc

Синтаксис:

Visual Basic:

Sub AddLayer(Path As String)

Path - имя или URL слоя.

Описание:

Имя слоя - это путь к его файлам: без расширения или с расширением главного файла .b00, оба варианта дают один и тот же слой. Так же добавляются слой рельефа (.ztr) и растровый слой (.zrs).

Новый слой встает в конец списка Layers. В пустой карте первый добавленный слой становится активным, следующие активного не меняют. После добавления карта считается несохраненной: Saved становится False.

Загружен ли уже такой слой, метод не проверяет: второй вызов с тем же путем добавляет в карту второй, отдельный слой с тем же названием.

В случае неудачи возникает исключение с одним из следующих кодов:

Код

Описание

1Неопределённая ошибка. Возможно нарушена целостность слоя.
512Не удалось открыть слой.
513Слоя по указанному пути нет. Так же отвечает и пустая строка.
519Превышено максимальное число загруженных слоёв.

771

Заблокировано. В обработчике события evMapBeforeLayerAdd был установлен skip_flag.

В макросах на python исключения нет: при неудаче метод просто не добавляет слой и возвращает None. Добавился ли слой, там проверяют по числу слоев карты.

Пример:

Пример собирает отдельную карту из слоев рабочей и пробует добавить слой, которого нет.

Visual Basic:

Sub MapDoc_AddLayer
'Берем рабочую карту
Set Doc = Zulu.ActiveMapDoc
'Отдельная карта без окон
Set M = CreateObject("ZuluLib.MapDoc")
'Добавляем в нее слои рабочей карты по путям к их файлам, нумерация слоев с единицы
For i = 1 To Doc.Layers.Count
  M.AddLayer Doc.Layers.Item(i).Name
Next
S = "Слоев в новой карте: " & M.Layers.Count & ", активный: " & M.Layers.Active.UserName
S = S & vbCrLf & "карта сохранена: " & M.Saved
'Слоя по такому пути нет - будет исключение
On Error Resume Next
M.AddLayer "C:\Data\no_such_layer"
S = S & vbCrLf & "несуществующий слой: ошибка " & Hex(Err.Number) & " " & Err.Description
On Error GoTo 0
MsgBox S
End Sub

Python:

import zulu

def Macro_MapDoc_AddLayer():
    # Берем рабочую карту
    doc = zulu.App.ActiveMapDoc
    # Отдельная карта без окон
    M = zulu.MapDoc()
    # Добавляем в нее слои рабочей карты по путям к их файлам, нумерация слоев с единицы
    for i in range(1, doc.Layers.Count + 1):
        M.AddLayer(doc.Layers.Item(i).Name)
    print("Слоев в новой карте:", M.Layers.Count, ", активный:", M.Layers.Active.UserName)
    print("карта сохранена:", M.Saved)
    # Слоя по такому пути нет - исключения в python не будет, слой просто не добавится
    n = M.Layers.Count
    M.AddLayer(r"C:\Data\no_such_layer")
    print("несуществующий слой добавлен:", M.Layers.Count > n)