Возвращает единицы хранения координат графических данных слоя.
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 SubPython:
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))