Находит элемент слоя по указанным координатам местности, если такой существует.
Visual Basic:
Function ElemIDByXY(X As Double, Y As Double) As Long
X, Y - координаты точки на местности.
Метод возвращает ключ найденного элемента, а если рядом с точкой объектов нет — -1.
Точного попадания не требуется: объект находится и тогда, когда точка лежит не на нём, а рядом. Если рядом с точкой несколько объектов, символ находится раньше линии, а линия — раньше площадного объекта, даже когда точка лежит внутри этого площадного объекта; из вложенных друг в друга площадных объектов находится внутренний.
Visual Basic:
Sub Layer_ElemIDByXY 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Точка - центр габаритов слоя Set R = L.GetBoundsRectangle X = (R.Xmin + R.Xmax) / 2 Y = (R.Ymin + R.Ymax) / 2 ElemID = L.ElemIDByXY(X, Y) If ElemID = -1 Then MsgBox "Рядом с центром слоя объектов нет" Else MsgBox "В центре слоя найден объект " & ElemID End If 'Точка далеко за пределами слоя MsgBox "Вдали от слоя: " & L.ElemIDByXY(R.Xmax + (R.Xmax - R.Xmin), R.Ymax) End SubPython:
import zulu def Macro_Layer_ElemIDByXY(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Точка - центр габаритов слоя R = L.GetBoundsRectangle() x = (R.Xmin + R.Xmax) / 2 y = (R.Ymin + R.Ymax) / 2 elem_id = L.ElemIDByXY(x, y) if elem_id == -1: print("Рядом с центром слоя объектов нет") else: print("В центре слоя найден объект", elem_id) # Точка далеко за пределами слоя print("Вдали от слоя:", L.ElemIDByXY(R.Xmax + (R.Xmax - R.Xmin), R.Ymax))