Метод назначает систему координат для входных данных, участвующих в опреациях со слоем, таких как IntersectByContour.
Visual Basic:
Function SetInputCRSProjection(sCRS As String) As Long
sCRS - строковый код системы координат.
Строковый код системы координат представляет собой код по классификатору EPSG (European Petroleum Survey Group). Строка формируется из префикса EPSG: и числового кода, например EPSG:3785. Если заданный код распознается системой, то входящие данные будут восприниматься как данные в указанной системе координат.
Распознанный код дает 0, нераспознанный - -1. Тот же результат получается, если собрать систему объектом ZuluLib.CRS и передать его методу SetInputCRS.
Речь только о координатах, которые передают слою снаружи: контурах, прямоугольниках, точках. Сами данные слоя остаются в своей системе - ее назначает SetCRS.
Если у слоя географическая система, а контур задан в метрах, поиск по нему до назначения возвращает Nothing, а после - находит объекты; контур в градусах при этом перестает находить что-либо. Возвращать прежнюю систему нужно так же явно, вторым вызовом.
Visual Basic:
Sub Layer_SetInputCRSProjection 'Берем активный слой карты 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 'Объявляем входные координаты метрами веб-проекции S = S & vbCrLf & "EPSG:3857 принят: " & L.SetInputCRSProjection("EPSG:3857") S = S & vbCrLf & "тем же контуром: " & L.IntersectByContour(C, 4, 0).Count S = S & vbCrLf & "неизвестный код: " & L.SetInputCRSProjection("EPSG:нет-такого") 'Возвращаем слою его систему L.SetInputCRS Was S = S & vbCrLf & "после возврата: " & L.IntersectByContour(C, 4, 0).Count MsgBox S End SubPython:
import zulu def Macro_Layer_SetInputCRSProjection(): # Берем активный слой карты 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) # Объявляем входные координаты метрами веб-проекции print("EPSG:3857 принят:", L.SetInputCRSProjection("EPSG:3857")) print("тем же контуром:", L.IntersectByContour(c, 4, 0).Count) print("неизвестный код:", L.SetInputCRSProjection("EPSG:нет-такого")) # Возвращаем слою его систему L.SetInputCRS(was) print("после возврата:", L.IntersectByContour(c, 4, 0).Count)