Смекни!
smekni.com

MapInfo Professional 90 Руководство пользователя (стр. 110 из 125)

Центроил объекта B Объект B частично Объект B целиком

попадает в объект A попадает в объект A попадает в объект A

(Within) (Intersects) (Entirely Within)

Полилинии не могут содержать (Contain) точку, но они могут пересекать (Intersect) точку;

точка не может быть внутри (Within) полилинии, но может пересекать (Intersect) полилинию.

Внимание: При этом следует помнить, что MapInfo Professional выполняет простые операции "Содержит" (Contains) и "Внутри" (Within) гораздо быстрее, чем "Содержит полностью" (Contains Entire) и долностью внутри (Entirely Within). Поэтому, если Вам не обязательно точно знать, полностью ли один объект содержит другой, используйте Contains и Within вместо Contains Entire и Entirely Within.

См. также примеры в разделе Географическое объединение таблиц в Главе 9 на стр. 359.

Логические операторы в выражениях

"And" (И), "of (ИЛИ) и "not" (НЕ) - это логические операторы. Они используются при составлении выражений в диалоге команды Выбрать и в окошке С условием диалога команды SQL-запрос. MapInfo Professional рассматривает каждое такое выражение как проверку и применяет к каждой записи в таблице. Результатом каждой проверки является ответ "да" или "нет" (т.е. "истина" или "ложь"). Комбинируя результаты проверки каждого условия с помощью логических операторов, MapInfo Professional выдает общий ответ: удовлетворяет ли данная запись условию выбора.

Оператор Описание
and принимает значение "истина" только в том случае, если оба ее аргумента (логические выражения) истинны. То есть запись должны удовлетворять обоим условиям, чтобы попасть в выборку.
or принимает значение "истина" если один или оба ее аргумента (логические выражения) истинны. То есть запись должны удовлетворять хотя бы одному из условий, чтобы попасть в выборку. Записи также выбираются если удовлетворяют обоим условиям.
not принимает значение "истина", если аргумент имеет значение "ложь". То есть записи не должны удовлетворять условию, чтобы попасть в выборку

Предположим Вы хотите выбрать дома стоимостью от $250,000 или больше, находящиеся в графстве Колумбия. Каждая запись должна отвечать двум критериям, каждый из которых может быть определён как простое выражение:

9. VALUE >= 250000

10. COUNTY = "Columbia"

Сначала Вы можете сделать выборку всех домов которые стоят от 250,000 и более. Затем сделать новую выборку из этой выборки отобрав дома которые находятся в графстве Колумбия. Однако, проще объединить два эти оператора в одно выражения используя логический оператор "and".

11. COUNTY = "Columbia" and VALUE >= 250000

MapInfo Professional проверяет запись на соответствие условию заданному в выражении, для этого делается две проверки: Действительно ли в поле COUNTY значение Columbia? Является ли значение в поле VALUE больше или равным 250000? Если ответ на оба эти вопроса истина (т.е. ДА), значит запись попадает в текущую выборку. Если ответ на один или оба вопроса - НЕТ (т.е. ложь), запись не добавляется к выборке.

Теперь, допустим, Вы ищете недвижимость стоимостью от $250,000 и находящуюся где угодно, только не в графстве Columbia Вы можете использовать оператор "not", чтобы обратить значение первой части выражения 11, превратив его в выражение 12:

12. not (COUNTY="Columbia") and VALUE>=250000

Только те записи в которых графство не Columbia будут удовлетворять требованиям первой части выражения 12. Теперь рассмотрим выражение 13:

13. not (COUNTY="Columbia" and VALUE>=250000)

выражение 13 это отрицание для выражения 11. Любая запись удовлетворяющая выражению 11 не удовлетворяет выражение 13. Любая запись не удовлетворяющая выражению 11 удовлетворят выражение 13.

Вы можете использовать "or" когда хотите указать альтернативные условия, например:

14. COUNTY="Columbia" or COUNTY="Greene"

Любая запись относящаяся к графству Columbia или к графству Greene будет удовлетворять условию. Условие, конечно, может содержать и численные значения. Например:

15. TOTAL_AREA>40 or VALUE>250000

Это условие отбирает записи в которых площадь больше 40 или стоимость больше 250000. Если запись отвечает хоть одному из этих условий, она помещается в выборку.

Будьте внимательны при построении выражений с использованием логических операторов. Следующее выражение выглядит нормально, однако работать корректно оно не будет:

16. COUNTY="Columbia" or "Greene"

Оценивая это выражение как английскую фразу - COUNTY равно Колумбия или Грин — мы можем предположить, что это выражение будет работать так же как выражение 14 и выбрать все записи где встречается графство Columbia или графство Greene. Но правила вычислительной логики несколько отличаются от правил английского языка.

MapInfo Professional читает выражения слева направо. Во время чтения происходит определение, как отдельные элементы выражения сгруппированы. Вы можете представить себе эту операцию как расстановку скобок в выражении. MapInfo Professional читает выражение 13 так как будто оно сгруппировано как выражение 17, что нам и требуется.

А выражение 16 подобно выражению 18, и это совсем не то что нам нужно.

17. (COUNTY="Columbia") or (COUNTY="Greene")

18. (COUNTY="Columbia") or ("Greene")

выражения 17 и 18 имеют одинаковую первую часть. Но их вторая часть (после "or") совершенно различна. Вторая часть выражения 18 - это просто символьная строка, "Greene." В MapInfo Professional символьная строка в выражении, приводит к результату истина, если запись не пустая. Когда MapInfo Professional будет оценивать записи на соответствие условию в выражения 18, все непустые записи будут определены как истинные и следовательно попадут в выборку. И уже никакого значения не будет иметь то, как они были оценены в первой части выражения. Любая непустая запись будет рассматриваться как отвечающая условию второй части выражения, а так как одна часть выражения уже отвечает требованию, значит и всё выражение будет принято как "истина".

Давайте рассмотрим последний пример, являющийся противоположным выражению 14:

19. not (COUNTY="Greene" or COUNTY="Columbia")

выражение 17 выберет записи графств Greene или Columbia, но не выберет такие как Montgomery и Warrenis выражение 19 выберет записи всех графств, включая Montgomery и War-renis, кроме Greene или Columbia.

В Справочной системе содержатся следующие связанные с этой темой разделы:

• Численные значения в выражениях

• Строки в выражениях

• Даты в выражениях

• Ключевые (зарезервированные) слова в выражениях

Приоритет операторов

Когда MapInfo Professional вычисляет ыыражение, то некоторые операторы выполняются первыми независимо от порядка в выражении. Это называется приоритетом. Существует несколько уровней приоритета операторов в ыыражении. Самыми первыми вычисляются операторы наивысшего приоритета, следующими вычисляются операторы более низкого приоритета и т.д. В следующей таблице перечислены операторы MapInfo Professional в порядке приоритета их выполнения. Возведение в степень рассчитывается справа. Это касается выражений с несколькими возведениями в степень: 2 Л -3 л -4 = 2 л ( - (3 л (-4)))

Операторы одного уровня приоритета вычисляются слева направо.

В первую очередь скобки
возведение в степень
отрицательный знак
умножение,деление
сложение, вычитание
географические операторы, операторы сравнения
Not
And
В последнюю очередь Or (оператор Или)

Например, выражение 3+4*2 даёт результат 11. Так как оператор умножения имеет более высокий приоритет, чем операция сложения, сначала производится умножение:

3+4*2=

3+8 =

11

Для того чтобы указать MapInfo Professional что сначала необходимо провести сложение, добавляются скобки:

(3+4)*2=

7*2 =

14

Теперь рассмотрим выражение 20, предназначенное для выбора всех записей за июль или сентябрь 1989.

20. year(RECEIVED)=89 and month(RECEIVED)=7 or month(RECEIVED)=9

Так как "and" имеет более высокий приоритет чем "or", MapInfo Professional рассматривает это выражение "year(RECEIVED)=89 and month(RECEIVED)=7" так будто оно заключено в скобки.

21. (year(RECEIVED)=89 and month(RECEIVED)=7) or month(RECEIVED)=9

В этом случае любая запись за июль 89 или сентябрь любого года будет выбрана. Вероятно, это не то, что Вы хотели получить. Однако, добавив скобки во втором выражении можно получить то что нужно:

22. year(RECEIVED)=89 and (month(RECEIVED)=7 or month(RECEIVED)=9)

В этом выражении скобки указывают MapInfo Professional на то, что "month(RECEIVED)=7" и "month(RECEIVED)=9" это альтернативы во второй части выражения.

Внимание: Когда Вы не уверены в том как MapInfo Professional будет оценивать выражение с несколькими операторами, используйте скобки чтобы сгруппировать элементы выражения.

Использование функций в выражениях

Функции берут значения данных, производят некоторые операции над ними и в качестве результата возвращают новое значение. Функции имеют следующий вид:

SomeFunction(parameters)

Большинство функций MapInfo Professional имеет один или более параметров. Параметром может быть колонка или другое выражение. MapInfo Professional использует ключевое слово "obj" или "object" с географическими функциями: Area, CentroidX, CentroidY, ObjectLen, и Perimeter. Оно определяет, что MapInfo Professional должно вычислять значение на основании графических объектов, а не соответствующих им табличных данных.

• Дополнительную информацию смотрите в Справочной системе.

Работа в окне MapBasic

В этом разделе опытные пользователи узнают как повысить эффективность работы в MapInfo Professional® с использованием окна MapBasic. MapBasic® это язык программирования для MapInfo Professional позволяющий изменить интерфейс MapInfo Professional, расширить возможности программы новыми функциями и автоматизировать часто повторяющиеся задачи. Когда был создан MapBasic, в MapInfo Professional для целей тестирования и отладки кода было добавлено окно MapBasic. Но быстро стало очевидным, что окно MapBasic полезный инструмент для пользователей MapInfo Professional решающих такие задачи как сложные выборки и запросы использующие информацию об объектах.