TakeCRS method (Layer)

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

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

Layer

Синтаксис:

Visual Basic:

Function TakeCRS(SrcLayer As Layer) As Long

SrcLayer - слой с исходной системой координат

Описание:

Следует отметить, что происходит именно назначение для существующих данных системы координат. Никакого преобразования данных из текущей системы координат во вновь заданную не происходит.

Метод возвращает 0 при успехе и -1, если слой-источник не передан (Nothing). Слой, переданный сам себе, тоже дает 0 и ничего не меняет. Это то же самое, что взять систему методом GetCRS у одного слоя и отдать ее методом SetCRS другому.

Координаты объектов при этом не пересчитываются, а только читаются в единицах новой системы: расстояние, которое было записано в сантиметрах плана, после взятия географической системы показывается в градусах.

Пример:

Пример берет систему координат у соседнего слоя карты и возвращает слою прежнюю.

Visual Basic:

Sub Layer_TakeCRS
'Берем карту и её активный слой
Set M = Zulu.ActiveMapDoc
Set L = M.Layers.Active
Set Was = L.GetCRS
S = "Левый край слоя: " & L.GetBoundsRectangle.Xmin
'Ищем на карте другой слой и берем его систему координат
For i = 1 To M.Layers.Count
  Set Src = M.Layers.Item(i)
  If Src.Name <> L.Name Then
    S = S & vbCrLf & "берем систему у слоя: " & Src.UserName
    S = S & vbCrLf & "TakeCRS: " & L.TakeCRS(Src)
    S = S & vbCrLf & "тот же край теперь: " & L.GetBoundsRectangle.Xmin
    Exit For
  End If
Next
'Возвращаем слою его систему
L.SetCRS Was
S = S & vbCrLf & "после возврата: " & L.GetBoundsRectangle.Xmin
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_TakeCRS():
    # Берем карту и её активный слой
    M = zulu.App.ActiveMapDoc
    L = M.Layers.Active
    was = L.GetCRS()
    print("Левый край слоя:", L.GetBoundsRectangle().Xmin)
    # Ищем на карте другой слой и берем его систему координат
    for i in range(1, M.Layers.Count + 1):
        src = M.Layers.Item(i)
        if src.Name != L.Name:
            print("берем систему у слоя:", src.UserName)
            print("TakeCRS:", L.TakeCRS(src))
            print("тот же край теперь:", L.GetBoundsRectangle().Xmin)
            break
    # Возвращаем слою его систему
    L.SetCRS(was)
    print("после возврата:", L.GetBoundsRectangle().Xmin)