Units property (Layer)

Возвращает единицы хранения координат графических данных слоя.

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

Layer

Синтаксис:

Visual Basic:

Property Units As eUnits

read-only

Описание:

Для векторных слоев все элементы хранятся в каких-то одних единицах.

Если проекция слоя не задана (план-схема), единицы хранения - сантиметры.

Если проекция слоя географические-координаты (широта\долгота), единицы хранения - градусы.

Для остальных проекций единицы хранения - метры.

Растровые слои могут содержать объекты с различными единицами хранения.

Так, свойство возвращает 0 (eUnitCentimetre) у план-схем, 1 (eUnitMetre) у слоев в метрах и 3 (eUnitDegree) у слоев в географической системе координат, например WGS 84.

Пример:

Пример показывает единицы слоя и переводит его габариты в метры.

Visual Basic:

Sub Layer_Units
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Единицы хранения координат слоя
U = L.Units
'Множитель перевода в метры, для градусов и пикселов его нет
K = 0
Select Case U
Case 0
  Name = "сантиметры"
  K = 0.01
Case 1
  Name = "метры"
  K = 1
Case 2
  Name = "километры"
  K = 1000
Case 3
  Name = "градусы"
Case 4
  Name = "пикселы"
Case Else
  Name = "неизвестные единицы"
End Select
Set R = L.GetBoundsRectangle
DX = R.Xmax - R.Xmin
DY = R.Ymax - R.Ymin
S = "Слой " & L.UserName & ": " & Name & " (Units = " & U & ")"
S = S & vbCrLf & "габариты в единицах слоя: " & Round(DX, 2) & " по X, " & Round(DY, 2) & " по Y"
If K > 0 Then
  S = S & vbCrLf & "они же в метрах: " & Round(DX * K, 2) & " на " & Round(DY * K, 2)
End If
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_Units():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Единицы хранения координат слоя
    u = L.Units
    names = {0: "сантиметры", 1: "метры", 2: "километры", 3: "градусы", 4: "пикселы"}
    # Множитель перевода в метры, для градусов и пикселов его нет
    k = {0: 0.01, 1: 1.0, 2: 1000.0}
    R = L.GetBoundsRectangle()
    dx = R.Xmax - R.Xmin
    dy = R.Ymax - R.Ymin
    print("Слой", L.UserName, ":", names.get(u, "неизвестные единицы"), "(Units =", u, ")")
    print("габариты в единицах слоя:", round(dx, 2), "по X,", round(dy, 2), "по Y")
    if u in k:
        print("они же в метрах:", round(dx * k[u], 2), "на", round(dy * k[u], 2))