Страница 1 из 1
Создать точечные объекты
Добавлено: 30 май 2011, 07:09
lesya_anyone
Доброго времени суток)
Я пишу программу на MapBasic. Столкнулась с проблемой: не могу задать параметры по-умолчанию при создании точечного объекта.
Поясню более понятно... Я открываю файл с регулярной сеткой и из него создаю таблицу MapInfo, для дальнейшей работы с этой таблицей мне требуется создать точечные объекты.
Я конечно могу вывести пользователю стандартный диалог... но нужно сделать все самой... у меня не получается.
Код: Выделить всё
OnError Goto L1
Dim width as integer
Dim s as String
Dim Name as String
width = 30
TxtFilePath = FileOpenDlg("", "", "txt", "Îòêðûòü ôàéë ñ ðåãóëÿðíîé ñåòêîé")
if (TxtFilePath = "") then
Exit Sub
End if
Call CloseTable
is_open_p = 0
s = PathToDirectory$(TxtFilePath)
Name = PathToFileName$(TxtFilePath)
Register Table TxtFilePath TYPE ASCII Delimiter 32 Charset "WindowsCyrillic"
Into "C:/Vodosbor_Data/" + Name + ".TAB"
Open Table "C:/Vodosbor_Data/"+ Name +".TAB" as Ctable Interactive
is_open_p = 1
CurrentTable = TableInfo(0, TAB_INFO_NAME)
Run Menu Command M_TABLE_CREATE_POINTS
Как можно задать параметры самостоятельно, без участия пользователя?
Re: Создать точечные объекты
Добавлено: 30 май 2011, 07:43
SergS
я так понял, Вам нужно что-то написать вместо строки:
Run Menu Command M_TABLE_CREATE_POINTS
тогда, если предположить, что горизонтальная координата (X) во 2-й колонке, а вертикальная(Y) -в 3-й, эти колонки имеют тип Float, либо Decimal, а система координат - "План-Схема", то получится примерно так:
'считаем границы для установки системы координат
Select min(col2), max(col2), min(col3), max(col3)
from CurrentTable
into tmpTable noselect
fetch first from tmpTable
'делаем таблицу MAPPABLE с определением СК
create map for CurrentTable coordsys NonEarth Units ""m"" Bounds (tmpTable.col1, tmpTable.col3) (tmpTable.col2, tmpTable.col4)
close table tmpTable
' устанавливаем текущую СК для программы
set coordsys table CurrentTable
'Здесь просто устанавливаем вид образуемой точки - черный кругляк размером 6 пунктов
Set Style Symbol(34, 0, 6)
' собственно создаем точки
update CurrentTable set obj = createpoint(col2, col3)
'можно сохранить изменения:
commit table CurrentTable
Re: Создать точечные объекты
Добавлено: 30 май 2011, 14:17
lesya_anyone
Да) Спасибо огромное. Это именно то что мне было нужно)
Re: Создать точечные объекты
Добавлено: 30 май 2011, 14:24
lesya_anyone
Можно еще вопросик?)
Допустим, открываю таблицу
Код: Выделить всё
Open Table "C:/Vodosbor_Data/"+ Name +".TAB" as Ctable Interactive
Ей присваивается имя Ctable, потом я с ней работаю, например так (VrezkaVodoem1 - вторая таблица)
Код: Выделить всё
Select Ctable._COL1, Ctable._COL2, Ctable._COL3 from VrezkaVodoem1, Ctable where VrezkaVodoem1.Obj Contains Ctable.Obj into Selection
. . . но есть одно но: эти таблицы отображаются как Ctable, а не Name
я понимаю, что я присваиваю им псевдонимы.. но если их не присваивать, а узнавать его у MapInfo, то у меня не компилируются запросы:
Код: Выделить всё
Dim CurrentTable As String
Open Table "C:/Vodosbor_Data/"+ Name +".TAB" Interactive
CurrentTable = TableInfo(0, TAB_INFO_NAME)
Select CurrentTable.COL1, CurrentTable.COL2, CurrentTable.COL3 from VrezkaVodoem1, CurrentTable where VrezkaVodoem1.Obj Contains CurrentTable.Obj into Selection
Как работать с псевдонимом? не могу найти в документации((((
Re: Создать точечные объекты
Добавлено: 30 май 2011, 15:03
SergS
с ходу вижу 2 пути:
1)
использовать "алиасы", т.е.
(увы, код выделять научиться не удосужился

)
Код: Выделить всё
Dim CurrentTable As String
dim a1, a2, a3, a0 as alias
dim b1,b2, b3, b0 as alias
Open Table "C:/Vodosbor_Data/"+ Name +".TAB" Interactive
CurrentTable = TableInfo(0, TAB_INFO_NAME)
a0=CurrentTable+".Obj"
a1=CurrentTable+".COL1"
a2=CurrentTable+".COL2"
a3="CurrentTable+".COL3"
'на случай, если VrezkaVodoem1 - тоже string
b0=VrezkaVodoem1+".Obj"
Select a1, a2, a3 from VrezkaVodoem1, CurrentTable where b0 Contains a0 into Selection
или, если VrezkaVodoem1- имя таблицы (не переменная), то
Код: Выделить всё
b0=VrezkaVodoem1+".Obj" - не надо
Select a1, a2, a3 from VrezkaVodoem1, CurrentTable where VrezkaVodoem1.Obj Contains a0 into Selection
2)
сформировать команду:
Код: Выделить всё
dim scom as string
scom = "Select " + CurrentTable + ".COL1, " + " CurrentTable + ".COL2, " + CurrentTable + ".COL3 from VrezkaVodoem1, "+ CurrentTable + " where VrezkaVodoem1.Obj Contains " + CurrentTable + ".Obj into Selection"
и выплнить ее:
' это если VrezkaVodoem1 - имя таблицы, а не переменная, в противном случае включаем ее в командную строку аналогично CurrentTable:
Код: Выделить всё
scom = "Select " + CurrentTable + ".COL1, " + " CurrentTable + ".COL2, " + CurrentTable + ".COL3 from " + VrezkaVodoem1 + ", "+ CurrentTable + " where " + VrezkaVodoem1 + ".Obj Contains " + CurrentTable + ".Obj into Selection"
при желании можно и еще поизвращаться

Re: Создать точечные объекты
Добавлено: 30 май 2011, 16:38
Максим Дубинин
SergS писал(а):код выделять научиться не удосужился
это просто, выделить текст - нажать Code
Re: Создать точечные объекты
Добавлено: 30 май 2011, 17:04
lesya_anyone
Спасибо) Помогло)
В извращениях похоже Вы гений..
Re: Создать точечные объекты
Добавлено: 31 май 2011, 12:38
asgs
lesya_anyone писал(а):В извращениях похоже Вы гений..
Сомнительные какие-то у Вас комплименты

Re: Создать точечные объекты
Добавлено: 01 июн 2011, 12:46
lesya_anyone
asgs писал(а):lesya_anyone писал(а):В извращениях похоже Вы гений..
Сомнительные какие-то у Вас комплименты

Ничего плохого я не подразумевала при написании этой фразы)
