SetTileShift method (ITileLayer)

Задает локальный сдвиг при выводе плиток на местности.

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

ITileLayer

Синтаксис:

Visual Basic:

Function SetTileShift(shiftX As Double, shiftY As Double) As Long

shiftX, shiftY - сдвиг в метрах, по модулю не больше 200.

Описание:

Сдвиг предназначен для локальной подгонки плиток к другим данным карты в конкретной рабочей области. Использовать его как универсальную корректировку всей тайловой системы не следует.

Метод возвращает 0, если сдвиг принят, и -1, если он превышает 200 метров. Значение 200 принимается, а 200,001 и 201 — уже нет: ограничение работает по модулю, поэтому -200 принимается, а -201 отвергается. После отказа прежние значения сохраняются, GetShiftX и GetShiftY продолжают отдавать то, что было задано удачным вызовом. Сбрасывается сдвиг вызовом с нулями.

Сдвиг влияет только на вывод плиток: габариты, которые возвращают GetTileBoundsRectangle и GetLevelBoundsRectangle, остаются прежними.

Интерфейс возвращается для любого слоя, а не только для тайлового, поэтому тип слоя следует проверять отдельно: свойство Type должно быть равно eTileLayer (108) для локального слоя или eRemoteTileLayer (109) для слоя на ZuluServer, см. eLayerType.

Пример:

Visual Basic:

Sub ITileLayer_SetTileShift
'Создаем тайловый слой OpenStreetMap
Set Def = CreateObject("ZuluLib.TileLayerDef")
Def.SetCRSCode "EPSG:3857"
Def.SetModel 3
Def.SetQueryTemplateString "http://a.tile.openstreetmap.org/"
Set Tools = CreateObject("ZuluLib.ZuluTools")
Tools.TileLayerCreate "C:\Data\osm.zww", Def
'Открываем его и берем интерфейс тайлового слоя
Set L = CreateObject("ZuluLib.Layer")
L.Open "C:\Data\osm.zww"
Set T = L.TileLayer
s = "Сдвиг 50, -30 принят: " & T.SetTileShift(50, -30) & vbCrLf
s = s & "Стало: " & T.GetShiftX & ", " & T.GetShiftY & vbCrLf
'Больше 200 метров метод не принимает и возвращает -1
s = s & "Сдвиг 1000, 1000 принят: " & T.SetTileShift(1000, 1000) & vbCrLf
s = s & "Осталось: " & T.GetShiftX & ", " & T.GetShiftY
MsgBox s
End Sub

Python:

import zulu

def Macro_ITileLayer_SetTileShift():
    # Создаем тайловый слой OpenStreetMap
    Def = zulu.TileLayerDef()
    Def.SetCRSCode("EPSG:3857")
    Def.SetModel(3)
    Def.SetQueryTemplateString("http://a.tile.openstreetmap.org/")
    zulu.ZuluTools().TileLayerCreate(r"C:\Data\osm.zww", Def)
    # Открываем его и берем интерфейс тайлового слоя
    L = zulu.Layer()
    L.Open(r"C:\Data\osm.zww")
    T = L.TileLayer
    print("Сдвиг 50, -30 принят:", T.SetTileShift(50.0, -30.0))
    print("Стало:", T.GetShiftX(), T.GetShiftY())
    # Больше 200 метров метод не принимает и возвращает -1
    print("Сдвиг 1000, 1000 принят:", T.SetTileShift(1000.0, 1000.0))
    print("Осталось:", T.GetShiftX(), T.GetShiftY())