RUS  ENG 

Дома без сетей

Страницы: 1
RSS
Дома без сетей
 
Добрый день!

Появилась интересная задача, которую как я понял можно решить с помощью геометрии.
Есть два слоя:
  • Теплосети
  • Объекты застройки
Необходимо вывести, либо выделить на графике дома к которым не проведены тепловые сети (отсутствует потребитель?).
Например, есть здание, к которому ведут сети:
Скрытый текст
Такие здания нужно исключить, а такие:
Скрытый текст
добавить в список.
Есть ли какие-то методы в Zulu API, позволяющие реализовать это?

Спасибо.
Изменено: Георгий Дорохов - 22.10.2019 08:59:51
 
Можно воспользоваться функцией Карта/Запрос/Пересечь со слоем.
Online справка

Если необходимо произвести запись табличных данных из одного слоя в другой воспользуйтесь запросами SQL
Примеры работы в программе
Видеоурок
 
Цитата
Георгий Дорохов написал:
Добрый день!

Появилась интересная задача, которую как я понял можно решить с помощью геометрии.
Есть два слоя:
Теплосети
Объекты застройки
Необходимо вывести, либо выделить на графике дома к которым не проведены тепловые сети (отсутствует потребитель?).
Например, есть здание, к которому ведут сети: Скрытый текст Такие здания нужно исключить, а такие: Скрытый текст добавить в список.
Есть ли какие-то методы в 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
 
Это именно то, что я искал. Огромная благодарность за предоставленные примеры.
Страницы: 1