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

Создание выражений

Центроид объекта В

Объект В частично

Объект В целиком

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

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

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

Во всех трех случаях объект A так или иначе включает в себя объект B. На первом и третьем рисунках центроид объекта B лежит внутри границы объекта A. На крайнем рисунке слева часть объекта B лежит вне границ объекта A. А на самом правом рисунке весь объект B лежит внутри объекта A. Только во втором случае мы говорим, что “объект A полностью содержит объект B” или что "объект B лежит полностью внутри объекта A”. На среднем рисунке объекты А и В имеют небольшую площадь перекрытия, при этом центроид объекта В не попадает в объект А, а центроид объекта А не попадает в объект В.

Внимание:Следует помнить, что MapInfo выполняет простые операции Содержит (Contains) и Лежит внутри (Within) гораздо быстрее, чем Содержит полностью

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

используйте Contains и Within вместо Contains Entire и Entirely Within.

Операторы - Логические операторы

Оператор

Описание

 

 

And

"True" тогда и только тогда, когда оба аргумента (выражение объединяет

 

их вместе) равны True. Чтобы быть выбранной, запись должна удов-

 

летворять обоим.

 

 

Or

"True", если один или оба аргумента (выражение объединяет их вместе)

 

равны "True". Чтобы быть выбранной, запись должна удовлетворять

 

только одному из этих условий. При выполнении обоих условий одно-

 

временно запись также будет выбрана.

 

 

Not

"True", если аргумент, к которому применяется выражение, равен "False".

 

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

 

условию.

 

 

436

MapInfo Professional 7.5

Глава 14: Районирование и создание выражений в MapInfo Professional

And, Or и Not – это логические операторы. Они используются при составлении выражений в диалоге команды ВЫБРАТЬ и в окошке С условием диалога команды SQL-ЗАПРОС. MapInfo использует простые выражения как проверку, которая производится над каждой записью таблицы. Результатом каждой проверки является ответ "да" или "нет" (т.е. "True" или "False"). Комбинируя результаты проверки каждого условия с помощью логических операторов, MapInfo выдает общий ответ на вопрос: удовлетворяет ли данная запись условию выбора.

Предположим, Вас интересует недвижимость стоимостью не менее $ 250 000 в Калмыкии. Выбираемые записи должны удовлетворять двум условиям, которые можно задать двумя простыми выражениями:

30.СТОИМОСТЬ >= 250000

31.ОБЛАСТЬ = ”Калмыкия”

Сначала можно выбрать всю недвижимость заданной стоимости. Затем по полученной выборке будет произведен новый поиск: находится ли недвижимость в Калмыкии? Проще совместить две эти операции с помощью логического оператора And:

32. ОБЛАСТЬ = ”Калмыкия” and СТОИМОСТЬ >= 250000

Теперь MapInfo будет проводить две проверки для каждой записи: является ли "Область" Калмыкией? Равна или превосходит "Стоимость" значение 250 000? И если ответ на оба вопроса утвердительный, запись попадет в выборку. Если же хотя бы один ответ "нет", то запись не войдет в выборку.

Теперь, если Вам нужно выбрать недвижимость стоимостью более $250 000, которая находится за пределами Калмыкии, Вы можете использовать оператор Not перед первой частью выражения 32 и получить выражение 33:

33. Not(ОБЛАСТЬ=”Калмыкия”) and СТОИМОСТЬ>=250000

Первой части выражения 33 удовлетворяют только те записи, которые не относятся к Калмыкии. Рассмотрим также выражение 34:

34. Not ОБЛАСТЬ=”Калмыкия” and СТОИМОСТЬ>=250000)

Выражение 34 – это просто отрицаниевсего выражения 32. Все записи, неудовлетворяющие 32, будут удовлетворять 34. И наоборот, все записи, не удовлетворяющие 34, будут удовлетворять 32.

Для объединения независимых условий можно использовать оператор Or:

35.ОБЛАСТЬ=”Калмыкия” or ОБЛАСТЬ=”Бурятия”

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

36.ПЛОЩАДЬ>400 or СТОИМОСТЬ>250000

Здесь проверяется, что площадь больше 400 тыс. кв. км и стоимость больше $250 000. Если выполнено хотя бы одно из этих двух условий, запись помещается в выборку.

MapInfo Professional 7.5 Руководство пользователя (Сокращенное)

437

Создание выражений

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

37. ОБЛАСТЬ=”Калмыкия”or”Бурятия”

По нормам грамматики фраза "ОБЛАСТЬ есть Калмыкия или Бурятия" не отличается по смыслу от выражения 35. Но правила компьютерной логики и естественного языка несколько различаются.

MapInfo читает выражения слева направо. Программе надо определить, как в сложном выражении сгруппированы простые выражения. Представить, как идет такая группировка, можно, расставив скобки в выражениях. MapInfo читает выражение 38 так же, как и выражение 35 – и это правильно отражает смысл нашего запроса. Выражение 37 MapInfo читает так, как показано в выражении 39, – смысл совсем не тот, который мы вкладывали в запрос.

38.(ОБЛАСТЬ=”Калмыкия”) or (ОБЛАСТЬ=”Бурятия”)

39.(ОБЛАСТЬ=”Калмыкия”) or (”Бурятия”)

Оба выражения (38 и 39) имеют одинаковую первую часть (первое предложение). Но вторые предложения (после Or) совершенно различны. Второе предложение выражения 39 – просто строка символов “Бурятия”. По правилам MapInfo, всем непустым строкам при вычислении их значения ставится в соответствие "True". Поэтому при вычислении выражения 39 MapInfo включит все непустые записи в выборку. Причем результат первой проверки не будет иметь влияния на общий результат, т.к. значение второго предложения для всех непустых записей будет "True" и, следовательно, значение всего выражения будет "True".

Наконец, рассмотрим пример с отрицанием выражения 35:

40. Not(ОБЛАСТЬ=”Бурятия” or ОБЛАСТЬ=”Калмыкия”)

Выражению 35 удовлетворяют записи для Бурятии и Калмыкии, но не для Мордовии или Хакасии, а выражению 40 – все области, кроме Бурятии или Калмыкии, в том числе Мордовия и Хакасия.

Предложения с числами

Допустим, необходимо выбрать все записи о людях, доход которых составляет более $1000 в месяц и средний возраст которых равен 42 годам:

41. ДОХОД>=1000 and Round(СР_ВОЗРАСТ, 1)=42

Как видно, данное выражение состоит из двух предложений. Они соединены оператором And. Это означает, что для того, чтобы запись попала в выборку, оба предложения должны принимать значение "True".

Атеперь найдем все товары, цена которых составляет от 50 000 до 100 000 рублей:

42.ЦЕНА>=50000 and ЦЕНА<=100000

438

MapInfo Professional 7.5

Глава 14: Районирование и создание выражений в MapInfo Professional

Здесь заданы два условия, которые должны быть выполнены для записей выборки. Используя операторы “больше или равно” (>=) и “меньше или равно” (<=), мы обеспечиваем попадание записей с ценами, в точности равными 50 000 и 100 000 рублей, в выборку. Если бы мы указали “больше” (>) и “меньше” (<), то были бы выбраны записи с ценами от 50 001 до 99 999 рублей, а товары с ценами, равными 50 000 и 100 000 рублей, не попали бы в выборку.

Выберем товары, стоимость которых составляет или 50 000-100 000 рублей, или 150 000-

200000 рублей:

43.(ЦЕНА>=50000 and ЦЕНА<=100000) or (ЦЕНА>=150000 and ЦЕНА<=200000)

Это сложное выражение вида: (выражение1) или (выражение2). Каждое из двух выражений имеет вид выражения 42. Если запись удовлетворяет хотя бы одному условию, она попадает в выборку.

Предложения со строками

Пусть требуется выбрать всех покупателей, начальные буквы фамилий которых лежат в диапазоне от "Н" до "У".

44. ФАМИЛИЯ >= ”Н” and ФАМИЛИЯ <”Ф”

Первая часть выражения проверяет фамилии на равенство или превышение "Н". Вторая часть выражения проверяет, меньше ли они в лексикографическом смысле, чем "Ф". Таким образом, любая фамилия, начинающаяся на "Н" и заканчивающаяся на "У", удовлетворяет этим условиям.

Можно выбрать всех покупателей, чьи фамилии начинаются на "Н" и заканчиваются на "Я":

45. ФАМИЛИЯ >= ”Н”

Поскольку "Я" – последняя буква алфавита, проводить проверку "снизу" не надо. Покупатель с фамилией, которая по алфавиту идет после фамилий на букву "Я", Вам никогда не встретится.

Атеперь выберем покупателей, фамилия которых начинается на "В":

46.ФАМИЛИЯ>=”В” and ФАМИЛИЯ<”Г”

Здесь используется тот же алгоритм, что и в выражении 44.

Найдем всех покупателей, чьи фамилии находятся между "Се" и "Су":

47. ФАМИЛИЯ=>”Cе” and ФАМИЛИЯ<”Cу”

Здесь используется тот же алгоритм, что и в выражении 44.

Выберем все записи, которые не относятся к такому субъекту Федерации, как Ханты-Ман- сийский АО:

48. Not ОБЛАСТЬ=”ХМАО”

MapInfo Professional 7.5 Руководство пользователя (Сокращенное)

439

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