Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MB6REFRU.pdf
Скачиваний:
10
Добавлен:
13.02.2015
Размер:
3.83 Mб
Скачать

MapBasic

Среда разработки

(Русское издание)

Справочник

MapInfo Corporation

Troy, New York

Функция Abs( )

Функция Abs( )

Назначение:

Возвращает абсолютное значение числа.

Синтаксис:

Abs(num_expr)

где

num_expr – численное выражение.

Величина, полученная в результате:

Число с плавающей запятой. Величина типа Float.

Описание:

Функция Abs(_) возвращает абсолютное значение числа, полученного в результате вычисления выражения num_expr.

Если результат выражения больше или равен нулю, Abs(_) возвращает это число без изменений. Если же результат выражения меньше нуля, Abs(_) возвращает значение выражения, умноженное на минус единицу.

Пример:

Dim x, y As Float

x = 2.5

y = Abs(x)

'

' y равно 2.5

Смотрите также:

Sgn(_)

Справочник MapBasic

1

Функция Acos( )

Функция Acos( )

Назначение:

Возвращает арккосинус числа.

Синтаксис:

Acos(num_expr)

где

num_expr – численное выражение, результат которого должен находиться в диапазоне от единицы до минус единицы включительно.

Величина, полученная в результате:

Число с плавающей запятой. Величина типа Float.

Описание:

Функция Acos(_) вычисляет арккосинус числа, полученного в результате вычисления выражения num_expr. Другими словами, Acos(_) возвращает величину угла (в радианах), косинус которого равен параметру num_expr.

Диапазон значения угла – между 0 и p/2 радиан (число p равно приблизительно 3.141593, и p/2 радиан равно 90 градусам).

Для перевода градусов в радианы число необходимо умножить на число DEG_2_RAD. Для обратного конвертирования используется коэффициент RAD_2_DEG. Для того, чтобы Ваша программа могла использовать эти коэффициенты конвертирования, она должна содержать оператор Include "MAPBASIC.DEF".

Так как значения косинуса могут находиться в диапазоне от минус единицы до единицы, то и результат вычисления выражения num_expr должен быть не менее минус единицы и не более единицы.

Пример:

Include "MAPBASIC.DEF"

Dim x, y As Float

x = 0.5

y = Acos(x) * RAD_2_DEG

'

'y будет равен 60,

'так как косинус от 60 градусов равен 0.5

Смотрите также:

Asin(_), Atn(_), Cos(_), Sin(_), Tan(_)

2

Справочник MapBasic

Add Cartographic Frame

Add Cartographic Frame

Оператор Create Carpographic Frame позволяет добавлять разделы к существующей картографической легенде, созданной оператором Create Carpographic Legend.

Синтаксис:

Add Cartographic Frame

[Window legend_window_id ] [Custom]

[Default Frame Title [def_frame_title] [Font... ] ] [Default Frame Subtitle [def_frame_subtitle] [Font... ] ] [Default Frame Style [def_frame_style] [Font... ] ] [Default Frame Border Pen... pen_expr]

Frame From Layer [map_layer_id | map_layer_name] [ Position (x, y) [Units paper_units] ]

[ Using

[ Column { column | object } ] [ Label { expression | default } ]

[ Title [frame_title ] [Font... ] ]

[ SubTitle [frame_subtitle ] [Font... ] ] [ Border Pen... ]

[ Style [Font... ] [NoRefresh ]

[ Text { style_name } { Line Pen... | Region Pen... Brush...

| Symbol Symbol... } ]

[, ... ]

]

[, ... ]

legend_window_id это целочисленный идентификатор окна, который Вы можете получить при вызове функций FrontWindow() и WindowId().

def_frame_title это строковая величина, которая по умолчанию определяет заголовок раздела легенды. Может включаться специальный символ “#”, который может заменяться именем текущего слоя.

def_frame_subtitle L это строковая величина, которая по умолчанию определяет заголовок подраздела легенды. Может включаться специальный символ “#”, который может заменяться именем текущего слоя.

def_frame_style L это строковая величина, которая определяет каждый символ в каждом разделе легенды. Символ ”#” будет замещаться именем слоя. Символ % будет замещаться текстом “Line”, “Point, “Region”, как это определено для символа. Например, “% of #” будет означать “Region of States” для слоя states.tab.

pen_expr L это выражение Pen, то есть MakePen( ширина, тип, цвет). Если по умолчанию линия рамки определена, то она и останется по умолчанию такой же для раздела легенды. Если предложение pen для рамки существует для раздела легенды, то оно будет определять тим линии для рамки вместо заданного по умолчанию.

map_layer_id или map_layer_name определяют слой карты; задается коротким цельночисленным типом (например, используйте 1 для определения самого верхнего слоя, не считая косметического) или строковая переменная, соответствующая имени таблицы, отображенной на карте. Для

Справочник MapBasic

3

Add Cartographic Frame

тематического слоя необходимо определять параметр map_layer_id.

frame_title L это строковая переменная, определяющая заголовок раздела легенды. Если будет определено предложение заголовка раздела, то будет использоваться эта величина вместо величины def_frame_title.

frame_subtitle L это строковая переменная, определяющая подзаголовок раздела легенды. Если это предложение определено, то оно будет использоваться вместо величины def_frame_subtitle.

Column это атрибутивное имя колонки из раздела слоя таблицы или колонка ’ object’ (означает, что стили легенды базируются на уникальном стиле в mapfile). По умолчанию это ’object’.

Label это полноценное выражение или ’по умолчанию’ (означает, что используется по умолчанию стиль раздела шаблона, когда создается каждый стиль текста, если предложение стиля не содержит текст).

style_name L это строковая переменная, которая указывает к какому типу: символу, линии или области относится объект в разделе легенды.

Описание

Если ключевое слово Custom включено в описание, то каждый раздел легенды должен включать в себя предложение Position. Если Custom пропущено и легенда отображается в виде книжной или альбомной ориентации, то разделы легенды будут добавлены в самый конец.

Предложение Position контролирует положение раздела в окне легенды. Верхний левый угол окна легенды имеет позицию 0, 0. Величины позиционирования используют бумажные единицы измерения, такие, как “in” (дюймы) или “cm” (сантиметры). MapBasic имеет текущие единицы измерения, по умолчанию это дюймы; программа MapBasic может поменять эти единицы, используя оператор Set Paper Units. Вы можете изменить эти настройки единиц измерения, включив подпредложение Units в предложение Position.

По умолчанию в этом операторе настройки применяются только к разделам, созданным в этом операторе. Они не действуют на существующие разделы. Разделы, используемые по умолчанию в Create Cartographic Legend или ранее, не действуют на разделы, созданные в этом операторе.

Предложение Style и ключевое слово NoRefresh позволяют Вам создавать собственные разделы легенды, которые не будут изменяться при обновлении легенды. Если ключевое слово NoRefresh используется в предложении Style, то таблица не проверяется на предмет используемых стилей.

Вместо этого, предложение Style должно содержать Ваш собственный список стилей, используемых в разделе. Для этого определяются значения Text и предложения Line, Region или Symbol.

Смотри также:

Create Cartographic Legend, Set Cartographic Legend, Alter Cartographic Frame, Remove Carto4 graphic Frame

4

Справочник MapBasic

Оператор Add Column

Оператор Add Column

Назначение:

Добавляет новую временную колонку в открытую таблицу или обновляет уже созданную колонку данными из другой таблицы.

Синтаксис:

Add Column table ( column [ datatype ] ) {Values const [, const ... ] |

From source_table Set To expression

[ Where { dest_column = source_column | Within | Contains | Intersects } ] [ Dynamic ] }

где

table – имя открытой таблицы; column – имя новой колонки;

datatype – тип данных колонки, который может быть одним из следующих: Char (width), где width задает максимальное количество символов в строке, Float (этот тип используется по умолчанию), Integer, SmallInt, Decimal(width, decimal_places), где width задает ширину поля,

а decimal_places – позицию десятичной точки, Date или Logical;

const – константа или выражение, результат которого заносится в создаваемую колонку; source_table – имя другой открытой таблицы, таблицыLисточника;

expression – выражение, извлекающее данные из второй таблицы для возможного обобщения; source_column – имя колонкиLобразца из таблицы source_table, таблицыLисточника; dest_column – имя колонки изменяемой таблицы (table).

Dynamic – назначает колонку динамически вычисляемой: если оператор имеет это ключевое слово, то последующие изменения данных в таблицеLисточнике (source_table) повлекут немедленное изменение в таблице с колонкой, созданной оператором.

Описание:

Оператор Add Column используется для создания новой временной колонки в открытой таблице MapInfo. Созданная колонка становится постоянной только после сохранения таблицы на диске. Однако если временная колонка создана на базе данных из постоянных колонок другой таблицы и Вы сохранили Рабочий Набор, то последний будет включать информацию о временной колонке, которая позволит Вам вызвать вновь таблицу с этой колонкой, загрузив Рабочий Набор. Для создания постоянной колонки в таблице используйте команды Alter Table и Update.

Явное задание данных для новой колонки

Для этого используется предложение Values. После ключевого слова задайте список постоянных значений, разделенных запятыми. В следующем примере временная колонка таблицы WARDS заполняется некоторыми числами:

Open Table "wards"

Add Column wards(percent_dem)

Values 31,17,22,24,47,41,66,35,32,88

Справочник MapBasic

5

Оператор Add Column

Заполнение новой колонки данными из другой таблицы

Вместо предложения Values используйте предложение From, которое задает имя другой таблицы (source_table), данные из которой будут использоваться в новой колонке. Обе таблицы должны быть открыты.

MapBasic предоставляет возможность объединить две таблицы в одну на основе совпадения значений колонок. Если предложение, начинающееся со слова Where, в операторе отсутствует, MapL Basic сам выбирает метод объединения. Поэтому для точного задания метода объединения, задавайте его в явном виде. Вариант предложения

Where колонка = колонка

задает объединение двух таблиц на основе совпадения значений колонок из разных таблиц. Этот метод приемлем, если колонка Вашей таблицы имеет величины, сходные с величинами в колонке из другой таблицы (например, Вы добавляете колонку в таблицу STATES и другая таблица также имеет колонку с именами штатов).

Если обе таблицы имеют графические объекты, то предложением Where можно задать географическое объединение. Так, если оператор включает предложение Where Contains, MapInfo производит объединение, проверяя, могут ли объекты из таблицы source_table содержать объекты из изменяемой таблицы.

Следующий оператор добавляет колонку в таблицу STORES; новая колонка будет содержать имена округов, которые выделяются из таблицы COUNTY:

Add Column

 

 

stores(county char(20)) '

новая колонка "county" в таблице STORES

From counties

'

использует данные из таблицы COUNTIES

Set to cname

'

из колонки "cname"

Where Contains

'

объединение: округа, содержащие города.

Метод создания колонки с ключом Where Contains возможен в том случае, если таблица имеет точечные объекты и вторая таблица имеет объекты, которые могут содержать эти точки.

В следующем фрагменте таблице STATES добавляется временная колонка. Значения для нее извлекаются из таблицы CITY_1K, содержащей данные о крупных городах США. После выполнения оператора Add Column, каждая строка таблицы STATES будет содержать количество крупных городов в каждом штате.

Open Table

"states" Interactive

Open Table

"city_1k" Interactive

Add Column

states(num_cities)

From city_1k

' данные используются из таблицы CITY_1K

Set To Count(*)

' количество

городов в каждом штате

Where Within

'

объединение:

 

'

города,

принадлежащие штату.

Предложение Set To задает правило обобщения данных функцией Count(*). Описание функций обобщения приводится ниже.

Заполнение уже существующей колонки данными из другой таблицы

Для того, чтобы обновить содержимое уже существующей колонки вместо того, чтобы создать новую временную колонку, надо опустить параметр datatype и использовать предложение From вместо

6

Справочник MapBasic

Оператор Add Column

предложения Values. При обновлении MapBasic будет игнорировать ключевое слово Dynamic.

Обобщение данных в новой колонке

Если Вы используете предложение From, то Вы можете вычислить значения для новой колонки, обобщая данные из другой таблицы (source_table). Для определения правила обобщения данных используется предложение Set To, включающее в себя функции обобщения. Следующая таблица приводит список используемых в операторе Add Column функций обобщения:

Функция

 

Что будет в новой колонке

Avg(col)

 

средняя величина всех значений поля col из строк таблицыL

 

 

 

источника, которые участвуют в объединении;

Count(*)

 

число строк в таблицеLисточнике, которые используются в

 

 

объединении;

Max(col)

 

наибольшая величина в колонке col из строк таблицыL

 

 

источника, которые участвуют в объединении;

Min(col)

 

наименьшая величина в колонке col из строк таблицыL

 

 

источника, которые участвуют в объединении;

Sum(col)

 

сумма значений из колонки по всем строкам таблицыL

 

 

источника, которые используются в объединении;

WtAvg(col, weight_col)

взвешенная средняя величина значений поля col из строк таблицыLисточника; колонки с большим значением weight_col вносят больший вклад в результат;

Proportion Avg(col)

среднее число, вычисленное с учетом перекрытия одних

 

областей другими;

Proportion Sum(col)

сумма, вычисленная с учетом взаимного перекрытия

 

областей;

Proportion WtAvg(col,

взвешенная средняя величина с учетом перекрытия областей.

weight_col)

В основном функции обобщения работают только с неграфическими данными таблицы. Но последние три функции (Proportion Sum, Proportion Avg, Proportion WtAvg) выполняют вычисления с учетом взаимного расположения объектов. Это лучше проиллюстрировать примером. Допустим, Вы имеете таблицу TOWNS, содержащую границы города и демографическую информацию (например, население) для каждого города. Существует еще таблица RISK, которая содержит области. Объекты таблицы RISK представляют зоны различной степени риска, например, риска возможного затопления при разливе близлежащей реки.

Пользуясь данными этих двух таблиц, Вы хотите рассчитать численность населения, живущего в зонах риска. Если половина города перекрыта зоной риска, то будем считать, что половина населения попадает в зону риска; если треть города перекрыта зоной риска, то мы полагаем, что при наводнении опасность угрожает трети населения и т.д.

Следующий пример показывает, как с помощью функции обобщения Proportion Sum вычисляется новая колонка "population_at_risk", представляющая количество населения, подвергаемое риску:

Add Column

Risk(population_at_risk Integer)

 

From towns

 

Set To

Proportion Sum(town_pop)

 

Where Within

 

Справочник MapBasic

7

Оператор Add Column

Для каждого города, часть которого попадает в зону возможного затопления, MapInfo вычисляет соответствующую долю населения и все это суммирует.

Внимание: Результат функции Proportion Sum достоверен с учетом допущения, что обобщаемые данные равномерно распределены по территориям. На практике часто оказывается, что данные распределяются по территории неравномерно, например, большая часть населения штата НьюLЙорк живет в городе НьюLЙорк. Чтобы добиться достоверности, разбивайте большие области на меньшие области, в которых данные распределены равномерно.

Функция Proportion Avg вычисляет средний результат, учитывая взаимное перекрытие объектов. Продолжая пример с риском наводнения, представим, что в таблице TOWNS содержится колонка "median_age", которая содержит значения среднего возраста жителей каждого города. Следующий оператор вычисляет средний возраст живущих в зоне риска:

Add Column Risk(age Float) From Towns

Set To Proportion Avg(median_age) Where Within

Для каждой записи в таблице TOWNS MapInfo вычисляет отношение зоны риска к городской площади. В результате получается число от нуля до единицы включительно. MapInfo умножает это число на средний возраст жителей города ("median_age") и затем суммирует результаты. Так, если средний возраст равен 50 и в зоне риска находится 10% площади города, то MapInfo добавит в общую сумму число 5, то есть 10% от числа 50.

Функция Proportion WtAvg работает так же, как и Proportion Avg, но позволяет еще и извлекать весовые коэффициенты из отдельной колонки данных.

Использование функций Proportion... с объектами иного типа, чем "область"

Если Вы используете одну из трех функций Proportion и таблица source_column содержит объекты типа "область", MapInfo вычисляет процент перекрытия одной области другой. Однако, если к записям таблицыLисточника присоединены объекты другого графического типа, MapInfo считает каждый объект лежащим либо внутри, либо снаружи обрабатываемой области (объект считается лежащим внутри области, если его центроид лежит внутри области).

Динамически вычисляемая колонка

Если при создании новой колонки Вы использовали ключевое слово Dynamic, то новая колонка будет динамически вычисляемой. То есть изменения данных в таблицеLисточнике (source_table) повлекут немедленное изменение в таблице с колонкой, созданной оператором Add Column...

From...

Если Вы создадите динамически вычисляемую колонку и потом закроете таблицуLисточник, то значения в колонке будут зафиксированы (то есть колонка больше уже не будет динамически вычисляемой). Аналогичный эффект срабатывает при географическом объединении: если была создана динамически вычисляемая колонка и Вы закрыли какуюLлибо карту, используемую в географическом объединении, то значения в колонке зафиксируются.

Смотрите также:

Alter Table, Update

8

Справочник MapBasic

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