Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Линейные операции

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Динар



Зарегистрирован: 28.06.2009
Сообщения: 6

СообщениеДобавлено: Пт 10 Июл 2009 13:44    Заголовок сообщения: Линейные операции Ответить с цитатой

Существует несколько линейных объектов с одинаковым параметром ( скажем объекты: улица, параметр: название улицы). Необходимо их все объеденить в один объект. Попробовал написать скрипт, который копирует вершины линейных объектов и записывает их в первый объект,в итоге получился единый объект с ребрами между двумя объектами, то есть вершины из разный объектов соединились ребром. А необходимо их просто объединить. Как можно удалить ребра? Или как можно реализовать по другому? =)

Код:
option explicit
sub line
application.selection.deselectall
dim MapObjects, wera, adress, i, shape, part, mapobject, x, y, c, j, n1, style, n
set MapObjects = Application.ActiveDb.MapObjects
set style = MapObjects.QueryByLayers("0001000003F7")
do while not style.EOF
  set wera = MapObjects.GetObject(style.objectid)
  adress = wera.SemData.GetValue("Деревушка", "Адрес", 0)
    if (adress = "ул.Горького") then
       application.selection.select style.objectid,0
    end if
 style.MoveNext
loop

n = application.selection.ids (0)

 for i=1 to application.selection.count-1
 n1 = application.selection.ids (i)
    set mapobject = mapobjects.getobject(n1)
  for each shape in mapobject.shapes
     for each part in shape.contour
        for j=0 to mapobject.shapes.item(0).contour.item(0).vertexcount-1
                   mapobject.shapes.item(0).contour.item(0).sgetvertex  j, x, y, c
                   MapObjects.GetObject(n).shapes.item(0).contour.item(0).insertvertex j,x,y,c
         next
      next
  next
next
MapObjects.UpdateChanges
end sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Алексей В. Бастриков



Зарегистрирован: 02.06.2008
Сообщения: 118
Откуда: ООО "Инфопроект", г. Екатеринбург

СообщениеДобавлено: Вс 12 Июл 2009 13:35    Заголовок сообщения: Ответить с цитатой

Добавляйте в пополняемый объект новые контуры, и используйте для данных контуров функцию addPartsFrom. См. справку, там эта функция есть.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Динар



Зарегистрирован: 28.06.2009
Сообщения: 6

СообщениеДобавлено: Пн 13 Июл 2009 01:30    Заголовок сообщения: Ответить с цитатой

Алексей В. Бастриков писал(а):
Добавляйте в пополняемый объект новые контуры, и используйте для данных контуров функцию addPartsFrom. См. справку, там эта функция есть.


огромное спасибо, Алексей. все заработало =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Динар



Зарегистрирован: 28.06.2009
Сообщения: 6

СообщениеДобавлено: Чт 16 Июл 2009 01:13    Заголовок сообщения: Ответить с цитатой

еще вопрос: как из существующей таблицы легче всего выбрать одинаковые и непустые значения полей одного поля?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Динар



Зарегистрирован: 28.06.2009
Сообщения: 6

СообщениеДобавлено: Пт 17 Июл 2009 01:29    Заголовок сообщения: Ответить с цитатой

посоветовали использовать sql запросы, но пока не могу разобраться, может подскажете кто знает?
задача стоит следующая: нужно объеденить объекты у которых совпадают значения в определенном поле семантической таблицы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Алексей В. Бастриков



Зарегистрирован: 02.06.2008
Сообщения: 118
Откуда: ООО "Инфопроект", г. Екатеринбург

СообщениеДобавлено: Пн 20 Июл 2009 20:27    Заголовок сообщения: Ответить с цитатой

Что касается sql, можно поступить так:
set DataSet = SemTable.SemDbTable.SelectData("ID", "Поле='" & Значение & "'", null)
while not DataSet.EOF
ObjectID = DataSet.Fields.Item("ID").Value
DataSet.MoveNext
wend
При объединении объектов нужно учитывать стили их форм, а также то, что они могут принадлежать разным слоям, тогда будет посложнее...
Читайте внимательно справку Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB