www.map-info.ru :: Просмотр темы - MapInfo & Access
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  
На страницу 1, 2  След.
 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
xax_nv



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

СообщениеДобавлено: Пт Окт 28, 2011 4:12 pm    Заголовок сообщения: MapInfo & Access Добавить ответ со ссылкой на данный текст

Приветствую всех!
Подскажите, как из Access получить координаты углов выделенного в MapInfo полигона? Если можно, пример кода.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vovik



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

СообщениеДобавлено: Вт Ноя 01, 2011 10:35 am    Заголовок сообщения: Re: MapInfo & Access Добавить ответ со ссылкой на данный текст

Пример для Excel
для Access дело техники


Private Sub proc_Sel()
Dim mapinfo As Object
Dim n As Integer, objtype As Integer
Dim S As String, tablica As String
Dim WSheet As Worksheet
'On Error GoTo 1
Set WSheet = ActiveWorkbook.Sheets(1)

Set mapinfo = GetObject(, "MapInfo.Application")
n = Val(mapinfo.eval("SelectionInfo(3)")) '3= SEL_INFO_NROWS
If (n > 1) Or (n = 0) Then Exit Sub
tablica = mapinfo.eval("SelectionInfo(1)") '1 SEL_INFO_TABLENAME

S = "в слое:""" & tablica & """ выбран 1 объект типа "
If InStr(tablica, "Cosmet") > 0 Then S = "в косметическом слое выбран 1 объект типа "

objtype = Val(mapinfo.eval("ObjectInfo(Selection.obj, 1)")) ' 1 = OBJ_INFO_TYPE
With WSheet

Select Case objtype
Case 1: .Cells(1, 1) = S & "дуга"
Case 2: .Cells(1, 1) = S & "элипс"
Case 3: .Cells(1, 1) = S & "линия"
Case 4: .Cells(1, 1) = S & "полилиния"
Case 5: .Cells(1, 1) = S & "точечный"
Case 7: .Cells(1, 1) = S & "регион": Call Schet_U(mapinfo, WSheet)
Case 8: .Cells(1, 1) = S & "прямоугольник"
Case 9: .Cells(1, 1) = S & "скругл.прямоугольник"
Case 10: .Cells(1, 1) = S & "текст"
End Select
End With
Set mapinfo = Nothing
Exit Sub
'1:
Resume Next
End Sub

Sub Schet_U(mapinfo As Object, WSheet As Worksheet)
Dim objnpoly As Integer, counter As Integer, NumPoint As Integer, r As Integer
Dim x As String, y As String
r = 1
With WSheet
r = r + 1
.Cells(r, 1) = "Координыты узлов x/y"

objnpoly = Val(mapinfo.eval("ObjectInfo(Selection.obj, 21)")) '21 -OBJ_INFO_NPOLYGONS число ломаных компонент
counter = Val(mapinfo.eval("ObjectInfo(Selection.obj, 21 + " & objnpoly & ")")) 'кол-во узлов objnpoly - ной
For NumPoint = 1 To counter
x = mapinfo.eval("ObjectNodeX(Selection.obj, 1, " & NumPoint & ")") ' Определяет координату X NumPoint -ного узла
y = mapinfo.eval("ObjectNodeY(Selection.obj, 1, " & NumPoint & ")") ' Определяет координату Y NumPoint -ного узла
r = r + 1
.Cells(r, 1) = "узел " & NumPoint
.Cells(r, 2) = x: .Cells(r, 3) = y
Next

End With
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
xax_nv



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

СообщениеДобавлено: Вт Ноя 01, 2011 4:00 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Vovik, большое спасибо! Буду пробовать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xax_nv



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

СообщениеДобавлено: Ср Ноя 02, 2011 9:49 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Vovik, добрый день! Еще один маленький вопросик. Smile
Как я понимаю, MapInfo хранит координаты в своей системе. У меня план-схема, метры. Как мне получить координаты в моей системе? Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vovik



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

СообщениеДобавлено: Ср Ноя 02, 2011 10:05 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Вопрос не понял.
Приведенный код дает координаты узлов в той системе которая задана и пишет их в соответствующие ячейки книги
и результат у меня выглядит так:
в слое:"Здания" выбран 1 объект типа регион
Координыты узлов x/y
узел 1 53938,97 49594,58
узел 2 53975,77 49588,24
узел 3 53982,11 49623,83
узел 4 53945,64 49630,83
узел 5 53938,97 49594,58


Можно задать параметры карты у меня это задано так:
Set CoordSys Nonearth units "m" Bounds (38000,41000) ( 64000,61000)
Set Distance Units "m"
Смысл этих операторов читай в справке по MapBasic
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
xax_nv



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

СообщениеДобавлено: Ср Ноя 02, 2011 11:25 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Vovik писал(а):

Можно задать параметры карты у меня это задано так:
Set CoordSys Nonearth units "m" Bounds (38000,41000) ( 64000,61000)
Set Distance Units "m"
Смысл этих операторов читай в справке по MapBasic

Смысл понятен, куда и как их вставить в коде? Без них как раз и выдает в своих координатах.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vovik



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

СообщениеДобавлено: Чт Ноя 03, 2011 3:05 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Set CoordSys Nonearth units "m" Bounds (38000,41000) ( 64000,61000)
Set Distance Units "m"
Вставляй в начале процедуры
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
xax_nv



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

СообщениеДобавлено: Чт Ноя 03, 2011 6:58 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Пробовал вставлять так:

Set mapinfo = GetObject(, "MapInfo.Application")
Set CoordSys Nonearth units "m" Bounds (0.1,0.1) ( 40000,40000)
Set Distance Units "m"
- ругается. Чувствую, что с синтаксисом не все в порядке, а как должно быть не соображу. Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vovik



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

СообщениеДобавлено: Пн Ноя 07, 2011 9:19 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Делай так
Set mapinfo = GetObject(, "MapInfo.Application")
mapinfo.Do "Set CoordSys Nonearth units ""m"" Bounds Bounds (0.1,0.1) ( 40000,40000)"
mapinfo.Do "Set Distance Units ""m"""

Короче синтаксис такой
mapinfo.Do string
Метод Do объекта mapinfo интерпретирует строку string как оператор языка MapBasic, и выполняет этот оператор т.е то что записано как string
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
xax_nv



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

СообщениеДобавлено: Пн Ноя 07, 2011 10:50 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Vovik, большое спасибо, все получилось. Так потихоньку и освою MAP-Basic Smile

У меня появился еще вопрос. Как из стороннего приложения создать объект (полигон, точку), сохранив атрибуты. Т.е. имеется таблица с координатами и реквизитами объекта, нужно получить tab файл. Или, если это сложно, как из стороннего приложения сделать импорт mif файла. Т.е., как я понимаю, нужно знать коды команд меню, а где их взять? В справочнике по MAP-Basic'у я не нашел.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xax_nv



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

СообщениеДобавлено: Пн Ноя 07, 2011 1:39 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Проблему с импортом mif-файла решил:

Set mapinfo = CreateObject("MapInfo.Application")
mapinfo.Do "Import ""C:\xxx.mif"" Type ""MIF"" Into ""C:\xxx.TAB"""

Но нарисовалась другая проблема. При работе с MapInfo используются различные наборы pen и fnt, в связи с чем, по стандартному пути этих файлов нет. Вопрос: как при запуске MapInfo "подсунуть" ему файлы pen и fnt?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vovik



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

СообщениеДобавлено: Вт Ноя 08, 2011 5:54 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Как ты знаешь файлы типа pen, fnt хранятся по пути Application
Data\MapInfo\MapInfo\Professional\... при запуске mapinfo эти файлы грузятся именно от туда. Можно иметь сколько угодно файлов pen fnt, с произвольным названием и месте, (только чтобы они называлиль не mapinfo), Если надо подсунуть свои файлы pen, fnt тогда необходимо родные переименовать или переместить в другое место и при загрузке не найдя родного файла программа просит указать какой стиль линий загружать.В одном сеансе можно работать только с одним набором стилей...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
xax_nv



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

СообщениеДобавлено: Вт Ноя 08, 2011 6:21 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Vovik, доброе утро!
Это все я знаю, мы так и работаем. У нас хранятся несколько наборов fnt и pen и при запуске MapInfo пользователь подключает нужный набор. .Я имею в виду, как при запуске MapInfo из Access указать путь к этим файлам, т.е. пользователь не должен делать лишних телодвижений. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vovik



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

СообщениеДобавлено: Вт Ноя 08, 2011 9:03 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Если необходимо делать запуск программы из Access, то все просто: перед запуском MapInfo некая процедура должна "подсовывать" (с тем же именем как и родные) нужные файлы вместо родных путем их временного переименования (перемещения)
Для програмного определения местонахождения файлов используй функцию MapBasic mapinfo.eval("LocateFile$(3)") для PEN и mapinfo.eval("LocateFile$(4)") для FNT
Коды констант смотри в файле MAPBASIC.DEF который как правило находится в C:\Program Files\MapInfo\MapBasic

Обращаю внимание, что строка Set mapinfo = GetObject(, "MapInfo.Application") создает объект действующего (работающего) экземпляра MapInfo.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
xax_nv



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

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

Приветствую всех!
Задачу с импортом координат из MI в Access решил, теперь решаю обратную задачу - по координатам из таблицы Access построить полигон в MI.
Использую следующий код:

Public Sub toMI(strCurrPath)
Dim db As Database, rs As Recordset, mi As Object, i As Integer, nUch As String
Set db = CurrentDb
Set mi = CreateObject("MapInfo.application")
mi.do "Dim obj_region As Object"
mi.do "Set CoordSys Nonearth Units ""m"" Bounds (0.1, 0.1) ( 40000, 40000)"
'mi.do "Set Distance Units ""m"""

strCurrPath = strCurrPath & "\CurUch.TAB"

mi.do "Create Table ""CurUch"" (nUch Char(10)) file " & Chr(34) & strCurrPath & Chr(34) & " TYPE NATIVE Charset ""WindowsCyrillic"""
mi.do "Create Map For CurUch CoordSys NonEarth Units ""m"" Bounds (0.1, 0.1) (40000, 40000)"
'mi.do "Set Distance Units ""m"""
Set rs = db.OpenRecordset("Select * from tblObraz1")
rs.MoveLast
boss = rs.RecordCount
rs.MoveFirst
mi.do "Create Region Into Variable obj_region 0 Pen (2,2, 16711680) Brush (1,0,16777215) Center ( 25587.2975, 14854.555 )"
'16711680
For i = 1 To boss
mi.do "Alter Object obj_region Node Add (" & rs!obr5 & "," & rs!obr4 & ")"
nUch = rs!nUch
rs.MoveNext
Next i
mi.do "Insert Into CurUch (Object,nUch) Values (obj_region," & Chr(34) & nUch & Chr(34) & ")"
mi.do "Commit Table CurUch Interactive"
mi.do "Map From CurUch"

End Sub

Все работает, полигон создается, но есть два вопроса.
1. Если убрать строчку mi.do "Set CoordSys Nonearth Units ""m"" Bounds (0.1, 0.1) ( 40000, 40000)", то полигон "сливается" в одну точку с координатами 40000, 40000. Если из строки mi.do "Create Map For CurUch CoordSys NonEarth Units ""m"" Bounds (0.1, 0.1) (40000, 40000)" убрать CoordSys NonEarth Units ""m"" Bounds (0.1, 0.1) (40000, 40000), то полигон создается в проекции Долгота/Широта. Где ошибка в коде?
2. Центройд созданного полигона находится в 1-й точке, как "заставить" его "занять свое место"?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
На страницу 1, 2  След.
Страница 1 из 2

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


Top.Mail.Ru