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

Оператор Objects Snap

Оператор Objects Snap

Назначение

Выполняет коррекцию объектов из данной таблицы и осуществляет различные топологические операции над объектами, включая совмещение узлов разных объектов, прилегающих друг к другу и генерализацию/разреживание узлов. Таблица может быть и Selection. Все объекты, подвергающиеся действию оператора, должны быть или все линейными (то есть, полилинии или дуги) или все замкнутые (то есть, полигоны, прямоугольники, скругленные прямоугольники или эллипсы). Смешанные линейные и замкнутые объекты не могут обрабатываться этим оператором, будет выдано сообщение об ошибке.

Синтаксис

Objects Snap From tablename

[Tolerance [Node node_distance] [Vector vector_distance] [Units unit_string] ] [Thin [Bend bend_distance] [Distance spacing_distance] [Units unit_string] ] [Cull Area cull_area [Units unit_string] ] ]

Описание

Объекты из исходной таблицы tablename проверяются на предмет различных проблем и несоответствий, таких, как самопересечения. Самопересекающиеся полигоны в форме"восьмерки" будут превращаться в два полигона, соприкасающиеся в одной точке. Полигоны, содержащие острые выступы, будут обработаны так, что эти шипы будут удалены. Результирующий, исправленный объект помещается вместо исходного объекта. Если существуют наложения полигонов друг на друга, то такие наложения будут удалены. Удаление наложений состоит в удалении наложенной части. Эта часть 0 "избыточный полигон" 0 образует с одним из двух исходных объектов регион. Такой регион составлен из "избыточного полигона" и непересекающейся части исходного полигона.

Значения Node и Vector Tolerances предназначены для совмещения узлов из разных близлежащих объектов и удаляют мелкие пустоты и мелкие пустоты между двумя объектами. Субпредложение Units предложения Tolerances позволяет задать единицы измерения расстояния (например, "km" для километров), применяемых к значениям Node и Vector. Если субпредложение Units отсутствует, то значения Node и Vector будут интерпретироваться в текущих значениях измерения расстояния MapBasic. По умолчанию MapBasic использует мили; для изменения единиц измерения смотрите оператор Set Distance Units.

Node 0 это радиус вокруг конечных узлов полилиний. Если узлы из других объектов попадают в этот радиус, то один или два узла перемещаются так, что попадают в одну точку (т.е. они совмещаются). Vector 0 это радиус, используемый для промежуточных точек полилиний. Его назначение тоже, что и у радиуса Node, кроме того, что он используется только для промежуточных точек полилиний. Обратите внимание, что для полигонов не определено понятие конечных точек (значение Node не используется) ввиду их замкнутости. Для них используется только величина Vector, которая применяется ко всем узлам объекта. Для полилиний значение Node должно быть больше или равно значению Vector.

Значения Bend и Distance могут использоваться для удобства операций разреживания узлов и обобщения контуров. Они уменьшают число узлов, используемых в объекте, сохраняя

Справочник MapBasic

383

Оператор Objects Snap

основные черты формы объекта. Субпредложение Units предложения Thin позволяет указать

имя единицы измерения расстояния (например, "km" для километров) в которых измеряенся

значение Bend и Distance. Если субпредложение Units отсутствует, то значения Bend и

Distance будут интерпретироваться в текущих единицах измерения MapBasic.

Значение Bend используется для управления коллинеарным отклонением группы из 3

последовательных узлов. Эти 3 узла связываются в треугольник. Измеряется перпендикуляр,

опущенный из средней точки на длинную сторону треугольника. Если это расстояние меньше

значения Bend, то эти три узла рассматриваются как коллинеарные и второй (средний) узел

удаляется из объекта.

Расстояние Distance используется для удаления узлов из одного объекта, если узлы

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

точками объекта. Если это расстояние меньше, чем Distance, то один из двух узлов будет

удален.

Значение Cull Area используется для удаления избыточных полигонов, которые меньше

некоторого заданного этой величиной значения. Субпредложение Units из предложения Cull

позволяет настроить единицы измерения площади (например, "кв км" для квадратных

километров) применяемые в значении Area. Если субпредложение Units отсутствует, то

значение Area будет интерпретироваться в текущих единицах измерения площади MapBasic.

По умолчанию MapBasic использует квадратные мили в качестве единиц измерения площади;

для изменения этих единиц см. оператор Set Area Units.

Внимание: Для всех расстояний и площадей, упомянутых выше, всегда используется тип измерений на плоскости. Систему координат и проекцию всегда надо учитывать. Вычисления расстояний и площадей в Долготе/Широте на плоскости осуществляются не с математической точностью. Убедитесь, что Вы работаете в подходящей системе координат (декартовых) перед работой с этим оператором.

Пример

Open Table "STATES.TAB" Interactive Map From STATES

Set Map Layer 1 Editable On select * from STATES

Objects Snap From Selection Tolerance Node 3 Vector 3 Units "mi" Thin Bend 0.5 Distance 1 Units "mi" Cull Area 10 Units "sq mi"

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

Оператор Create Object

Оператор Overlap

Оператор Objects Clean

384

Справочник MapBasic

Оператор Objects Split

Оператор Objects Split

Назначение:

Разделяет изменяемые объекты на части, используя форму выбранных объектов как "ластик". Оператор соответствует команде ОБ ЕКТЫ > РАЗРЕЗАТЬ.

Синтаксис:

Objects Split Into Target

[ Data column_name = expression ]

[ , column_name = expression ... ] ]

где

column_name – имя колонки в таблице.

Описание:

Оператор Objects Split разрезает каждый изменяемый объект на несколько. Оператор Objects Split соответствует команде MapInfo ОБ ЕКТЫ > РАЗРЕЗАТЬ. Если Вы в MapInfo выполните команду и при этом будет открыто окно MapBasic, то в протоколе выполненных действий будет использован оператор Objects Split. Описание выполняющейся операции смотрите в описании команды в

Справочнике MapInfo.

Перед выполнением оператора Objects Split, должен быть выбран изменяемый объект (или объекты) и один или более замкнутых объектов (типа "область ", "прямоугольник", "скругленный прямоугольник" или "эллипс"), играющих роль "ластика". Изменяемый объект может быть назначен командой в MapInfo ОБ ЕКТЫ > ВЫБРАТЬ ИЗМЕНЯЕМЫЙ ОБ ЕКТ или оператором Set Target из прикладной программы.

Предложение Data управляет обобщением данных. За ключевым словом Data должен следовать список определений через запятую. Каждое определение является выражением, по которому будет изменено значение из определенной колонки в записи изменяемого объекта. Вычисления или изменения должны производиться в соответствии с типом колонки (численным, строковым и т. п.) Следующая таблица приводит некоторые варианты определений для колонки:

Выражение

 

Эффект

col_name = col_name

 

Содержимое колонки не меняется. Каждый объект,

 

 

 

полученный в результате, в своей записи имеет то

 

 

же значение, что и объект, из которого он был

 

 

получен.

col_name = value

 

MapBasic помещает значение value в поле записи

 

 

объекта. Если тип колонки символьный, то value

 

 

должно быть строкой. Если тип колонки

 

 

численный, то value должно быть числом.

col_name = Proportion(col_name)

Используется только для численных колонок. MapBasic пропорционально размерам объектов разделяет значение в колонке col_name между записями с объектами, полученными в результате.

Список Data может состоять из определений для всех колонок таблицы. Если в списке определены не все колонки, то MapBasic разместит пустые значения в неописанные поля новой записи.

Справочник MapBasic

385

Оператор Objects Split

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

Примеры:

В результате следующего оператора Objects Split, который не использует предложение Data, все записи, к которым присоединены объекты, получают пустые или нулевые значения.

Objects Split Into Target

Следующий оператор Objects Split имеет предложение Data, которое задает выражения для трех колонок ("State_Name", "Pop_1990" и "Med_Inc_80"). Первая часть предложения Data присваивает строку "подразделение" колонке "State_Name"; то есть строка "подразделение" будет помещена в колонку "State_Name" для каждого объекта, являющегося результатом разрезания. Далее в предложении Data определяется, что население из колонки "Pop_1990" пропорционально разделяется между результатами разрезания, а значение "Med_Inc_80" сохраняется для всех объектов.

Objects Split Into Target

Data

State_Name = "подразделение",

Pop_1990 = Proportion( Pop_1990 ),

Med_Inc_80 = Med_Inc_80

386

Справочник MapBasic

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