Generic Mapping Tools (Универсални картографски инструменти, GMT) е набор от програми с отворен код за обработка и визуализация на информация в двумерен и тримерен вид, растеризация, филтрация и други алгоритми за обработка на изображения в различни картографски проекции. Посредством GMT се създават професионални карти за илюстрация в печатни и електронни издания, включително и в Уикипедия.

Пример за карта на остров w:Ява, създадена с помощта на GMT

В тази статия с помощта на пример се описват принципите на създаване на географски карти с помощта на GMT, като се обсъждат някои особенности при работата под операционната система Windows.

Увод редактиране

Подробно описание на Linux версията на GMT на английски език има на сайта на Хавайския университет. Дистрибутивът на Windows версията на GMT [1] GMT for Windows] включва архив с обем 15 Мбайта с официална документациея за Linux версията във формати w:PDF и w:HTML. Тази документация обаче е бедна откъм примери за изпълнение на картографски задачи.

Рускоезичните материали за работа с GMT са фрагментарни. Една от малкото статии в Интернет [2] се отнася за Linux версията на GMT и не е приложима напълно за Windows версията.

Инсталиране на GMT под Windows редактиране

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, така че, за извикване на утилит от командния файл не се изисква пълно описание на пътят до него.

GhostScript и GSView редактиране

Изходния файлов формат на GMT е PostScript. За разглеждане на изображенията и преобразуването им в различни графични формати е необходимо инсталирането на някакъв утилит за разглеждане на PostScript файлове. Най-популярна е безплатната програма GhostScript, която може да се изтегли от сайта на разработчиците[3].

За нормална работа с PostScript файлове трябва да се инсталират две програми: интерпретатор на PS файлове GhostScript и графическа обвивка за разглеждането им GSView. С инсталирането им, програмите са готови за работа като PS-файловете се избират стандартно с двойно кликване на мишката.

Цифров модел на релефа редактиране

За създаване на физически и топографски карти са необходими данни за височина на терена. Най популярни безплатни бази данни за релефа са GLOBE с разделителна способност от 900 м които могат да се свалят от сайта на Националния център за геофизически данни към w:NOAA[4]. Данните са разделени в 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:НАСА [5].

Например файлът N43E132.hgt.zip съдържа информация за релефа на земната повърхност в диапазона 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

Значението на параметрите на командата се описват по-нататък.

Батиметрична информация редактиране

За да се изобразят върху картите дълбочините на световния океан, се използват данни за релефа на морското дъно, например от сайта[6].

Поддръжка на шрифтове на кирилица редактиране

Кирилизацията на 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 [

Работа с GMT. Пример редактиране

Създаване на изображение за релефа редактиране

Преди да се започне изрисуването на картата, трябва да се преобразува цифровия модел на релефа в растерно изображение. Да вземем за пример фрагмент от базата 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).

Създаване на полусенки редактиране

За създаване на по-реалистични изображения върху физически карти е желателно да се използват полусенки, които подчертават особености на релефа. Създава се усещане за осветеност на обекта от някакъв виртуален източник на светлина и впечатление и впечатление за обемност на изображението. За тази цел се създава растерно изображение на полусенките и при изрисуване на картата се налага върху основното изображение на релефа. В този случай се използва утилита 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).

Палитра на релефа редактиране

 
Изрисуване на релефа посредством утилита grdimage
 
Изрисуване на водните обекти, границите и координатната мрежа посредством утилита pscoast

Палитрата на релефа се задава във файл, като се задава съответствието между височината на релефа и цвета, който се нанася на съответния участък. По-долу е показан пример на палитра. Да наречем файла 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 се задава съответствието между височината и цветовете. Всеки ред има формат

Hmin R1 G1 B1 Hmax R2 G2 B2,

където Hmin и Hmax са минималната и максималната височини в диапазона; R1, G1, B1, и R2, G2, B2 са соответстващите цветове във формата RGB. Цветовете, в интервала между Hmin и Hmax се изчисляват посредством линейна интерполация интерполяцией на граничните цветове R1G1B1 и R2G2B2.

Редовете, започващи със символите B, F, N определят цвета на фона (когато височината на точката е по-малка от долната граница на интервала), предния план (когато височината на точката превишава горната граница на зададения интервал) и точки, в случаите когато височината на релефа е неизвестна.

В редове 4—8 числата са разделени с табулация, в останалите редове - с пробели. Количеството редове, задаващи отделните интервали за височините са неограничени. Диапазонът на височините трябва да притежават съседни граници, т.е. Hmax на един от редовете трябва да е равен на Hmin на друг ред (освен минималната Hmin и максималната Hmax) граница на целия интервал. Ако някъде границите се припокриват или има прекъсване между тях, това се отчита като грешка.

Изрисуване на релефа редактиране

За изрисуване на релефа се използва утилита 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.

Изрисуване на водни обекти, граници и координатната мрежа редактиране

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.

Външни препратки редактиране

Забележки редактиране

  1. [http://gmt.soest.hawaii.edu/gmt/gmt_windows.html
  2. Кондратьев М. Начало работы с GMT (на сайта GIS-Lab).
  3. GhostScript. Официален сайт на разработчика на GhostScript.
  4. GLOBE: Download the Elevation Tiles.
  5. Shuttle Radar Topographry Mission. Топографски данни, получени в проекта SRTM.
  6. ds759.3 Data Access.