Глава 24: Использование окна MapBasic
Синтаксис:
CreateLine( x1 , y1, x2 , y2 )
ãäå
x1 – X-координата начальной точки линии (или долгота), действительное число; y1 – Y-координата начальной точки линии (или широта), действительное число; x2 – X-координата конечной точки линии, действительное число;
y2 – Y-координата конечной точки линии, действительное число.
Величина, полученная в результате:
Величина типа Object.
Описание:
Функция возвращает объект типа "прямая линия".
Параметры x и y задают координаты концов отрезка прямой линии в той координатной системе, которая была объявлена MapBasic ранее. (Смотрите описание оператора Set CoordSys). Если система не объявлялась, то координаты будут принимать значения широты и долготы. При этом надо учесть, что MapBasic игнорирует координатную систему самого окна Карты.
Функция при создании объекта будет использовать стиль линии, назначаемый оператором Set Style, который выполняется до функции CreateLine( ). Вы можете воспользоваться для создания объекта "прямая линия" оператором Create Line, в котором есть предложение Pen для задания стиля линии.
Графический объект, созданный функцией CreateLine( ), может быть присвоен объектной переменной, которая определяет значение уже существующей строки в таблице (оператор Update) или вновь созданной (оператор Insert).
Замечание: Перед созданием объекта в окне Отчета не забудьте выполнить оператор Set CoordSys Layout.
Функция CreatePoint( )
Назначение:
Возвращает объект типа "точка".
Синтаксис:
CreatePoint(x, y)
ãäå
x – X-координата точки (или широта), вещественное число; y – Y-координата точки (или долгота), вещественное число.
Величина, полученная в результате:
Точка. Величина типа Object.
Описание:
Функция CreatePoint( ) возвращает объект типа "точка".
Глава 24: Использование окна MapBasic
Параметры x и y задают координаты центра окружности в той координатной системе, которая была объявлена MapBasic ранее. Смотрите описание оператора Set CoordSys. Если система не объявлялась, то координаты будут принимать значения широты и долготы. При этом надо учесть, что MapBasic игнорирует координатную систему самого окна Карты.
Точечный объект будет создаваться в соответствии с установкой стиля символа для точечных объектов в операторе Set Style, который надо выполнить до функции CreatePoint( ). Вы можете также воспользоваться для создания объекта оператором Create Point, в котором используется предложение Symbol для определения стиля символа точки.
Графический объект, созданный функцией CreateLine( ), может быть присвоен объектной переменной, которая определяет значение уже существующей строки в таблице (оператор Update) или вновь созданной (оператор Insert).
Замечание: Перед созданием объекта в окне Отчета не забудьте выполнить оператор Set CoordSys Layout.
Функция CreateText( )
Назначение
Возвращает текстовый объект, созданный в определенном окне Карты.
Синтаксис
CreateText(window_id , x , y , text , angle , anchor , offset)
window_id – целочисленный идентификатор окна Карты;
x , y – координаты, задающие закрепленное положение подписи;
text – строка с текстом подписи, представляющим текстовый объект;
angle – угол поворота подписи в градусах; для горизонтального текста он равен нулю;
anchor – целое число типа Integer от 0 до 8, контролирующее расположение подписи относительно места привязки. Ниже перечислены возможные значения кодов.
Позиция подписи |
Целочисленный код |
|
|
По центру |
0 |
|
|
Сверху слева |
1 |
|
|
Сверху по центру |
2 |
|
|
Сверху справа |
3 |
|
|
По центру слева |
4 |
|
|
По центру справа |
5 |
|
|
Снизу слева |
6 |
|
|
Снизу по центру |
7 |
|
|
Глава 24: Использование окна MapBasic
offset – целое число от 0 до 50, расстояние в точках от подписи до точки привязки на подписываемом объекте; offset игнорируется, если значение кода привязки равно 0.
Величина, полученная в результате
Величина типа Object
Описание
Функция CreateText( ) возвращает величину типа Object, являющейся текстовым объектом.
Текстовый объект использует текущий стиль текста. Для создания текстового объекта с определенным стилем, используйте оператор Set Style перед CreateText( ).
В тот момент, когда текст создан, его высота контролируется размером текущего шрифта. Таким образом, после создания текстового объекта его высота зависит от размера окна Карты; изменение масштаба ведет к соответственному изменению размера текста.
Возвращаемый объект имеет тип Object и сохраняется в существующей строке таблицы (используя оператор Update) или вставляется в новую строку таблицы (используя оператор Insert).
Оператор Insert
Назначение:
Добавляет новую строку в открытую таблицу.
Синтаксис:
Insert Into table [ (columnlist) ]
{ Values (exprlist) | Select columnlist From table}
ãäå
table – имя открытой таблицы; columnlist – список выражений;
exprlist – одно выражение или список, разделенный запятыми.
Описание:
Оператор Insert вставляет новую строку в открытую таблицу. Этот оператор применяется в двух формах, позволяющих либо добавлять таблице по одной строке, либо добавлять группы строк из другой таблицы. В каждом случае порядок и количество значений в списке exprlist, которые будут вставлены в поля новой строки, должны соответствовать колонкам, перечисленным в списке columnlist. Если колонки не перечислены, то будут рассматриваться все поля в новой строке. Если Вы хотите сохранить таблицу с новыми строками на диске, то после ввода используйте оператор Commit Table.
Если Вы точно знаете, сколько колонок в таблице, и если Вам уже известно, какие именно величины в какие поля надо поместить, то можно опустить предложение
Глава 24: Использование окна MapBasic
(columnlist). Достаточно составить список величин в порядке расположения полей в таблице. В следующем примере результатом оператора будет новая строка в таблице, состоящей из четырех колонок (Èìÿ, Адрес, Город, Область), и каждому полю будет определено значение:
Insert Into customers
Values ("Мария Павловна Носова", "ул. Солнечная, 2, 23", "Троицк", "Московская")
Результатом этого оператора может быть ошибка, если таблица будет иметь больше или меньше колонок, чем четыре. Если Вы не знаете точно, сколько колонок составляют таблицу, или не знаете, в каком порядке расположены колонки в таблице, необходимо в операторе использовать список имен колонок (columnlist).
Следующий оператор создает новую строку со значением в поле "Èìÿ". Для успешного выполнения оператора необязательно знать, сколько всего полей в структуре таблицы.
Insert Into customers ( Èìÿ )
Values ("Степан Иванович Гарин")
Следующий оператор создает точечный объект и вставляет его в поле "Obj" новой записи в таблице SITES. Таким образом, мы создаем новую чистую запись с присоединенным точечным объектом.
Insert Into sites (Obj)
Values ( CreatePoint(-73.5, 42.8) )
Следующий пример иллюстрирует, как оператором Insert можно добавить запись в таблицу, используя запись из другой. Допустим, что в таблице NY_ZIPS содержатся ZIP-коды штата Нью-Йорк и в таблице NJ_ZIPS содержатся ZIP-коды штата НьюДжерси. Добавим все ZIP-коды из одной таблицы в другую. Такая операция иногда необходима для поиска, так как оператор Find может работать только с одной таблицей.
Insert Into NY_ZIPS
Select * From NJ_ZIPS
В следующем примере берутся все объекты из таблицы WORLD и каждый подсоединяется к новой строке таблицы OUTLINE.
Open Table "world"
Open Table "outline"
Insert Into outline (Obj)
Select Obj From World
Оператор Note
Назначение:
Показывает сообщение в простом диалоговом окне.
Синтаксис:
Глава 24: Использование окна MapBasic
Note message
ãäå
message – выражение, результат которого будет показан в окне.
Описание:
Оператор Note создает простое диалоговое окно сообщений, сопровождающееся одной кнопкой ОК.
Параметр message может быть выражением, не обязательно строковым. Если в результате вычисления выражения message получается величина объектного типа (Object), MapBasic автоматически преобразует его в строку (так как это делает функция Str$( )). Это строковое представление и будет выведено в диалоговом окне сообщений. Если message – строка, то максимальная длина должна быть не более 300 символов и может занимать только 6 строк.
Пример:
Note ”Hello World.”
Функция ObjectGeography( )
Назначение:
Возвращает информацию о графическом объекте, определяющую его расположение.
Синтаксис:
ObjectGeography(object, attribute)
ãäå
object – объектное выражение;
attribute – целочисленный код, определяющий результат функции.
Величина, полученная в результате:
Вещественное число. Величина типа Float.
Описание:
Функция ObjectGeography( ) возвращает информацию об определенных координатах и угловых величинах географических объектов. Координатами могут быть координаты точечного объекта или начальной точки прямой линии, минимальные или максимальные координаты объектов. А угловыми величинами – начальный и конечный углы дуги, угол поворота текста.
Параметр attribute должен принимать значения целочисленного кода, управляющего типом возвращаемой функцией информации. В следующей таблице в первой колонке приводятся имена кодов для функции ObjectGeography( ), которые установлены в файле стандартных определений MapBasic MAPBASIC.DEF.
|
Значения attribute |
Результат функции (Величина типа Float) |
|
OBJ_GEO_MINX |
Минимальная X-координата минимального |
|
прямоугольного покрытия объекта, если его тип не |
|
|
|
|
“линия”. Иначе возвратится значение, равное |
|
|
OBJ_GEO_LINEBEGX. |
Глава 24: Использование окна MapBasic
|
Значения attribute |
Результат функции (Величина типа Float) |
|
OBJ_GEO_MINY |
Минимальная Y-координата минимального |
|
прямоугольного покрытия объекта, если его тип не |
|
|
|
|
“линия”. Иначе возвратится значение, равное |
|
|
OBJ_GEO_LINEBEGY. |
|
OBJ_GEO_MAXX |
Максимальная X-координата объекта или его |
|
минимального прямоугольного покрытия. Код не |
|
|
|
|
применим для объекта типа "точка". Для линий |
|
|
возвращается значение, равное OBJ_GEO_LINEENDX. |
|
OBJ_GEO_MAXY |
Максимальная Y-координата объекта или его |
|
минимального прямоугольного покрытия. Код не |
|
|
|
|
применим для объекта типа "точка". Для линий |
|
|
возвращается значение, равное OBJ_GEO_LINEENDY. |
|
OBJ_GEO_ARCBEGANGLE |
Начальный угол дуги. Только для объекта типа "дуга". |
|
OBJ_GEO_ARCENDANGLE |
Конечный угол дуги. Только для объекта типа "дуга". |
|
OBJ_GEO_LINEBEGX |
X-координата начальной точки прямой линии. Только для |
|
объекта типа "линия". |
|
|
|
OBJ_GEO_LINEBEGY |
Y-координата начальной точки прямой линии. Только для |
|
объекта типа "линия". |
|
|
|
OBJ_GEO_LINEENDX |
X-координата конечной точки прямой линии. Только для |
|
объекта типа "линия". |
|
|
|
OBJ_GEO_LINEENDY |
Y-координата конечной точки прямой линии. Только для |
|
объекта типа "линия". |
|
|
|
OBJ_GEO_POINTX |
X-координата точечного объекта. |
|
OBJ_GEO_POINTY |
Y-координата точечного объекта. |
|
OBJ_GEO_ROUNDRADIUS |
Диаметр окружности, которую можно вписать в |
|
закругление угла объекта типа "скругленный |
|
|
|
|
прямоугольник". Результат выдается в текущих |
|
|
координатных единицах (например, в градусах). |
|
OBJ_GEO_TEXTLINEX |
X-координата конца строки в текстовом объекте. |
|
OBJ_GEO_TEXTLINEY |
Y-координата конца строки в текстовом объекте. |
|
OBJ_GEO_TEXTANGLE |
Угол поворота текстового объекта. |
Глава 24: Использование окна MapBasic
Функция ObjectInfo( )
Назначение:
Возвращает стиль линии, штриха и другие величины, описывающие графический объект, а также его тип.
Синтаксис:
ObjectInfo(object, attribute)
ãäå
object – выражение, результат которого есть величина типа Object; attribute – целочисленный код, определяющий результат функции.
Величина, полученная в результате:
Тип величины может быть SmallInt, Integer, String, Float, Pen, Brush, Symbol или Font в зависимости от значения параметра attribute.
Описание:
Функция ObjectInfo( ) возвращает основную информацию о графическом объекте, заданном параметром object. Объект может быть задан объектной переменной или выражением в формате tablename.obj (где tablename – имя таблицы, к которой присоединен объект).
Каждый объект обладает некоторыми атрибутами. Например, атрибутом является тип объекта – это область, линия, дуга и т. д. Объекты определенных типов могут обладать различными наборами других атрибутов – стилей. Ими являются величины типа Pen, Brush и др. Функция ObjectInfo( ) может возвращать значения этих атрибутов.
Возвращаемое значение зависит от того, каким задан параметр attribute.
Параметр attribute должен принимать значения целочисленного кода. В следующей таблице в первой колонке приводятся имена кодов для функции ObjectGeography( ), которые установлены оператором Define в файле стандартных определений MapBasic MAPBASIC.DEF. Для того, чтобы использовать имена кодов, Ваша программа в начале должна иметь оператор Include "MAPBASIC.DEF".
|
Значения attribute |
Результат функции |
|
OBJ_INFO_TYPE |
Целое число типа SmallInt, определяющее тип объекта |
|
(смотрите вторую таблицу). |
|
|
|
OBJ_INFO_PEN |
Величина типа Pen. Стиль линии для объектов типа |
|
"дуга", "эллипс", "линия", "полилиния", "рамка", |
|
|
|
|
"область", "прямоугольник" и "сглаженный |
|
|
прямоугольник". |
|
OBJ_INFO_BRUSH |
Величина типа Brush. Стиль штриховки объектов типа |
|
"эллипс", "рамка", "область", "прямоугольник" и |
|
|
|
|
"сглаженный прямоугольник". |
|
OBJ_INFO_TEXTFONT |
Величина типа Font. Стиль шрифта текстового объекта. |
|
Замечание: Если текстовый объект принадлежит |
|
|
|
|
таблице (а не Отчету), то размер шрифта равен нулю, а |
|
|
размер шрифта динамически определяется MapInfo в |
|
|
зависимости от размера окна Карты. |
Глава 24: Использование окна MapBasic
Значения attribute
OBJ_INFO_SYMBOL
OBJ_INFO_NPNTS
OBJ_INFO_SMOOTH
OBJ_INFO_FRAMEWIN
OBJ_INFO_FRAMETITLE
OBJ_INFO_NPOLYGONS
OBJ_INFO_NPOLYGONS+N
OBJ_INFO_TEXTSTRING
OBJ_INFO_TEXTSPACING
OBJ_INFO_TEXTJUSTIFY
OBJ_INFO_TEXTARROW
OBJ_INFO_FILLFRAME
Результат функции
Величина типа Symbol. Стиль символа точечного объекта.
Величина типа Integer. Число узлов в полилинии или в многоугольнике области.
Величина типа Logical. Признак сглаженности объекта типа "полилиния".
Величина типа Integer. Идентификатор окна, присоединенного к объекту типа "рамка".
Величина типа String с заголовком рамки.
Величина типа SmallInt. Число полигонов в объекте типа "область" или число ломаных, из которых состоит объект типа "полилиния".
Величина типа Integer. Число узлов в n-ом полигоне в объекте типа "область" или число узлов в N-ой ломаной линии, являющейся компонентой объекта типа "полилиния".
Замечание: для объектов типа "область" число узлов многоугольника будет на единицу больше, чем число вершин у многоугольника, потому что MapInfo считает первый узел дважды (один раз как первый узел и второй раз как последний узел). Так, функция ObjectInfo( ) возвращает 4 для треугольной монокомпонентной области.
Величина типа String. Текстовое содержимое объекта типа "текст". Если объект состоит из нескольких строк, то результат будет включать символ конца строки (Chr$(10)).
Вещественное число 1, 1.5 или 2, определяющее интерлиньяж в текстовом объекте.
Число типа SmallInt, определяющее выравнивание текста:
0 – по левому краю,
1 – по центру,
2 – по правому краю.
Число типа SmallInt, определяющее стиль указки в текстовом объекте:
0 – нет указки,
1 – просто линия,
2 – стрелка.
Величина типа Logical. “Да” (TRUE), если объект типа “рамка” показывает Карту и для него установлен режим “Заполнить Рамку Картой”.
Заметим, что некоторые значения для параметра attribute могут адресоваться объектам определенного типа. Например, значение стиля символа может быть определено только для объекта типа "точка".
Если Вы используете код OBJ_INFO_TYPE как значение параметра attribute, то функция ObjectInfo( ) вернет код, соответствующий типу графического объекта. В следующей таблице приведены имена этих кодов из файла стандартных определений.
544
|
|
Глава 24: Использование окна MapBasic |
|
|
|
|
|
Код объекта |
Соответствующий тип объекта |
|
OBJ_ARC |
Äóãà |
|
|
|
|
|
OBJ_ELLIPSE |
Эллипс или окружность |
|
|
|
|
OBJ_LINE |
Прямая линия |
|
|
|
|
OBJ_PLINE |
Полилиния |
|
|
|
|
OBJ_POINT |
Точечный объект |
|
|
|
|
|
OBJ_FRAME |
Рамка в окне Отчета |
|
|
|
|
|
OBJ_REGION |
Область |
|
|
|
|
OBJ_RECT |
Прямоугольник |
|
|
|
|
OBJ_ROUNDRECT |
Скругленный прямоугольник |
|
|
|
|
OBJ_TEXT |
Текстовый объект |
|
|
|
|
Оператор Print
Назначение:
Печатает пояснительный текст или текст сообщения из программы в окне "Сообщение".
Синтаксис:
Print message
ãäå
message – строковая величина.
Описание:
Оператор Print используется для вывода текста в окне "Сообщение".
Это окно является одним из вспомогательных окон в MapInfo и предназначено для вывода информации из программ, написанных на MapBasic. Эти сообщения можно использовать для комментирования действий программы без ее остановки. Например, "Запись удалена".
Программа MapBasic может перед выполнением оператора Print открыть окно сообщений, используя оператор Open Window, и назначить шрифт для текста, размер окна и положение его на экране при помощи оператора Set Window. Если оператор Print выполняется, когда окно сообщений закрыто, то MapBasic откроет его автоматически.
Оператор Print выполняет действия, похожие на действия оператора Note, с той разницей, что последний выводит сообщение в диалоговом окне, и пока пользователь не закроет это окно, выполнение программы будет приостановлено.
Выполнение программы после оператора Print продолжается, а каждый следующий оператор Print будет печатать текст с новой строки в уже открытом окне "Сообщение". Если все окно сообщений будет заполнено или строка будет длиннее ширины окна, то пользователь может прокручивать окно в горизонтальном и вертикальном направлениях.
Глава 24: Использование окна MapBasic
Чтобы очистить окно "Сообщение" перед выводом сообщения, используйте символ прогона листа (ASCII-код 12):
Print Chr$(12) 'Это сообщение очищает поле окна
Для начала новой строки в тексте сообщения используйте символ возврата каретки (ASCII-код 10). Следующий оператор Print выводит сообщение в две строки:
Print "Слои карты:" + Chr$(10) + " World, Capitals"
Оператор Print преобразует табуляцию ( ASCII-код09) в символ пробела (ASCII-код32)
Оператор Select
Назначение:
Выбирает отдельные строки и колонки из одной или более таблиц и составляет из них временные таблицы запросов. Этот оператор часто используется для сортировки и вычисления промежуточных сумм.
Синтаксис:
Select expression_list
From table_name [, ... ]
[ Where expression_group ]
[ Into results_table [ Noselect ] ] [ Group By column_list ]
[ Order By column_list [ Asc | Desc ] ]
ãäå
expression_list – список выражений через запятую, задающих содержимое колонок временной таблицы "Selection";
expression_group – одно выражение или список выражений, разделенных словами AND или OR;
table_name – имя открытой таблицы;
results_table – имя таблицы, в которую будут помещены результаты выбора; column_list – имя колонки или список имен, разделенных запятыми.
Описание:
Оператор Select предоставляет программисту MapBasic возможности диалога команды
ÇАПРОС > SQL-ЗАПРОС.
Оператор Select построен по образцу одноименного оператора в языке запросов SQL (Structured Query Language). Вариант оператора Select, применяемый в MapBasic, позволяет использовать уникальные географические возможности MapInfo, которые не имеют многие базы данных, использующие язык SQL.
Имена колонок, задаваемые выражениями типа èìÿ_таблицы,имя_колонки в операторе Select могут использовать имена только тех таблиц, которые перечислены в предложении From. Например, оператор Select выбирает значения в колонке STATES.OBJ, если таблица STATES включена в список предложения From в операторе Select.