SetInputCRS method (Layer)

Метод назначает систему координат для входных данных, участвующих в опреациях со слоем, таких как IntersectByContour.

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

Layer

Синтаксис:

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 Sub

Python:

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)