Метод назначает систему координат для входных данных, участвующих в опреациях со слоем, таких как IntersectByContour.
Visual Basic:
Function SetInputCRS(inCRS As CRS) As Long
inCRS - объект, описывающий задаваемую систему координат
Метод говорит слою, в какой системе заданы координаты, которые ему передают снаружи: контуры, прямоугольники, точки. Данные самого слоя при этом не трогаются - за них отвечает SetCRS.
Метод возвращает 0 при успехе и -1, если системы нет (например, передали Nothing). Объект системы создается как ZuluLib.CRS и настраивается методом InitByCode; то же самое одной строкой делает SetInputCRSProjection.
Входная система меняет чтение любых передаваемых координат. Если у слоя географическая система, а контур задан в метрах, поиск по такому контуру без назначения входной системы возвращает Nothing - ни ошибки, ни пустой коллекции; после назначения тот же контур находит объекты, а контур в градусах перестает находить что-либо. Возвращать прежнюю систему нужно так же явно.
Пример показывает, как смена входной системы меняет ответ на один и тот же контур, и возвращает слою его собственную систему.
Visual Basic:
Sub Layer_SetInputCRS 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set Was = L.GetCRS Set R = L.GetBoundsRectangle 'Контур по границам слоя, в координатах слоя Set C = CreateObject("ZuluLib.Contour") C.AddPoint R.Xmin, R.Ymin C.AddPoint R.Xmax, R.Ymin C.AddPoint R.Xmax, R.Ymax C.AddPoint R.Xmin, R.Ymax S = "Своя система: найдено " & L.IntersectByContour(C, 4, 0).Count 'Объявляем входные координаты метрами веб-проекции Set Crs = CreateObject("ZuluLib.CRS") Crs.InitByCode "EPSG:3857" S = S & vbCrLf & "SetInputCRS: " & L.SetInputCRS(Crs) S = S & vbCrLf & "тем же контуром: " & L.IntersectByContour(C, 4, 0).Count 'Возвращаем слою его систему L.SetInputCRS Was S = S & vbCrLf & "после возврата: " & L.IntersectByContour(C, 4, 0).Count MsgBox S End SubPython:
import zulu def Macro_Layer_SetInputCRS(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active was = L.GetCRS() R = L.GetBoundsRectangle() # Контур по границам слоя, в координатах слоя c = zulu.Contour() c.AddPoint(R.Xmin, R.Ymin) c.AddPoint(R.Xmax, R.Ymin) c.AddPoint(R.Xmax, R.Ymax) c.AddPoint(R.Xmin, R.Ymax) print("Своя система: найдено", L.IntersectByContour(c, 4, 0).Count) # Объявляем входные координаты метрами веб-проекции crs = zulu.CRS() crs.InitByCode("EPSG:3857") print("SetInputCRS:", L.SetInputCRS(crs)) print("тем же контуром:", L.IntersectByContour(c, 4, 0).Count) # Возвращаем слою его систему L.SetInputCRS(was) print("после возврата:", L.IntersectByContour(c, 4, 0).Count)