Появилась интересная задача, которую как я понял можно решить с помощью геометрии. Есть два слоя:
Теплосети
Объекты застройки
Необходимо вывести, либо выделить на графике дома к которым не проведены тепловые сети (отсутствует потребитель?). Например, есть здание, к которому ведут сети:
Скрытый текст
Такие здания нужно исключить, а такие:
Скрытый текст
добавить в список. Есть ли какие-то методы в Zulu API, позволяющие реализовать это?
Появилась интересная задача, которую как я понял можно решить с помощью геометрии. Есть два слоя: Теплосети Объекты застройки Необходимо вывести, либо выделить на графике дома к которым не проведены тепловые сети (отсутствует потребитель?). Например, есть здание, к которому ведут сети: Скрытый текст Такие здания нужно исключить, а такие: Скрытый текст добавить в список. Есть ли какие-то методы в Zulu API, позволяющие реализовать это?
Спасибо.
Код
Const eFullyOutside = 8
Const eSelCreate = 1
Sub IntersectBuildings
'Получаем слой сети
Set L1 = Zulu.ActiveMapDoc.Layers.Item(3)
'Получаем слой зданий
Set L2 = Zulu.ActiveMapDoc.Layers.Item(2)
'Выделяем только потребителей
L1.Selection.ModifyByType eSelCreate, 3, -1
'Ищем среди зданий всех, кто не контачит с потребителями
Set keys = L2.IntersectByLayer(L1, eFullyOutside, false, -1, -1, 1)
'Выделяем результат
For i = 0 to keys.Count - 1
L2.Selection.AddElem(keys.KeyFirst(i))
Next
End Sub
Есть ли какие-то методы в Zulu API, позволяющие реализовать это?
Через SQL
Код
Sub IntersectBuildingsSQL
'Получаем слой зданий
Set L2 = Zulu.ActiveMapDoc.Layers.Item(2)
'Пересекаем два слоя
Set res = Zulu.ActiveMapDoc.ExecSQL ("SELECT L1.sys FROM [Здания] AS L1 LEFT JOIN [Пример квартальной сети] AS L2 ON L1.Geometry.Intersects (L2.Geometry) and L2.typeid = 3 where L2.sys is null", 0)
'Выделяем результат
Set ds = res.DataSet
ds.MoveFirst
Do
If ds.Eof Then Exit Do
L2.Selection.AddElem(CInt(ds.FieldValue(0)))
ds.MoveNext
loop
End Sub