Метод назначает данным, хранящимся в слое, систему координат, описанную в объекте CRS.
Visual Basic:
Function SetCRS(inCRS As CRS) As Long
inCRS - объект, описывающий систему координат.
Следует отметить, что происходит именно назначение для существующих данных системы координат. Никакого преобразования данных из текущей системы координат во вновь заданную не происходит.
Метод возвращает 0 при успехе и -1, если системы нет (например, передали Nothing). Объект системы создается как ZuluLib.CRS и настраивается методом InitByCode: код вида EPSG:4326 дает 0, а неизвестный код - -1. Текущую систему слоя возвращает метод GetCRS.
Координаты объектов при этом не пересчитываются, а только читаются в единицах новой системы: расстояние, которое было записано в сантиметрах плана, после назначения географической системы показывается в градусах.
Пример назначает слою другую систему координат и возвращает прежнюю.
Visual Basic:
Sub Layer_SetCRS 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set Was = L.GetCRS S = "Левый край слоя: " & L.GetBoundsRectangle.Xmin 'Объявляем данные слоя географическими координатами Set C = CreateObject("ZuluLib.CRS") S = S & vbCrLf & "код системы принят: " & C.InitByCode("EPSG:4326") S = S & vbCrLf & "назначение системы: " & L.SetCRS(C) S = S & vbCrLf & "тот же край теперь: " & L.GetBoundsRectangle.Xmin 'Возвращаем слою прежнюю систему L.SetCRS Was S = S & vbCrLf & "после возврата: " & L.GetBoundsRectangle.Xmin MsgBox S End SubPython:
import zulu def Macro_Layer_SetCRS(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active was = L.GetCRS() print("Левый край слоя:", L.GetBoundsRectangle().Xmin) # Объявляем данные слоя географическими координатами c = zulu.CRS() print("код системы принят:", c.InitByCode("EPSG:4326")) print("назначение системы:", L.SetCRS(c)) print("тот же край теперь:", L.GetBoundsRectangle().Xmin) # Возвращаем слою прежнюю систему L.SetCRS(was) print("после возврата:", L.GetBoundsRectangle().Xmin)