Работа с GMT под Windows

Generic Mapping Tools (Универсални картографски инструменти, GMT) е набор от програми с отворен код за обработка и визуализация на информация в двумерен и тримерен вид, растеризация, филтрация и други алгоритми за обработка на изображения в различни картографски проекции. Посредством GMT се създават професионални карти за илюстрация в печатни и електронни издания, включително и в Уикипедия.
В тази статия с помощта на пример се описват принципите на създаване на географски карти с помощта на GMT, като се обсъждат някои особенности при работата под операционната система Windows.
1 Увод
Подробно описание на Linux версията на GMT на английски език има на сайта на Хавайския университет. Дистрибутивът на Windows версията на GMT <ref> включва архив с обем 15 Мбайта с официална документациея за Linux версията във формати w:PDF и w:HTML. Тази документация обаче е бедна откъм примери за изпълнение на картографски задачи.
Рускоезичните материали за работа с GMT са фрагментарни. Една от малкото статии в Интернет се отнася за Linux версията на GMT и не е приложима напълно за Windows версията.
2 Инсталиране на GMT под Windows
2.1 GMT
Дистрибутивът под Windows съдържа:
* Базово инсталиране на GMT (GMT_basic_install.exe) с големина 17 Мбайта, включващо данни със средна детайлност за береговата линия;
* Детайлна информация за бреговата линия (GSHHS_highfull_install.exe) с големина 37 Мбайта;
* Документация (GMT_pdf_install.exe) с големина 15 Мбайт.
Трите файла се активират низависимо в произволна последователност. Програмата се инсталира на адрес C:\programs\GMT, без допълнителни настройки. Утилитите на командния ред са на адрес C:\programs\GMT\bin. Ето и останалите адреси:
Ключови каталози на Windows инсталацията на GMT (C:\programs\GMT…)
Подкаталог, Пояснения
\bin, Утилити на командния ред
\share\doc\gmt\pdf, Документация в PDF-формат
\share\doc\gmt\html, Документация в HTML-формат. Удобна е за първоначално запознаване, тъй като има по-удобни средства за навигация.
\share\doc\gmt\examples, Примери за работа с GMT. Всеки от 23-те примера съдържа команден файл и всички необходими за работата му данни. Резултат от работата на всеки команден файл е създаването на графични изображения като PostScript файлове, удобни за разглеждане и редакция.
\share\pslib, Таблици за кодиране на символи в различни езици. Кодирането на кирилица е във файла ISO-8859-5.ps.
Пътят до ключовите каталози по време на инсталацията се вписват в регистъра на Windows, така че, за извикване на утилит от командния файл не се изисква пълно описание на пътят до него.
2.2 GhostScript и GSView
Изходния файлов формат на GMT е PostScript. За разглеждане на изображенията и преобразуването им в различни графични формати е необходимо инсталирането на някакъв утилит за разглеждане на PostScript файлове. Най-популярна е безплатната програма GhostScript, която може да се изтегли от сайта на разработчиците.
За нормална работа с PostScript файлове трябва да се инсталират две програми: интерпретатор на PS файлове GhostScript и графическа обвивка за разглеждането им GSView. С инсталирането им, програмите са готови за работа като PS-файловете се избират стандартно с двойно кликване на мишката.
2.3 Цифров модел на релефа
За създаване на физически и топографски карти са необходими данни за височина на терена. Най популярни безплатни бази данни за релефа са GLOBE с разделителна способност от 900 м които могат да се свалят от сайта на Националния център за геофизически данни към w:NOAA. Данните са разделени в 16 файла с големина от 6 до 59 Мбайта, всеки от които се отнася за определена част от земната повърхност. Например h10g.gz (28 Мбайта) обхваща част от юго-източна Азия с координати 90-180° и.д. и 0-50° с.ш. На сайта има възможност да се даде заявка само за определен фрагмент от файла. Архивът се изпраща на указания имейл адрес.
Файловете се разархивират в каталога C:\programs\GMT\share\dbase. В намиращия се в тази папка файл grdraster.info се регистрират внесените файлове. Например при внасяне на всички 16 файла, файлът grdraster.info добива вида:
1 "GLOBE_G" "m" -R-180/-90/50/90 -I0.5m P i 1 0 -500 a10g
2 "GLOBE_G" "m" -R-90/0/50/90 -I0.5m P i 1 0 -500 b10g
3 "GLOBE_G" "m" -R0/90/50/90 -I0.5m P i 1 0 -500 c10g
4 "GLOBE_G" "m" -R90/180/50/90 -I0.5m P i 1 0 -500 d10g
5 "GLOBE_G" "m" -R-180/-90/0/50 -I0.5m P i 1 0 -500 e10g
6 "GLOBE_G" "m" -R-90/0/0/50 -I0.5m P i 1 0 -500 f10g
7 "GLOBE_G" "m" -R0/90/0/50 -I0.5m P i 1 0 -500 g10g
8 "GLOBE_G" "m" -R90/180/0/50 -I0.5m P i 1 0 -500 h10g
9 "GLOBE_G" "m" -R-180/-90/-50/0 -I0.5m P i 1 0 -500 i10g
10 "GLOBE_G" "m" -R-90/0/-50/0 -I0.5m P i 1 0 -500 j10g
11 "GLOBE_G" "m" -R0/90/-50/0 -I0.5m P i 1 0 -500 k10g
12 "GLOBE_G" "m" -R90/180/-50/0 -I0.5m P i 1 0 -500 l10g
13 "GLOBE_G" "m" -R-180/-90/-90/-50 -I0.5m P i 1 0 -500 m10g
14 "GLOBE_G" "m" -R-90/0/-90/-50 -I0.5m P i 1 0 -500 n10g
15 "GLOBE_G" "m" -R0/90/-90/-50 -I0.5m P i 1 0 -500 o10g
16 "GLOBE_G" "m" -R90/180/-90/-50 -I0.5m P i 1 0 -500 p10g
Ако някой от тези 16 файла липсва, то съответния ред се заменя със символа # в първа позиция. При формиране на изображението на релефа обръщението към съответните данни става според номера, който стои в началото на реда. Задължително изискване е номерата да са уникални, без значение на кой ред какъв номер стои.
Съществува и по-подробна база данни за релефа на земната повърхност: базата STRM3 (с разрешителна способност от 90 м) и базата STRM1 (на територията на САЩ с дискретизация от 30 м), които могат да се свалят от сайта на w:НАСА .
Например файлът съдържа информация за релефа на земната повърхност в диапазона 43—44° с.ш. и 132—133° и.д. Файлът N43E132.hgt с големина 2,8 Мбайта съдържа информация за земната повърхност през 3 секунди във вид на двубайтови числа. Този файл има друг формат в сравнение с файловете на проекта GLOBE и при еднакво покритие на територията е около 100 пъти по-голям по размер (като има 10 пъти по-добра разрешителна способност). Този файл се преобразува във формат GRD, приет в GMT, посредством командата:
xyz2grd N43E132.hgt -Dm/m/m/1/0/=/= -GN43E132.grd -R132/133/43/44 -I3c -N-9999 -ZTLhw
Значението на параметрите на командата се описват по-нататък.
2.4 Батиметрична информация
За да се изобразят върху картите дълбочините на световния океан, се използват данни за релефа на морското дъно, например от сайта.
2.5 Поддръжка на шрифтове на кирилица
Кирилизацията на GMT става със зареждане на кодова таблица ISO-8955-5 посредством утилита gmtset.exe. В началото на командния файл се постави реда
gmtset CHAR_ENCODING ISO-8859-5
Използването на кодова таблица ISO-8859-5 не решава проблемът с кирилизацията на GMT по две причини:
* Таблицата за ISO-8859-5 е пренесена от Linux-версията без промяна, като кодировката се различава от стандартната кирилизация на Windows - cp1251. Например, буквите А-Я, а-я (без буквите Ё, ё) в cp1251 заемат диапазона 192—255, а в ISO-8859-5 — 176—239, т.е. е изместена с 16 символа. Буквите E,ё в cp1251 заемат кодове 168, 184, а в ISO-8859-5 — 161, 241;
И в двете кодови таблици ISO-8859-5 и cp1251 липсват символите /ring и /quotesingle, с които в GMT се обозначават градусите и минутите. Затова при изрисуване, например, на координатна мрежа, програмата изкарва предупреждение и вместо тези символи символов оставя пробели.
Решението на този проблем е отредактирването на файла, в който е записана таблица на кодиране:
* Да се замени таблицата на изходната Linux версия със стандартната таблица cp1251;
* Да се изберат два кода, които в кодировка cp1251 не се използват на практика и да се заменят със символите /ring и /quotesingle.
Файловете с кодировъчните таблици се намират в каталога C:\programs\GMT\share\pslib\. Кодировката по подразбиране се съдържа във файла Standard+.ps, а кодировката ISO-8859-5 — във файла ISO-8859-5.ps. За да се съхрани многоезична поддръжка на GMT, трябва да се коригира файла ISO-8859-5.ps. Ако многоезичната поддръжка не е астуална, може да се поправи файлът Standard+.ps. В този случай даже не е необходимо превключване на кодовата таблица посредством командата gmtset, както е показано по-горе.
Препоръчителното съдържание на файла Standard+.ps е следното (текстът може да се прекопира от екрана във файл):
/Standard+_Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus /comma /minus /period /slash
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G
/H /I /J /K /L /M /N /O
/P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/quoteleft /a /b /c /d /e /f /g
/h /i /j /k /l /m /n /o
/p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /tilde /.notdef
/ring /quotesingle /quotesinglbase /afii10100 /quotedblbase /ellipsis /dagger /daggerdbl
/Euro /perthousand /afii10058 /guilsinglleft /afii10059 /afii10061 /afii10060 /afii10145
/afii10099 /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/tilde /trademark /afii10106 /guilsinglright /afii10107 /afii10109 /afii10108 /afii10193
/space /afii10062 /afii10110 /afii10057 /currency /afii10050 /brokenbar /section
/afii10023 /copyright /afii10053 /guillemotleft /logicalnot /hyphen /registered /afii10056
/degree /plusminus /afii10055 /afii10103 /afii10098 /mu1 /paragraph /periodcentered
/afii10071 /afii61352 /afii10101 /guillemotright /afii10105 /afii10054 /afii10102 /afii10104
/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097
] def
Ако се заменя съдържанието на файла ISO-8859-5.ps, първият ред трябва да бъде следния:
/ISO-8859-5_Encoding [
3 Работа с GMT. Пример
3.1 Създаване на изображение за релефа
Преди да се започне изрисуването на картата, трябва да се преобразува цифровия модел на релефа в растерно изображение. Да вземем за пример фрагмент от базата GLOBAL (а именно — Юго-източна Азия във файла h10g, тъй като ще рисуваме карта на Приморския край). Този фрагмент се взима от архива h10g.gz, разархивира се с програма поддържаща формата gz, поставя се в каталога C:\programs\GMT\share\dbase, като се прави регистрация във файла grdraster.info на същия каталог посредством добавянето на ред от вида:
8 "GLOBE_G" "m" -R90/180/0/50 -I0.5m P i 1 0 -500 h10g
Преобразуването на цифровия модел на релефа в растр става с командата:
grdraster 8 -R90/180/0/50 -Gh.grd
Значението на параметрите на командата grdraster са указани в таблицата:
Параметър, Пояснение
8, Номер, под който изходния файл е регистриран във файла C:\programs\GMT\share\dbase\grdraster.info.
-R90/180/0/50, Областта, която се преобразува в растер. В дадения пример се преобразува областта 90-180° и.д., 0-50° с.ш., т.е. целият диапазон от координати за файла h10g. Ако по-нататък няма да се създава карта за цялата територия, то за икономия на време и място е желателно да се преобразува само нужния фрагмент. Например, за картата на Приморския край е достатъчно (с малък запас) -R129/141/42/50.
-Gh.grd, Име на изходния файл (h.grd).
3.2 Създаване на полусенки
За създаване на по-реалистични изображения върху физически карти е желателно да се използват полусенки, които подчертават особености на релефа. Създава се усещане за осветеност на обекта от някакъв виртуален източник на светлина и впечатление и впечатление за обемност на изображението. За тази цел се създава растерно изображение на полусенките и при изрисуване на картата се налага върху основното изображение на релефа. В този случай се използва утилита grdgradient и изображението на релефа, създадено от предната стъпка:
grdgradient h.grd -Ne0.3 -A100 -M -Ghi.grd
Значението на параметрите за командата grdgradient са указани в таблицата:
Параметър, Пояснение
h.grd, Изходен файл с изображението, по което се оформят полусенките.
-Ne0.3, Интензивност на полусенките в относителни единици. В дадения случай — 0,3
-A100, Положение на виртуалния осветяващ източник. В дадения пример азимутът на зсточника е 100° по часовата стрелка от север, т.е. югоизточно на 10°.
-M, ?
-Ghi.grd, Име на изходния файл (hi.grd).
3.3 Палитра на релефа
Палитрата на релефа се задава във файл, като се задава съответствието между височината на релефа и цвета, който се нанася на съответния участък. По-долу е показан пример на палитра. Да наречем файла mount.cpt:
#file mount.cpt
#COLOR_MODEL = RGB
#
0 96 185 96 200 16 122 47
200 16 122 47 500 232 215 125
500 232 215 125 1000 161 67 0
1000 161 67 0 1500 130 30 30
1500 130 30 30 2200 110 110 110
N 0 97 71
F 255 0 0
B 0 97 71
Редове 1 и 3 са коментарии.
В ред 2 (#COLOR_MODEL = RGB) се обявява цветовия модел (RGB).
В редове 4—8 се задава съответствието между височината и цветовете. Всеки ред има формат
H<sub>min</sub> R<sub>1</sub> G<sub>1</sub> B<sub>1</sub> H<sub>max</sub> R<sub>2</sub> G<sub>2</sub> B<sub>2</sub>,
където H<sub>min</sub> и H<sub>max</sub> са минималната и максималната височини в диапазона; R<sub>1</sub>, G<sub>1</sub>, B<sub>1</sub>, и R<sub>2</sub>, G<sub>2</sub>, B<sub>2</sub> са соответстващите цветове във формата RGB. Цветовете, в интервала между H<sub>min</sub> и H<sub>max</sub> се изчисляват посредством линейна интерполация интерполяцией на граничните цветове R<sub>1</sub>G<sub>1</sub>B<sub>1</sub> и R<sub>2</sub>G<sub>2</sub>B<sub>2</sub>.
Редовете, започващи със символите B, F, N определят цвета на фона (когато височината на точката е по-малка от долната граница на интервала), предния план (когато височината на точката превишава горната граница на зададения интервал) и точки, в случаите когато височината на релефа е неизвестна.
В редове 4—8 числата са разделени с табулация, в останалите редове - с пробели. Количеството редове, задаващи отделните интервали за височините са неограничени. Диапазонът на височините трябва да притежават съседни граници, т.е. H<sub>max</sub> на един от редовете трябва да е равен на H<sub>min</sub> на друг ред (освен минималната H<sub>min</sub> и максималната H<sub>max</sub>) граница на целия интервал. Ако някъде границите се припокриват или има прекъсване между тях, това се отчита като грешка.
3.4 Изрисуване на релефа
За изрисуване на релефа се използва утилита grdimage:
grdimage h.grd -Ihi.grd -R130/42/140.8/49.8r -JB135/46/42/50/6i -Cmount.cpt -K > map.ps
Параметър, Пояснение
h.grd, Изходния файл с изобразяване на релефа.
-Ihi.grd, Изходния файл с изобразяване на полусенките (hi.grd).
-R130/42/140.8/49.8r, Координати на показваната територия.
-JB135/46/42/50/6i, Вид и параметри на картографската проекция.
-Cmount.cpt, Файл с описание на цветовата палитра за изобразяване нарелефа.
-K, Ключ, указващ, че изготовката на изходния файл с дадената команда не е завършено.
> map.ps, Пренасочване на изходящите потоци от стандартното устройство за изход (монитор) към файла map.ps.
3.5 Изрисуване на водни обекти, граници и координатната мрежа
pscoast -R -J -S151/190/255 -O -K -Df -B2g1 -W0.25p,royalblue -Na/1p,white -Ia/0.25p,blue -Lf141.7/-43.5/-43/200 >> map.ps
Параметър, Пояснение
-R, Координати на изобразяваната територия. Тъй като числени данни не са указани, се вземат данните от Параметъра -R на предната команда.
-J, Вид и Параметъри на картографската проекция. Тъй като числени данни не са указани, се вземат данните от Параметъра -R на предната команда.
-R130/42/140.8/49.8r, Координати на изобразяваната територия.
-JB135/46/42/50/6i, Вид и Параметри на картографската проекция.
-S151/190/255, Цвят за изрисуване на (R/G/B) водната повърхност.
-K, Ключ, указващ, че създаването на изходния файл с настоящата команда не е завършено.
-O, Ключ, указващ, че командата е продолжение на предна команда.
-Df, Качество на изрисуване на границите на водните басейни.
-B2g1, Изписване на координатите и координатната мрежа. Числовите значения на координатите се представят през 2 градуса, а координатните линии през 1 градус.
-W0.25p, royalblue, Линия за изрисуване на границите на водните басейни. Дебелина на линията 0,25, цвят — тъмносин (royalblue).
-Na/1p, white, Линия за изрисуване на граници. Дебелина на линията 1, цвят — бял (white). Символът «а» означава, че линията се отнася за всички видове граници.
-Ia/0.25p, blue, Линия за изрисуване на реки.
Lf141.7/-43.5/-43/200, Изписване на мащабната линия.
>> map.ps, Изходните данни на програмата се дописват в края на файла map.ps.
4 Забележки
ru:Работа с GMT под Windows