Приложение D: Создание выражений
Это выражение состоит из двух предложений. Первое указывает, что запись должна относиться к августу или сентябрю, а второе – что она должна относиться к 1990 году. Так как эти предложения связаны оператором “and”, то запись должна удовлетворять обоим условиям, чтобы попасть в выборку.
ObjectLen
Синтаксис: ObjectLen(obj, единица_измерения)
Результат: Возвращает длину линий и ломаных и 0 для остальных объектов.
Когда Вы выбираете ObjectLen в списке функций, в окне выражения появляются скобки с ключевым словом “obj” и текущими единицами длины в двойных кавычках. При составлении выражений обычно предлагается использовать мили (mi). Если Вы хотите вычислить расстояние в других единицах, укажите эти единицы в кавычках.
Допускаются следующие единицы измерения длины:
Название |
Единицы измерения |
”mi” |
ìèëè |
|
|
"km" |
километры |
|
|
"in" |
дюймы |
|
|
"ft" |
ôóòû |
|
|
"survey ft" |
топографические футы |
|
|
”yd” |
ÿðäû |
|
|
"mm" |
миллиметры |
|
|
"cm" |
сантиметры |
|
|
"m" |
метры |
|
|
"nmi" |
морские мили (1 |
|
морская миля равна |
|
1852 метрам) |
|
|
Примеры: Вычисление длины объекта:
94.ObjectLen(obj, "mi")
Вычисление длины объекта в километрах:
95.ObjectLen(obj,"km")
Вычисление длины объекта в морских милях:
96.ObjectLen(obj, "nmi")
Для того, чтобы перевести километры в мили, надо умножить значение на .621.
Выбрать все объекты, длина которых превышает 10 километров:
Приложение D: Создание выражений
97.ObjectLen(obj, "km")>10
Perimeter
Синтаксис: Perimeter(объект, единица_измерения)
Результат: Возвращает периметр таких объектов, как многоугольник, эллипс, прямоугольник и скругленный прямоугольник.
Когда Вы выбираете Perimeter в списке функций, в окне выражения появляются скобки с ключевым словом “obj” и текущими единицами длины в двойных кавычках. При составлении выражений обычно предлагается использовать мили (mi). Если Вы хотите вычислить расстояние в других единицах, укажите эти единицы в кавычках.
Допускаются следующие единицы измерения длины:
Название |
Единицы измерения |
|
|
”mi” |
ìèëè |
|
|
”km” |
километры |
|
|
”in” |
дюймы |
|
|
”ft” |
ôóòû |
|
|
“li” |
линки |
|
|
“rd” |
родсы |
|
|
“ch” |
чейны |
|
|
”survey ft” |
топографические футы |
|
|
”yd” |
ÿðäû |
|
|
”mm” |
милиметры |
|
|
”cm” |
сантиметры |
|
|
”m” |
метры |
|
|
”nmi” |
морские мили (1 морская миля |
|
соответствует 1852 метрам) |
|
|
Примеры: Вычисление периметра объекта:
98.Perimeter(obj, "mi")
Вычисление периметра объекта в километрах:
99.Perimeter(obj, "km")
Вычисление периметра в метрах:
100.Perimeter(obj, "m")
Выбрать все объекты, периметр которых превышает 35 миль:
101.Perimeter(obj, "mi")>35
Приложение D: Создание выражений
Proper$
Синтаксис: Proper$(строка)
Результат: Возвращает строку, в которой первые буквы слов преобразованы в заглавные, а остальные – в строчные.
Примеры: Рассмотрим следующее выражение:102. Proper$(City)
В таблице показано, как преобразуются исходные строки:
Исходная строка |
Результат |
|
|
NEW YORK |
New York |
|
|
New yorK |
New York |
|
|
new york |
New York |
|
|
New York |
New York |
|
|
Right$( )
Синтаксис: Right$ (строка, числовое_выражение)
Результат: Возвращает строку, состоящую из заданного количества символов, находящихся с правого конца строки.
Примеры: Рассмотрим выражение:
103.Right$(City,4)
Будут возвращены последние четыре символа.
Round
Синтаксис: Round(число1, число2)
Результат: Возвращает округленное число1, à число2 задает точность округления.
Примеры: Рассмотрим выражение:
104.Round(number1,number2)
Âпервой колонке таблицы указаны аргументы функции (number1 è number2), а во второй – результат округления.
Аргументы |
Округленное значение |
|
|
14347,10000 |
10000 |
|
|
14347, 100 |
14300 |
|
|
14347, 10 |
14350 |
|
|
12.18353, .1 |
12.20000 |
|
|
12.18353, .001 |
12.18400 |
|
|
Для того, чтобы выбрать все строки таблицы, для которых средний возраст равен 42,
можно использовать выражение:
Приложение D: Создание выражений
105.Round(СРЕД_ВОЗРАСТ, 1) = 42
Âзависимости от типа данных это выражение может дать лучшие результаты, чем прямое сравнение со значением (СРЕД_ВОЗРАСТ=42). Ведь колонка среднего возраста в таблице штатов в MapInfo содержит средний возраст с точностью до одной десятой. При обычном сравнении со значением 42 MapInfo не выберет записи со значениями, скажем, 41.7, 42.1 или 42.4. Но, скорее всего, Вам нужно получить эти записи, и Вы сможете это сделать с помощью округления.
RTrim$
Синтаксис: RTrim$(строка)
Результат: RTrim$ удаляет все пустые символы (пробелы, табуляции и так далее) в конце строки.
Sin
Синтаксис: Sin(числовое_выражение)
Результат: Функция Sin возвращает синус для значения выражения, задающего угол
в радианах.
Str$
Синтаксис: Str$(числовое_выражение)
Результат: Str$ преобразует числовое выражение в строку символов. Если значение выражения отрицательно, первым символом строки является минус (-). Иначе строка начинается с пробела.
UCase$
Синтаксис: UCase$(строка)
Результат: Возвращает строку, все маленькие буквы в которой заменены большими.
Примеры: Рассмотрим следующее выражение:
106.UCase$(City)
Таблица показывает, как преобразуются исходные строки:
Исходная строка |
Результат |
|
|
NEW YORK |
NEW YORK |
|
|
New yorK |
NEW YORK |
|
|
new york |
NEW YORK |
|
|
Val
Синтаксис: Val(строковое_выражение)
Результат: Функция Val преобразует строковое выражение в число. Она игнорирует все табуляции и пробелы в начале строки и пытается найти для первой последовательности символов числовой аналог. Обработка заканчивается, когда встречается нецифровой символ. Если первый символ после отступов и пробелов в начале строки был нецифровой, Val возвращает ноль.
Приложение D: Создание выражений
Примеры: Таблица показывает, как Val выделяет числа из строк:
строковое выражение |
Val(char_expr) |
char_expr |
|
|
|
12 thousand |
12 |
|
|
52 – 62 Brunswick |
52 |
|
|
Eighteen |
0 |
|
|
Box 239 |
0 |
|
|
Weekday
Синтаксис: Weekday(äàòà)
Результат: Возвращает день недели по заданной дате в виде числа от 1 до 7. 1 обозначает воскресенье, а 7 – субботу.
Примеры: Выбрать все строки таблицы, относящиеся к средам:
107.Weekday(date)=4
Выбрать все строки таблицы, относящиеся к средам, четвергам и пятницам:
108.Weekday(date)=any(4,5,6)
Ключевое слово “any” задает выбор строк, в которых дата равна одному из перечисленных дней недели.
Выбрать все записи о пятницах в июле месяце:
109.Weekday(date)=6 and Month(date)=7
Это выражение состоит из двух предложений. Первое использует функцию Weekday и указывает, что запись должна относиться к пятнице. Второе предложение использует функцию Month и указывает, что запись должна относиться к июлю. Так как эти предложения связаны оператором “and”, то запись должна удовлетворять обоим выражениям, чтобы попасть в выборку.
Year
Синтаксис: Year(äàòà)
Результат: Вычисляет год по заданной дате.
Примеры: Найти все записи, относящиеся к 1990 году:
110.Year(date)=1990
Все записи, относящиеся к 1990 или 1991 годам:
111.Year(date)=any(1990,1991)
Все записи, относящиеся к годам с 1985 по 1990 включительно:
112.Year(date)>=1985 and Year(date)<=1990
Это выражение состоит из двух предложений. Первое указывает, что запись должна относиться к 1985 или более позднему году, а второе – что она должна относиться к
Приложение D: Создание выражений
1990 или более раннему году. Так как эти предложения связаны оператором “and”, то
запись должна удовлетворять обоим выражениям, чтобы попасть в выборку.
Приложение E: Регистрация изображений
формата SPOT
Изображения в формате SPOT - это растровые изображения Земли, снятые спутником. Корпорация SPOT Image Corporation поставляет эти изображения под именем SPOTView, и их можно использовать в MapInfo. Изображения в формате SPOT особенно полезны в том случае, когда нужно точно подстроить векторную карту, сравнивая его с растровой подложкой.
В этом приложении описано, как можно, используя заголовочный файл для изображений в формате SPOT, зарегистрировать изображение в MapInfo. Если использовать информацию из заголовочного файла, то можно достичь более точного соответствия карт, чем это позволяет простое наложение.
Чтобы понять информацию из этого приложения, нужно сначала изучить процесс регистрации растрового изображения (см. главу Справочника "Регистрация растрового изображения").
Описанный ниже процесс не гарантирует 100%-ного результата. Ошибки в файле заголовков или проблемы с векторными данными могут привести к тому, что Вам придется перерегистрировать контрольные точки в диалоге "Регистрация растрового изображения".
Частью регистрации SPOT-изображения является выбор правильной координатной системы. Для большинства SPOT-изображений США используются "Universal Transverse Mercator" или "State Plane". Но для SPOT-изображения большинства стран могут использоваться другие координатные системы или может потребоваться создать новую. Это приложение поможет Вам определить, какие режимы следует установить для Вашего SPOT-изображения, а также поможет создать собственную, если нужно.
SPOT файлы
Изображение в формате SPOT описывается несколькими файлами, и не все из них нужны MapInfo. Вот какие файлы нужны MapInfo:
∙Ôàéë.HDR – заголовочный файл в формате ASCII, содержащий информацию о размере изображения, координатной системе и районе съемки.
∙Ôàéë.BIL – двоичный файл, содержащий растровое изображение.
∙Ôàéë.CLR – файл палитры, содержащий список предлагаемых цветов для раскраски изображения. Этот файл поставляется для цветных изображений, и MapInfo прочитывает этот файл, если он есть.
Âпоследних версиях (начиная с SPOTView версии 4.0) добавляется файл с расширением .REP в формате ASCII. Хотя MapInfo его не анализирует, Вы можете
Приложение E: Регистрация изображений формата SPOT
найти в нем много полезной информации, связанной с регистрацией изображения, в
частности, данные о повороте и координатной системе.
Информация о координатной системе и контрольных точках
Как и в случае с другими растровыми изображениями, регистрация SPOT-изображения требует определения координатной системы и создания по меньшей мере трех контрольных точек в диалоге “Регистрация изображения”. Перед тем, как проделать это, нужно выяснить соответствующую информацию из .HDR/REP файлов.
Открыв сопровождающий SPOT-изображение .HDR-файл в текстовом редакторе, Вы увидите приблизительно следующий текст.
SPOTView™ Настройки
!GIS FORMAT HEADER FILE
!IDENTIFICATION BLOCK
PRODUCT_NAME |
SPOTView Custom Frame Special Change Detection |
FORMAT_VERSION |
1.5 |
MAP_FRAME |
22’ X 30’ |
SCENE_ID |
2_595272_910701_165923_2X |
! |
2_595272_930410_171958_2P |
! |
2_595272_930729_170345_2X |
IMAGE_DATE |
01 JUL 91 |
! |
10 APR 93 |
! |
29 JUL 93 |
CORRECTION_LEVEL |
TER |
! IMAGE INFORMATION |
BLOCK |
NCOLS |
4276 |
NROWS |
4251 |
ULXMAP |
522147 |
ULYMAP |
4086917 |
MAPUNITS |
Meters |
XDIM |
10.00 |
YDIM |
10.00 |
NBANDS |
3 |
NBITS |
8 |
LAYOUT |
BIL |
BYTEORDER |
I |
SKIPBYTES |
0 |
BANDROWBYTES |
4276 |
TOTALROWBYTES |
12828 |
|
Приложение E: Регистрация изображений формата SPOT |
BAND_RGB |
321 |
|
! MAP INFORMATION BLOCK |
MAP_NAME |
St Louis, MO Change Detection |
UL_LON/LAT |
|
|
LR_LON/LAT |
|
|
PROJECTION |
Albers Equal Area |
ORIGIN_LON |
W 96,30,00 |
ORIGIN_LAT |
N 00,00,00 |
STD_PARALLEL_1 |
N 36,36,00 |
STD_PARALLEL_2 |
N 43,00,00 |
DATUM |
NAD27 |
Настройки Geospot
Файлы .HDR и .REP содержат настройки, приведенные ниже.
Файл .HDR содержит следующее:
!GIS FORMAT HEADER FILE
!COORDINATE BLOCK
PRODUCT_NAME |
SPOTView Custom Frame Special Change Detection |
FORMAT_VERSION |
1.5 |
MAP_FRAME |
22’ X 30’ |
SCENE_ID |
2_595272_910701_165923_2X |
! |
2_595272_930410_171958_2P |
! |
2_595272_930729_170345_2X |
IMAGE_DATE |
01 JUL 91 |
! |
10 APR 93 |
! |
29 JUL 93 |
CORRECTION_LEVEL |
TER |
! IMAGE INFORMATION |
BLOCK |
NCOLS |
4276 |
NROWS |
4251 |
ULXMAP |
522147 |
ULYMAP |
4086917 |
MAPUNITS |
Meters |
XDIM |
10.00 |
YDIM |
10.00 |
NBANDS |
3 |
NBITS |
8 |
LAYOUT |
BIL |
BYTEORDER |
I |
Приложение E: Регистрация изображений формата SPOT
SKIPBYTES |
0 |
BANDROWBYTES |
4276 |
TOTALROWBYTES |
12828 |
BAND_RGB |
321 |
! CARTOGRAPHIC PARAMETER BLOCK (REP file)
Этого нет в файле .REP:
MAP_NAME |
St Louis, MO Change Detection |
UL_LON/LAT |
|
LR_LON/LAT |
|
PROJ_ID |
Albers Equal Area |
PROJ_MERIDIAN |
W 96,30,00 |
PROJ_PARALLEL |
N 00,00,00 |
STD_PROJ_PARALLEL_1 |
N 36,36,00 |
STD_PROJ_PARALLEL_2 |
N 43,00,00 |
DATUM |
NAD27 |
Информация о координатных системах (только для SPOTViewt)
Первым шагом при регистрации SPOT-изображения является присвоение подходящей координатной системы. Ее можно подобрать, анализируя информацию из .HDR-файла.
Вполне вероятно, что Вы пожелаете открыть SPOT-изображение, использующее не поддерживаемую MapInfo координатную систему. В этом случае Вы должны вручную создать описание этой проекции и добавить его в файл MAPINFOW.PRJ; это простой текстовый файл. В приложении Создание собственной координатной системы
содержится полное описание файла проекций и его компонентов.
Например, рассматривая описанный выше .HDR-файл, Вы можете по значениям PROJECTION и DATUM решить, что можно использовать принятую в MapInfo коническую равноплощадную проекцию Алберса. Однако, просмотрев содержимое файла MAPINFOW.PRJ, Вы увидите, что описание проекции Алберса выглядит немного по-другому:
”--- North American Coordinate Systems ---”
”Albers Equal-Area Conic (North America)”, 9, 62, 7, -96, 23, 20, 60, 0, 0
”Albers Equal-Area Conic (Continental US)”, 9, 62, 7, -96, 23, 29.5, 45.5, 0, 0
”Albers Equal-Area Conic (Alaska)”, 9, 63, 7, -154, 50, 55, 65, 0, 0
”Albers Equal-Area Conic (Hawaii)”, 9, 62, 7, -157, 3, 8, 18, 0, 0
Сравнив значения начальной (нулевой) и стандартной параллели (компоненты с 4 по 7) со значениями ORIGIN_LON, ORIGIN_LAT, STD_PARALLEL_1 и STD_PARALLEL_2 в