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

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

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



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

СообщениеДобавлено: Сб Май 04, 2013 10:50 pm    Заголовок сообщения: Прошу помощи с MapBasic Добавить ответ со ссылкой на данный текст

Изначально есть база данных, в которой описаны встречи с птицами по кварталу, стороне квартала и выделу из этого квартала, и таблица выделов с векторными изображениями этих самых выделов. Программа должна работать по следующему алгоритму:
1.открываем базу данных;

2. читаем таблицу построчно, в строке находим номер квартала и выдела,
в графике через SELECT находим нужный выдел;

3. строим оконтуривающий прямоугольник для выбранного выдела;

4.для объекта MBR (прямоугольник) узнаются координаты узлов, потом находится центр прямоугольника и середины сторон ( это будут точки с направлением на
север-юг-запад-восток).

5. строится отрезок: одна точка - середина прямоугольника, вторая точка зависит от содержимого колонки, в которой указано направление на стороны света;

6. ищем пересечение - отрезка и выдела, координаты точки пересечения - это и есть нужная точка

7. все точки - для каждой строки из xls строим с помощью INSERT в
новую таблицу.

8. результат работы утилиты: таблица с точками, для каждой точки в
колонках описаны все атрибутивные данные.

Код:
Include "mapbasic.def"

Dim rect_mbr, st_sv As Object, x1, x2, y1, y2, x3, y3, cx, cy, centr As Float, r As Integer
Dim sv as alias
Dim tail as string
Dim rect as string
Dim al as alias
Dim videl as string
Dim kvartal as string
Dim storona as string
Dim tab as string
Dim nodes as object
Dim x as float
Dim y as float
Dim p as object

Open Table "БД_птиц" Interactive
Fetch First From БД_птиц
Select J, H From БД_птиц 'Where H = 1
r = TableInfo("БД_птиц",TAB_INFO_NROWS)
Open Table "Выделы" Interactive
While r <= 10725 'пока не закончатся отведённые строки

tab = "выборка"
   al = tab+".H"
   kvartal = al
Select * from Выделы Where Поле2 = videl and Номер_квартала = kvartal 'выборка выдела по стороне квартала
rect_mbr = Str$(Selection.obj)
Add Map Layer Результат
rect_mbr = MBR(Выделы.obj) 'окунтуривающий прямоугольник для выдела
y1 = ObjectGeography(rect_mbr, OBJ_GEO_MINY) 'минимальные и максимальные координаты этого выдела
y2 = ObjectGeography(rect_mbr, OBJ_GEO_MAXY)
x1 = ObjectGeography(rect_mbr, OBJ_GEO_MINX)
x2 = ObjectGeography(rect_mbr, OBJ_GEO_MAXX)
x3 = x2 - x1
y3 = y2 - y1
cx = x1+((x2 - x1)/2) 'координаты центра
cy = y1 + ((y2 - y1)/2)

tail = "выбор"
   sv = tail+".I"

Select * from ".БД_птиц" Where I = tail 'выборка на сторону света

Do Case tail
Case tail = 1
st_sv = "CreateLine (cx, cy, x3, y2)"
Case tail = 2
st_sv = "CreateLine (cx ,cy, x2, y3)"
Case tail = 3
st_sv = "CreateLine (cx, cy, x3, y1)"
Case tail = 4
st_sv = "CreateLine (cx, cy, x1, y3)"
Case tail = 5
st_sv = "CreateLine (cx, cy, x1, y2)"
Case tail = 6
st_sv = "CreateLine (cx, cy, x2, y2)"
Case tail = 7
st_sv = "CreateLine (cx, cy, x2, y1)"
Case tail = 8
st_sv = "CreateLine (cx, cy, x1, y1)"
Case tail = 9
st_sv = "CreateLine (cx, cy, cx, cy)"
End Case
nodes = IntersectNodes(Выделы.obj , st_sv, INCL_CROSSINGS) 'получение точки на пересечении границы выдела и стороны света
x = ObjectNodeX(nodex, 1, 1)
y = ObjectNodeY(nodex, 1, 1)
p = CreatePoint(x, y)
INSERT INTO Результат(obj) values(p)
r = r + 1
Wend



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



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

СообщениеДобавлено: Пн Май 13, 2013 1:52 pm    Заголовок сообщения: Re: Прошу помощи с MapBasic Добавить ответ со ссылкой на данный текст

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



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

СообщениеДобавлено: Пн Май 13, 2013 6:43 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

В начале цикла вижу
tab = "выборка"
однако в коде выше не вижу где открывается таблица "выборка".
Возможно это здесь
Select J, H From БД_птиц 'Where H = 1
но тогда надо писать так:
Select J, H From БД_птиц Into выборка NoSelect
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
sysrepos



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

СообщениеДобавлено: Вт Май 14, 2013 5:26 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

http://gis-lab.info/forum/viewtopic.php?f=17&t=13561&start=15
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

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


Top.Mail.Ru