www.map-info.ru :: Просмотр темы - Объединение и преобразование полилиний в полигон.
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
xax_nv



Зарегистрирован: 28.10.2011
Сообщения: 43
Откуда: г. Нижневартовск

СообщениеДобавлено: Вс Май 13, 2012 1:10 pm    Заголовок сообщения: Объединение и преобразование полилиний в полигон. Добавить ответ со ссылкой на данный текст

Приветствую всех!
Опять обращаюсь за помощью.

Вот такой код срабатывает нормально.
mi.Do "Select * From " & TableName & " where nUch=""86:11:0102002:168"""
Если заменяю значение переменной ее переменной, т.е.:
mi.Do "Select * From " & TableName & " where nUch="" & knUch & """
то получаю ошибку:
"К выборке (Selection) нельзя обращаться, как к таблице."
В чем причина?

Далее я объединяю полилинии и мне нужно преобразовать объединенные полилинии в полигон.
mi.Do "Objects Combine Data nUch=nUch,nPoint=nPoint"
mi.Do "Commit Table " & TableName
mi.Do "obj_region=ConvertToRegion(obj_pline)"
mi.Do "Insert Into " & TableName & " (Object,nUch) Values (obj_region," & Chr(34) & knUch & Chr(34) & ")"
mi.Do "Commit Table " & TableName
При проверке на двух полилиниях в результате выполнения кода в полигон пеобразуется только одна полилиния, хотя они предварительно были объединены.
И еще. Как, не занося полигон как новый объект, существующий объек полилиния превратить в область?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SergS



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

СообщениеДобавлено: Пн Май 14, 2012 6:18 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

1.
странно, что компилятор пропустил строку:
mi.Do "Select * From " & TableName & " where nUch="" & knUch & """

здесь должно быть так:
mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"

2.
расширьте пример, не видно формирований значений переменных obj_region и obj_pline, поэтому сказать что-нить на вопрос трудно

3.
существующий в таблице?
считываете номер текущей записи:
mi.Do "dim irow as integer"
mi.Do "irow = " & TableName & ".rowid"
Преобразуете объект для текущей записи
mi.Do "update " & TableName & " set obj = ConvertToRegion(obj) where rowid = irow"
mi.Do "undim irow"

место размещения dim и undim для irow сами выберите Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xax_nv



Зарегистрирован: 28.10.2011
Сообщения: 43
Откуда: г. Нижневартовск

СообщениеДобавлено: Пн Май 14, 2012 7:25 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Сергей, добрый день! Спасибо за помощь.
Да, с кавычками я что-то "протупил". Smile
Вот более полный фрагмент кода:


Код:

        Set mi = CreateObject("MapInfo.application")
        mi.Do "Dim obj_region As Object, obj_point As Object, obj_pline As Object"
        mi.Do "Set CoordSys Nonearth Units ""m"" Bounds " & MinMax
        mi.Do "Set Distance Units ""m"""

        TableName = "UchXML"
        strCurrPatch = strCurrPatch & "\" & TableName & ".TAB"

        mi.Do "Create Table " & TableName & " (nUch Char(20), nPoint Char(20)) file " & Chr(34) & strCurrPatch & Chr(34) & " TYPE NATIVE Charset ""WindowsCyrillic"""
        mi.Do "Create Map For " & TableName & " CoordSys NonEarth Units ""m"" Bounds " & MinMax
        mi.Do "Set Distance Units ""m"""

       Set rs1 = db.OpenRecordset("SELECT tblUch.kadnum FROM tblUch GROUP BY tblUch.kadnum;")
       rs1.MoveLast
       boss1 = rs1.RecordCount
       rs1.MoveFirst

       For i = 1 To boss1

          Set rs2 = db.OpenRecordset("SELECT tblUch.kadnum, Max(tblUch.kontur) AS [MaxKontur] FROM tblUch GROUP BY " _
          & "tblUch.kadnum HAVING tblUch.kadnum = '" & rs1.kadNum & "'")

          For j = 1 To rs2!MaxKontur

            Set rs3 = db.OpenRecordset("SELECT tblUch.* FROM tblUch Where tblUch.kadnum = '" & rs1.kadNum & "' and tblUch.kontur = " & j & "" _
            & " ORDER BY tblUch.id;")
            rs3.MoveLast
            boss3 = rs3.RecordCount
            rs3.MoveFirst
            knUch = rs3!kadNum

           mi.Do "Create Pline Into Variable obj_pline 0 Pen (2,2, 16711680)"

              For k = 1 To boss3
                 nPoint = rs3!ng
                 mi.Do "Create Point Into Variable obj_point (" & rs3!Y & "," & rs3!X & ") Symbol (35,0,4,""Map Symbols"",0,0)  "
                 mi.Do "Insert Into " & TableName & " (Object, nPoint) Values (obj_point," & Chr(34) & nPoint & Chr(34) & ")"
                 mi.Do "Alter Object obj_pline Node Add (" & rs3!Y & "," & rs3!X & ")"
                 rs3.MoveNext
             Next k

          mi.Do "Insert Into " & TableName & " (Object,nUch) Values (obj_pline," & Chr(34) & knUch & Chr(34) & ")"
          mi.Do "Commit Table " & TableName

          Next j
   
          mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"
          mi.Do "Objects Combine Data nUch=nUch,nPoint=nPoint"

          mi.Do "Commit Table " & TableName

          mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"

          mi.Do "dim irow as integer"
          mi.Do "irow = " & TableName & ".rowid"
          mi.Do "update " & TableName & " set obj = ConvertToRegion(obj) where rowid = irow"
          mi.Do "undim irow"

          mi.Do "Commit Table " & TableName
          mi.Do "Map From " & TableName
   
          rs1.MoveNext
       Next i

Вставил Ваш фрагмент кода, но преобразование полилинии в область не происходит. Видимо предварительно нужно встать на нужную строку в таблице. А как, не знаю.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SergS



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

СообщениеДобавлено: Пн Май 14, 2012 8:04 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

а-а-а, ну конечно...

замените фрагмент:

mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"

mi.Do "dim irow as integer"
mi.Do "irow = " & TableName & ".rowid"
mi.Do "update " & TableName & " set obj = ConvertToRegion(obj) where rowid = irow"
mi.Do "undim irow"


следующим:

mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """ into временная_таблица_sel noselect"
mi.Do "update временная_таблица_sel set obj = ConvertToRegion(obj)"
mi.Do "close table временная_таблица_sel"

здесь предполагается, что select c where nUch=""" & knUch & """
выберет 1 запись, и выборка временная_таблица_sel будет ее содержать. Обновляем всю таблицу "временная_таблица_sel" и все.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xax_nv



Зарегистрирован: 28.10.2011
Сообщения: 43
Откуда: г. Нижневартовск

СообщениеДобавлено: Пн Май 14, 2012 8:15 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Сергей, огромное спасибо! Все получилось!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

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


Top.Mail.Ru