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

Оператор Find

Оператор Find

Назначение:

Поиск объекта или пересечения объктов таблицы на Карте.

Синтаксис:

Find address [, region ] [ Interactive ]

где

address – строковая величина, определяющая адрес или имя искомого объекта Карты; для поиска пересечения двух улиц параметр использует синтаксис:

улица && улица;

region – имя области, в которой будет осуществляться поиск.

Описание:

Оператор Find осуществляет поиск на Карте именованных элементов, заданных параметром address. Результаты поиска сохраняются в системных переменных, значения которых доступны функции

CommandInfo( ).

Если оператор включает ключевое слово Interactive и если MapBasic не может сразу обнаружить адрес, то поиск сопровождается диалоговым окном, в котором можно выбирать из нескольких "похожих" адресов.

Оператор Find может просматривать только таблицы, имеющие присоединенные графические объекты. Таблица должна быть открыта. Колонка таблицы, используемая для поиска, назначается оператором Find Using. Если оператор Find Using не был выполнен перед осуществлением поиска оператором Find, MapBasic будет вести поиск с установками, которые были заданы ранее в первом диалоге команды ЗАПРОС > НАЙТИ в MapInfo.

Оператор Find может уточнять поиск, если Вы зададите необязательный параметр region – обычно это имя области, в которой должен содержаться искомый объект. Другими словами, Вы можете просто попробовать найти город по названию (например, "Albany") в таблице городов или сузить область поиска, задав имя города и область, где он может находиться (например, "Albany", "CA"). Подробную информацию об уточнении поиска с использованием таблицы областей Вы можете найти в описании команды ЗАПРОС > НАЙТИ в Руководстве пользователя MapInfo.

Замечание: Оператор Find не отмечает найденный объект символом, так как это делает команда поиска. Если необходимо показать пользователю результаты поиска, то можно использовать функцию CreatePoint( ) или оператор Create Point (смотрите пример ниже).

Анализ результата поиска

Если применить функцию CommandInfo(CMD_INFO_FIND_RC) после выполнения оператора Find, то Вы сможете узнать результат поиска. В случае успеха координаты X и Y найденного объекта можно узнать при помощи функции CommandInfo( ) с аргументами CMD_INFO_Y и CMD_INFO_X соответственно. Если после оператора Find вызвать функцию Command4 Info(CMD_INFO_FIND_ROWID), то она вернет номер строки, которой соответствует найденный объект.

232

Справочник MapBasic

Оператор Find

Прикладная программа на MapBasic может определить, насколько успешно сработал оператор Find, с помощью вызова функции CommandInfo(CMD_INFO_FIND_RC). Оператор Find может завершиться либо нахождением объекта, либо выбором ближайшего объекта, либо объект не будет найден. В случае точного попадания функция CommandInfo(CMD_INFO_FIND_RC) возвратит единицу. Если Вы выбрали ближайший вариант, то эта функция возвратит число большее единицы. В случае неудачи поиска функция возвращает отрицательное значение.

В следующей таблице собраны различные варианты кодов, возвращаемых функцией Command4 Info(CMD_INFO_FIND_RC). Каждое значение задается не более чем тремя значащими цифрами, каждая из которых представляет результат одного из трех возможных этапов поиска.

Значения единиц

Смысл

xx1

Точное совпадение.

xx2

Был задействован файл сокращений.

xx3 ( – )

Точного совпадения не найдено.

xx4 ( – )

Не было задано имя объекта; точного совпадения не найдено.

xx5 ( + )

Пользователь выбрал имя в диалоговом окне Interactive.

Значения десятков

Смысл

x1x

Не была определена сторона улицы.

x2x ( + / – )

Номер дома попал в заданные пределы для данной улицы.

x3x ( + / – )

Номер дома оказался вне заданных пределов для данной улицы.

x4x ( + / – )

Номер дома не задан.

x5x ( – )

Улицы не пересекаются.

x6x ( – )

Улицы пересекаются более одного раза.

x7x ( + )

Пользователь выбрал номер дома в диалоговом окне Interactive.

Значения сотен

Смысл

1xx ( + / – )

Имя найдено только один раз вне уточняющей области.

2xx ( – )

Имя найдено в нескольких регионах, но не в уточняющей

 

области.

3xx ( + / – )

Имя найдено только один раз, но уточняющая область не была

 

задана.

4xx ( – )

Имя найдено несколько раз, но уточняющая область не была

 

задана.

5xx ( + )

Имя найдено несколько раз в уточняющей области.

6xx ( + )

Пользователь выбрал имя области в диалоговом окне Interactive.

Справочник MapBasic

233

Оператор Find

Определить, какая цифра находится в определенном разряде числа Вам поможет арифметический оператор Mod. Например, чтобы определить последнюю цифру в числе, используйте деление по модулю 10. Чтобы определить две последние цифры в числе, используйте деление по модулю 100 и так далее.

Разницу между точным совпадении и приблизительным можно пояснить на следующем примере. Если таблица, содержащая имена городов, содержит одну запись для города "Albany", и оператор Find Using задает поиск без уточняющей области, и оператор Find использует значение "Albany" как параметр address, то результатом будет полное совпадение. Следующая за подобной группой операторов функция CommandInfo(CMD_INFO_FIND_RC) возвратит 1 (единицу), что означает точное совпадение.

Теперь представим, что оператор Find действует в режиме использования уточняющей области; другими словами, оператор Find ожидает, что название города будет дополнено названием штата (например, "Albany", “NY"). Если программа выполнит оператор Find со значениями “Albany" как адреса и нулевой строки в качестве уточняющего названия штата, то, с технической точки зрения, точного совпадения не будет, потому что MapBasic ожидал явного задания уточняющей области.

Однако, так как город "Albany" упоминается только в одной записи таблицы, то MapBasic найдет эту запись. Следующая за подобной группой операторов функция Command4 Info(CMD_INFO_FIND_RC) возвратит 301. Цифра 1 обозначает совпадение адреса с названием города из таблицы, а цифра 3 означает частичный успех при поиске уточняющей области.

Если таблица улиц содержит запись для улицы "Main St" и оператор Find пытается найти улицу "Main Street", MapBasic оценит результат как частичное совпадение (принимая во внимание использование файла сокращений, смотрите также описание Find Using). Строго говоря, строки "Main Street" и "Main St" не совпадают. Однако MapBasic определяет равенство этих строк, применяя подстановки из файла сокращений (MAPINFOW.ABB). Следующая за подобной группой операторов функция CommandInfo(CMD_INFO_FIND_RC) возвратит 2.

Если операция поиска сопровождается диалогом, в котором пользователь вводит свой текст, то код возврата будет иметь 1 (единицу) в разряде миллионов. Более подробная информация о геокодировании приведена в Справочнике MapInfo.

Пример:

Include ”mapbasic.def”

Dim x, y As Float, win_id As Integer

Open Table ”states” Interactive Map From States

win_id = FrontWindow()

Find Using states(state) Find ”NY”

If CommandInfo(CMD_INFO_FIND_RC) >= 1 Then x = CommandInfo(CMD_INFO_X)

y = CommandInfo(CMD_INFO_Y) Set Map

Window win_id Center (x, y)

234

Справочник MapBasic

Оператор Find

Теперь содадим объект для маркировки найденого.

Точечный объект помещается на Косметическом слое. Insert Into

WindowInfo( win_id, WIN_INFO_TABLE) (Object) Values ( CreatePoint(x, y) )

Else

Note ”Объект не найден.”

End If

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

Find Using

Справочник MapBasic

235

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