Создать точечные объекты

MapInfo, MapBasic
Ответить
lesya_anyone
Новоприбывший
Сообщения: 7
Зарегистрирован: 13 мар 2011, 13:04
Репутация: 0

Создать точечные объекты

Сообщение lesya_anyone » 30 май 2011, 07:09

Доброго времени суток)
Я пишу программу на 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
Как можно задать параметры самостоятельно, без участия пользователя?

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Создать точечные объекты

Сообщение SergS » 30 май 2011, 07:43

я так понял, Вам нужно что-то написать вместо строки:
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

lesya_anyone
Новоприбывший
Сообщения: 7
Зарегистрирован: 13 мар 2011, 13:04
Репутация: 0

Re: Создать точечные объекты

Сообщение lesya_anyone » 30 май 2011, 14:17

Да) Спасибо огромное. Это именно то что мне было нужно)

lesya_anyone
Новоприбывший
Сообщения: 7
Зарегистрирован: 13 мар 2011, 13:04
Репутация: 0

Re: Создать точечные объекты

Сообщение lesya_anyone » 30 май 2011, 14:24

Можно еще вопросик?)
Допустим, открываю таблицу

Код: Выделить всё

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
Как работать с псевдонимом? не могу найти в документации((((

SergS
Активный участник
Сообщения: 120
Зарегистрирован: 14 апр 2011, 13:24
Репутация: 5
Откуда: Екатеринбург

Re: Создать точечные объекты

Сообщение SergS » 30 май 2011, 15:03

с ходу вижу 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"
и выплнить ее:

Код: Выделить всё

run command scomm
' это если VrezkaVodoem1 - имя таблицы, а не переменная, в противном случае включаем ее в командную строку аналогично CurrentTable:

Код: Выделить всё

scom = "Select " + CurrentTable + ".COL1, " + " CurrentTable + ".COL2, " + CurrentTable + ".COL3 from " + VrezkaVodoem1 + ", "+ CurrentTable  + " where " + VrezkaVodoem1 + ".Obj Contains " + CurrentTable + ".Obj into Selection"
при желании можно и еще поизвращаться :)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Создать точечные объекты

Сообщение Максим Дубинин » 30 май 2011, 16:38

SergS писал(а):код выделять научиться не удосужился
это просто, выделить текст - нажать Code
пристегивайтесь, турбулентность прямо по курсу

lesya_anyone
Новоприбывший
Сообщения: 7
Зарегистрирован: 13 мар 2011, 13:04
Репутация: 0

Re: Создать точечные объекты

Сообщение lesya_anyone » 30 май 2011, 17:04

Спасибо) Помогло)
В извращениях похоже Вы гений..

Аватара пользователя
asgs
Участник
Сообщения: 89
Зарегистрирован: 04 авг 2010, 06:35
Репутация: 1
Контактная информация:

Re: Создать точечные объекты

Сообщение asgs » 31 май 2011, 12:38

lesya_anyone писал(а):В извращениях похоже Вы гений..
Сомнительные какие-то у Вас комплименты :lol:
Злобный йожег

lesya_anyone
Новоприбывший
Сообщения: 7
Зарегистрирован: 13 мар 2011, 13:04
Репутация: 0

Re: Создать точечные объекты

Сообщение lesya_anyone » 01 июн 2011, 12:46

asgs писал(а):
lesya_anyone писал(а):В извращениях похоже Вы гений..
Сомнительные какие-то у Вас комплименты :lol:
Ничего плохого я не подразумевала при написании этой фразы) :roll:

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя