www.map-info.ru :: Просмотр темы - Необходима помощь в MapBasic
                               РќР° главную страницу сайта

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

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



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

СообщениеДобавлено: Вс Апр 18, 2010 6:13 pm    Заголовок сообщения: Необходима помощь в MapBasic Добавить ответ со ссылкой на данный текст

Здравствуйте, я еще новичок в этом деле...

Вопрос: я имею некоторую выборку (линии) из таблицы в MapInfo и мне нужно это скопировать на новый слой + при этом опустить уже существующие слои (сделать их невидимыми)... В итоге должен остаться слой моей выборки. Как это реализовать (какая функция)???

PS За ранее спасибо...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Arhara



Зарегистрирован: 18.02.2009
Сообщения: 400
Откуда: Moscow, RF

СообщениеДобавлено: Вс Апр 18, 2010 8:57 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

все операции требуют стандартных процедур, описанных в руководстве и хелпе. естественно, что это набор функций и операторов, а не одна команда.
единственное не описанное место - выборка должна быть сохранена в новый физический файл, или она важна именно как выборка - набо отобранных объектов, которые физически остаются в своем исходном слое?
для реализации надо:
1. получить номер окна карты, в котором выполняете операции
2. получить список его слоев
3. выключить их все (сделать невидимыми или удалить - это на ваш выбор)
4. добавить новый слой - выборку
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Grave



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

СообщениеДобавлено: Вс Апр 18, 2010 9:59 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Вот программка:

Код:


Include "mapbasic.def"
Include "menu.def"
Include "icons.def"

Declare Sub Main

Global col(), i, j, k, m, res1(), res2(), res3(), res4(), N, i1, j1 As Integer
Global a, L, arclen As Float

Sub Main
Print Chr$(12)
N=TableInfo( "Точка" ,  TAB_INFO_NROWS )-1

ReDim col(TableInfo( "Точка" ,  TAB_INFO_NROWS ) )
ReDim res1(N)
ReDim res2(N)
ReDim res3(TableInfo( "Точка" ,  TAB_INFO_NROWS ))
ReDim res4(N)

For k=1 To TableInfo( "Точка" ,  TAB_INFO_NROWS )
   col(k)=k
   res3(k)=0
Next

L=0

For k=1 To N
    arclen=10000
    Fetch First From Путь
    For m=1 To TableInfo( "Путь" ,  TAB_INFO_NROWS )
         If arclen>Путь.Полное_время And col(Путь.Входная_точка)<>col(Путь.Выходная_точка) And res3(Путь.Входная_точка)<2 And res3(Путь.Выходная_точка)<2 Then
   arclen=Путь.Полное_время
   res1(k)=Путь.Входная_точка
   res2(k)=Путь.Выходная_точка
        res4(k)=Путь.ID       
         End If
         Fetch Next From Путь
   Next

res3(res1(k))=res3(res1(k))+1
res3(res2(k))=res3(res2(k))+1

   i1=col(res1(k))
   j1=col(res2(k))
   For m=1 To TableInfo( "Точка" ,  TAB_INFO_NROWS )
        If col(m)=j1 Then
   col(m)=i1
        End If
   Next
   L=L+arclen

Print res1(k)
print res2(k)
print res4(k)
Next
For i=1 To N
Select * From Путь where RowID=res4(i) Into GGG Add Map Layer GGG
Remove Map Layer Путь
Next
End Sub



я добавил цикл:

For i=1 To N
Select * From Путь where RowID=res4(i) Into GGG Add Map Layer GGG
Remove Map Layer Путь

Но на новый слой у меня он переносит только последнюю выбраную линию...
В чем может быть ошибка??? Мне нужно чтобы на новом слое он отобразил от i=1 до N линий...


PS Точка и Путь - это талицы в Mapinfo
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Arhara



Зарегистрирован: 18.02.2009
Сообщения: 400
Откуда: Moscow, RF

СообщениеДобавлено: Ср Апр 21, 2010 12:46 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Код:

For i=1 To N
Select * From Путь where RowID=res4(i) Into GGG
Add Map Layer GGG


вы делаете выборку N раз с разным числом res4(i) в запрос GGG. это все равно, что перелистывать книгу по номеру страницы - в каждый момент времени вы на одной единственной странице, а не на диапазоне страниц.
команда select не делает обобщений. вам нужно создавать промежуточную таблицу, на пример, tempGGG, в которую добавить все ваши res4(i) в поле ID1. И ее потом связать с таблицей Путь через сложный запрос:
Select * From Путь, tempGGG where Путь.RowID=tempGGG.ID1 Into GGG

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



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

СообщениеДобавлено: Пт Апр 23, 2010 6:13 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Arhara, спасибо...

Последнее что мне осталось попробую объяснить в кратце...

У меня есть точки и сетка соединяющая их -



С помощью программы будут соединяться точки на карте с наикратчайшими затратами времени или расстояния (решение задачи коммивояжера) -



Как сделать так, что бы он учитывал не все точки на карте, а только выбранные в РУЧНУЮ точки (например 1,3,4,5)-



В итоге добавить программе интерактивности...

Буду благодарен за любую помощь, последний мой шаг в дипломной работе...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Arhara



Зарегистрирован: 18.02.2009
Сообщения: 400
Откуда: Moscow, RF

СообщениеДобавлено: Сб Апр 24, 2010 11:15 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Текущее выделение в MI стандартно записывается в запрос с именем Selection. Способ выделения роли не играет - вручную или программно он сделан. С помощью функции SelectionInfo можно узнать и имя запроса и исходную таблицу. Для простоты обработки лучше выборку сохранить во временную таблицу. Имя файла для такой таблицы легко получить через функцию TempFileName$( dir ).
Дальше все как обычно. Можно использовать и выборку, она практически не отличается от обычных таблиц, за исключением того, что не может участвовать в пространственных запросах на объединение двух таблиц.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Grave



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

СообщениеДобавлено: Чт Апр 29, 2010 5:32 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Подскажите как создать окно-список (наподобие MultiListBox) , что бы при выборе в нем определенных записей он их выбирал в исходнике и копировал в другую таблицу...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Grave



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

СообщениеДобавлено: Сб Май 01, 2010 10:46 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

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

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


Top.Mail.Ru