Задает систему координат карты - проекцию, в которой данные отображаются в окне карты.
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 SubPython:
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)