SetCRS method (MapDoc)

Задает систему координат карты - проекцию, в которой данные отображаются в окне карты.

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

MapDoc

Синтаксис:

Visual Basic:

Function SetCRS(inCRS As CRS) As Long

inCRS - объект, описывающий систему координат.

Описание:

Систему координат можно взять у слоя (Layer.GetCRS), у другой карты (GetCRS) или задать новым объектом CRS, например методом InitByCode. Метод возвращает 0. Объект без системы координат (только что созданный или не прошедший инициализацию) делает карту план-схемой: ProjectionType ее системы координат становится равен 0.

Слои со своей системой координат пересчитываются в систему карты: габариты карты (GetBoundsRectangle) и координаты в окне даются уже в новой системе. Координаты слоев без системы координат (план-схем) не пересчитываются и считаются заданными в новой системе.

Карта при этом не отмечается измененной: свойство Saved остается True. Чтобы система координат сохранилась в файле карты, вызовите метод Save или SaveAs. Назначить систему координат по коду EPSG можно и методом SetCRSByCode.

Пример:

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

Visual Basic:

Sub MapDoc_SetCRS
'Берем рабочую карту и ее активный слой
Set Doc = Zulu.ActiveMapDoc
Set L = Doc.Layers.Active
'Назначаем карте систему координат слоя
Doc.SetCRS L.GetCRS
'Переходим к середине карты в новых координатах
Set B = Doc.GetBoundsRectangle
Doc.GoToXY (B.Xmin + B.Xmax) / 2, (B.Ymin + B.Ymax) / 2
If Doc.GetCRS.GetWkt = "" Then
  MsgBox "У слоя нет системы координат - карта стала план-схемой"
Else
  MsgBox "Карте назначена система координат слоя " & L.UserName
End If
End Sub

Python:

import zulu

def Macro_MapDoc_SetCRS():
    # Берем рабочую карту и ее активный слой
    doc = zulu.App.ActiveMapDoc
    L = doc.Layers.Active
    # Назначаем карте систему координат слоя
    doc.SetCRS(L.GetCRS())
    # Переходим к середине карты в новых координатах
    B = doc.GetBoundsRectangle()
    doc.GoToXY((B.Xmin + B.Xmax) / 2, (B.Ymin + B.Ymax) / 2)
    if doc.GetCRS().GetWkt() == "":
        print("У слоя нет системы координат - карта стала план-схемой")
    else:
        print("Карте назначена система координат слоя", L.UserName)