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
|
Программа компилируется, запускается, но единственным результатом является открытая таблица БД_птиц со всеми выделенными колонками. |
|