www.map-info.ru :: Просмотр темы - MapBasic/Интегрированная картография
                               РќР° главную страницу сайта

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

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



Зарегистрирован: 27.11.2006
Сообщения: 3
Откуда: Moscow

СообщениеДобавлено: Пн Ноя 27, 2006 5:27 pm    Заголовок сообщения: MapBasic/Интегрированная картография Добавить ответ со ссылкой на данный текст

Здравствуйте все!
Извините, я новичок в программировании под mapinfo и я столкнулся со следующей проблемой:

1. Команда
SELECT * FROM Rivers WHERE R_ID=1112 INTO ZoomObject Add Map Layer ZoomObject ,
выполненная в mapbasic-окне mapinfo, делает из слоя Rivers выборку, выделяет ее, записывает в слой ZoomObject и добавляет ZoomObject в текущий workspace.
Однако выполнение команды Visual Basic
MapInfo.Do "SELECT * FROM Rivers WHERE R_ID=1112 INTO ZoomObject Add Map Layer ZoomObject"
такого эффекта не дает: выборка делается, на экране выделяется, создается слой ZoomObject, однако в workspace он не добавляется.
Если кто может, подскажите пожалуйста, что я не учел?

2. Можно уточнить: мне нужно во внешнем приложении, по нажатию кнопки, открыть окно MapInfo, загрузить туда готовый воркспейс, по одному из слоев провести выборку и результат - приблизить (Zoom In). Подскажите пожалуйста, правильно ли я поступаю, или есть какой - либо другой вариант :

SELECT * FROM Rivers WHERE R_ID=1112 INTO ZoomObject
Fetch first From ZoomObject
Set Map Center (CentroidX(ZoomObject.obj),CentroidY(ZoomObject.obj))
Add Map Layer ZoomObject
Set Map Zoom Entire Layer ZoomObject
Remove Map Layer ZoomObject

В MapInfo действительно работает (объект выбирается и приближается), однако при выполнении из Visual Basic с помощью MapInfo.Do "" объект только выбирается, но приближения не происходит.
Если нужно, могу выложить текст программы на VB.

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



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

СообщениеДобавлено: Вт Ноя 28, 2006 1:35 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

По первому вопросу непонятно в какой workspace?

Ваша команда делает выборку под именем "ZoomObject", помещает ее в текущее окно карты с номерм "0" (нет открытой карты, никуда не добавляется), а что такое "workspace"? Если это рабочий набор, то надо сделать команду - "Сохранить в рабочий набор" - Save Workspace As "*****"

по второму объект не приближается, потому, что возможно слой "ZoomObject" не добавился в окно карты или в выборке по вашему условию в него не попал ни один объект. Вы уберите "Remove Map Layer ZoomObject" и проверьте появляется ли в окне карты "ZoomObject" и не пустой ли он?
_________________
Жизнь прекрасна!i
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Egor_J



Зарегистрирован: 27.11.2006
Сообщения: 3
Откуда: Moscow

СообщениеДобавлено: Вт Ноя 28, 2006 3:57 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо за ответ.

По первому вопросу ситуация следующая:
В MapInfo я открываю файл map.wor, который является рабочим набором и загружает вместе с другими файлами файл Rivers.tab, из которого я делаю выборку. После этого я открываю окно mapbasic, ввожу указанную команду и получаю соответствующий результат (в Layer Control появляется новый слой ZoomObject). В Visual Basic я, прежде чем писать запрос, запускаю MapInfo, и загружаю файл .wor командой MapInfo.do "Run application ""c:\mi\map.wor""", потом выполняю запрос MapInfo.Do "SELECT * FROM Rivers WHERE R_ID=1112 INTO ZoomObject Add Map Layer ZoomObject". В результате - выборка на экране выделилась, но слой ZoomObject в Layer Control не появился. Здесь я и заткнулся.

Второй вопрос - расширение первого:
Я убирал "Remove Map Layer ZoomObject", и ZoomObject в окне карты не появлялся (выборка не пустая). Значит, он туда не добавляется.

Спасибо.

Вот код программы на VB:


Sub OpenMap()
Set mapinfo = CreateObject("MapInfo.application")
mapinfo.do "Set Application Window " & Form2.hWnd
mapinfo.do "Set Next Document Parent " & Form2.hWnd & " Style 1"
mapinfo.do "Run application ""c:\mi\map.wor"""
mapinfo.RunMenuCommand 1702

mapinfo.do "Select * From Rivers Where R_ID=1112 Into ZoomObject NoSelect Add Map Layer ZoomObject Fetch first From ZoomObject Set Map Center (CentroidX(ZoomObject.obj),CentroidY(ZoomObject.obj)) Add Map Layer ZoomObject Set Map Zoom Entire Layer ZoomObject"

Form2.Show

End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



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

СообщениеДобавлено: Ср Ноя 29, 2006 8:21 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Мне особенно понравилось вот это:
Egor_J писал(а):
mapinfo.do "Select * From Rivers Where R_ID=1112 Into ZoomObject NoSelect Add Map Layer ZoomObject Fetch first From ZoomObject Set Map Center (CentroidX(ZoomObject.obj),CentroidY(ZoomObject.obj)) Add Map Layer ZoomObject Set Map Zoom Entire Layer ZoomObject"


Если честно я первый раз вижу что все команды MapBasic можно писать так в одну строку! Я бы все-таки рекомендовал разделить их на несколько вызовов mapinfo.do
Т.е. типа:
mapinfo.do "Select * From Rivers Where R_ID=1112 Into ZoomObject NoSelect"
mapinfo.do "Add Map Layer ZoomObject"
mapinfo.do "Fetch first From ZoomObject"
...
Мне кажется проблема именно в этом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Egor_J



Зарегистрирован: 27.11.2006
Сообщения: 3
Откуда: Moscow

СообщениеДобавлено: Ср Ноя 29, 2006 5:23 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо всем за то, что откликнулись!

Проблема оказалась примитивной: в файле *.wor в конце стояло открытие еще одной карты, и mapbasic послушно ее открывал. В visual basic нужно было ее тоже перехватывать, чего я не делал. Как только убрал из файла *.wor указание на вторую карту, все заработало.

По поводу одной строки: в руководстве по mapbasic написано, что все команды, вбиваемые в mapbasic-окно mapinfo, воспринимаются в виде единой строки. Поэтому, если вы разбиваете строку на несколько, в конце каждой необходимо ставить пробел. Иначе у обработчика будет путаница с командами. Я сделал так, как рекомендовало руководство МВ, хотя признаю, что разбиение на отдельные строки является эстетически более правильным.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Чт Фев 01, 2007 12:55 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

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

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


Top.Mail.Ru