SetInputCRSProjection method (Layer)

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

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

Layer

Синтаксис:

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 Sub

Python:

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)