Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MI6UGRU

.pdf
Скачиваний:
16
Добавлен:
13.02.2015
Размер:
14.71 Mб
Скачать

Глава 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( ) возвращает объект типа "точка".

537

Глава 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

 

 

538

Глава 24: Использование окна MapBasic

Снизу справа

8

 

 

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.

Если Вы точно знаете, сколько колонок в таблице, и если Вам уже известно, какие именно величины в какие поля надо поместить, то можно опустить предложение

539

Глава 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

Назначение:

Показывает сообщение в простом диалоговом окне.

Синтаксис:

540

Глава 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.

541

Глава 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

Угол поворота текстового объекта.

542

Глава 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 в

 

зависимости от размера окна Карты.

543

Глава 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 будет печатать текст с новой строки в уже открытом окне "Сообщение". Если все окно сообщений будет заполнено или строка будет длиннее ширины окна, то пользователь может прокручивать окно в горизонтальном и вертикальном направлениях.

545

Глава 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.

546

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]