В цьому уроці підручника «Геоінформаційні системи» буде показано, як створювати прості топографічні карти на основі вільних географічних даних засобами вільного програмного забезпечення (набору програм GMT).

Перед початком уроку слід ознайомитись з довідкою «Звідки взяти дані для географічних карт».

Підтримка кирилиці

Програми з набору GMT працюють з текстовими рядками, що мають 1-байтове (8-бітне) кодування. Кирилічні тексти підтримує кодування ISO-8859-5. Аби встановити цю кодову сторінку, слід виконати команду: GMT gmtset CHAR_ENCODING ISO-8859-5

Недоліком цієї кодової сторінки є те, що вона не підтримує стандартних символів градуса та хвилини, які використовують програми з набору GMT для позначення на картах. Виправити цю проблему можна додаванням відповідних символів до файлу з кодуванням. В системах Linux цей файл матиме ім'я: /usr/share/gmt/pslib/ISO-8859-5.ps в системах Windows цей файл може мати ім'я: C:\programs\GMT\share\pslib\ISO-8859-5.ps Файл, яким визначене стандартне кодування має ім'я Standard+.ps.

Слід обрати позиції символів, що не використовуються, та замінити їх на символи /ring та /quotesingle. Можна навіть замінити весь файл на кодування Windows-1251, тоді на системах Windows не доведеться змінювати кодування текстових рядків в командах та текстових файлах. Наприклад, файл стандартного кодування може мати такий вигляд: /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

Програма iconv зручно і швидко виконує перекодування між різними кодовими сторінками. Достатньо виконати одну команду: iconv -t ISO-8859-5 < системне_кодування.sh > кодування_iso.sh Аби змінити кодування в файлі системне_кодування.sh на бажане кодування ISO-8859-5. Кодова сторінка Windows-1251 в програмі iconv також зветься і cp1251: iconv -t cp1251 < системне_кодування.sh > кодування_win.sh

Південна Африка

Початок роботи

Для створення карти знадобиться дві шкали кольорів: для суходолу, та для океанського дна.

# Файл afrika_land.cpt 0 0 97 71 100 16 122 47 100 16 122 47 500 232 215 125 500 232 215 125 1500 161 67 0 1500 161 67 0 3000 130 30 30 3000 130 30 30 4000 110 110 110 4000 110 110 110 5000 255 255 255 5000 255 255 255 6000 255 255 255 B 0 97 71 F 255 255 255 N 255 255 255 Другий файл, шкала кольорів для океанського дна: # Файл afrika_sea.cpt -12000 36 38 175 -8000 56 58 195 -8000 56 58 195 -4000 70 72 214 -4000 70 72 214 -2000 81 102 217 -2000 81 102 217 -1000 100 129 223 -1000 100 129 223 -500 131 161 230 -500 131 161 230 -200 164 192 240 -200 164 192 240 0 170 200 255 B 36 38 175 F 170 200 255 N 255 255 255

В цьому прикладі використані дані з набору ETOPO1, файл ETOPO1_Ice_c_gmt4.grd. Після завантаження запакованого файлу в форматі GNU Zip (.gz) та розпакування, слід створити витяг бажаного прямокутника: GMT grdcut ETOPO1_Ice_c_gmt4.grd -R-10/70/-50/10 -Gafrika.grd

Пояснення: GMT grdcut виклик програми grdcut, яка і створює необхідний витяг -R0/-36/52/0r прямокутник, який визначається двома кутами: нижнім лівим (0° довготи та -36° широти); та верхнім правим (52° довготи та 0° широти). -Gafrika.grd результати роботи будуть збережені в файлі afrika.grd.

Крок 1

Виконати команду: GMT grdgradient afrika.grd -A45 -Ne0.5 -Gafrika_gradient.grd</code>

Пояснення: GMT grdgradient ефект відмивки обчислює програма grdgradient afrika.grd джерелом даних вказаний файл afrika.grd -A45 азимут джерела світла. В цьому випадку, дорівнює -45°, тобто, північний схід. -Ne0.5 ефект відмивки буде нормалізованим (-N). Параметр "e" вказує, що буде використано розподіл Лапласа. Інтенсивність дорівнює 0.5. -Gafrika_gradient.grd результати обчислень будуть збережені в файлі afrika_gradient.grd.

Крок 2

Виконати команду: GMT grdimage afrika.grd -Cafrika_sea.cpt -JL30/-20/-28/-12/18c -R0/-36/52/0r -X1.5c -Y8c -P -K >afrika.ps

Пояснення: grdimage гіпсометрична карта буде обчислена програмою grdimage afrika.grd джерелом даних вказаний файл afrika.grd -Cafrika_meer.cpt параметром -C як шкала кольорів вказаний файл afrika_sea.cpt -JL30/-20/-28/-12/18c параметром -J вказана картографічна проекція Ламберта. Центр проекції знаходиться за координатами 30° довготи та -20° широти. Стандартні паралелі -28° та -12° широти. Результат буде шириною 18 см. -R0/-36/52/0r прямокутник, який визначається двома кутами: нижнім лівим (0° довготи та -36° широти); та верхнім правим (52° довготи та 0° широти). -X1.5c центр координат посунуто в напрямі вісі x (-X) на 1.5 см від краю аркуша. -Y8c центр координат посунуто в напрямі вісі y (-Y) на 8 см від краю аркуша. -P аркуш розгорнуто в форматі "портрету". -K це не остання команда >afrika.ps результат обчислень буде додано до PostScript файлу з іменем afrika.ps

Крок 3 Виконати команду: GMT pscoast -JL30/-20/-28/-12/18c -R0/-36/52/0r -Gc -Di -P -K -O >>afrika.ps

Пояснення: GMT pscoast команда pscoast запам'ятає границі суходолу -JL30/-20/-28/-12/18c параметром -J вказана картографічна проекція Ламберта. Центр проекції знаходиться за координатами 30° довготи та -20° широти. Стандартні паралелі -28° та -12° широти. Результат буде шириною 18 см. -R0/-36/52/0r прямокутник, який визначається двома кутами: нижнім лівим (0° довготи та -36° широти); та верхнім правим (52° довготи та 0° широти). -Gc параметр -Gc зазначає, що вказані границі служитимуть як края відсікання -Di точність ліній -D середня "i". -P аркуш розгорнуто в форматі "портрету". -K це не остання команда -O це не перша команда >>afrika.ps результат обчислень буде додано до PostScript файлу з іменем afrika.ps

Після виконання цієї команди будуть вказані края відрізання за лінією границі суходолу. Тому на наступному кроці карта океанського дна не буде затерта картою рельєфу на суходолі. Ці края буде знято командою на 5 кроці.

Крок 4

Виконати команду: GMT grdimage afrika.grd -Iafrika_gradient.grd -Cafrika_land.cpt -JL30/-20/-28/-12/18c -R0/-36/52/0r -P -K -O >>afrika.ps

Пояснення: grdimage гіпсометрична карта буде обчислена програмою grdimage afrika.grd джерелом даних вказаний файл afrika.grd -Iafrika_schatten.grd для створення ефекту відмивки "-I" будуть використані дані з файлу afrika_gradient.grd -Cafrika_land.cpt параметром -C як шкала кольорів вказаний файл afrika_land.cpt -JL30/-20/-28/-12/18c параметром -J вказана картографічна проекція Ламберта. Центр проекції знаходиться за координатами 30° довготи та -20° широти. Стандартні паралелі -28° та -12° широти. Результат буде шириною 18 см. -R0/-36/52/0r прямокутник, який визначається двома кутами: нижнім лівим (0° довготи та -36° широти); та верхнім правим (52° довготи та 0° широти). -P аркуш розгорнуто в форматі "портрету". -K це не остання команда -O це не перша команда >>afrika.ps результат обчислень буде додано до PostScript файлу з іменем afrika.ps

Крок 5 Виконати команду: GMT pscoast -JL30/-20/-28/-12/18c -R0/-36/52/0r -Q -K -O >>afrika.ps

Пояснення: GMT pscoast команда pscoast запам'ятає границі суходолу -JL30/-20/-28/-12/18c параметром -J вказана картографічна проекція Ламберта. Центр проекції знаходиться за координатами 30° довготи та -20° широти. Стандартні паралелі -28° та -12° широти. Результат буде шириною 18 см. -R0/-36/52/0r прямокутник, який визначається двома кутами: нижнім лівим (0° довготи та -36° широти); та верхнім правим (52° довготи та 0° широти). -Q зняття краю відсікання, встановленого на 3 кроці -K це не остання команда -O це не перша команда >>afrika.ps результат обчислень буде додано до PostScript файлу з іменем afrika.ps

Після виконання цієї команди буде знято края відсікання, встановлені на 3 кроці. Тепер наступні команди стосуватимуться всієї карти.

Крок 6 Виконати команду: GMT pscoast -JL30/-20/-28/-12/18c -R0/-36/52/0r -Ba10g10 -W0.25p,40/40/120 \ -Ia/0.25p,40/40/120 -N1/0.75p,255/255/255 -Di -Lfx15.5c/1c/-20/1000 \ -P -K -O --LABEL_FONT_SIZE=14p --ANNOT_FONT_SIZE_PRIMARY=12p >>afrika.ps

Пояснення: pscoast програма pscoast може також наносити лінії кордонів на карту -JL30/-20/-28/-12/18c параметром -J вказана картографічна проекція Ламберта. Центр проекції знаходиться за координатами 30° довготи та -20° широти. Стандартні паралелі -28° та -12° широти. Результат буде шириною 18 см. -R0/-36/52/0r прямокутник, який визначається двома кутами: нижнім лівим (0° довготи та -36° широти); та верхнім правим (52° довготи та 0° широти). -Ba10g10 будуть нанесені лінії широти і довготи (-B). Кожні 10 градусів буде проведена лінія (a10) та напис (g10). -W0.25p,40/40/120 лінії узбережжя (-W) мають ширину 0.25 пункта і колір 40/40/120 в просторі RGB. -Ia/0.25p,40/40/120 лінії річок (-I) всіх категорій (a) мають ширину 0.25 пункта та колір 40/40/120 в просторі RGB. -N1/0.75p,255/255/255 лінії кордонів (-N) типу 1 (країни) мають ширину 0.75 пункта та колір 255/255/255 в просторі RGB. -Di точність ліній (-D) середня (i). -Lfx15.5c/1c/-20/1000 шкала масштабу чорнобіла структурована (-Lf). Вона знаходиться по відношенню до нижнього лівого кута (x) карти на відстані 15.5 см від лівого та 1 см нижнього краю карти. Масштаб обчислений на -20° ширини і становить 1000 км завдовшки. -P аркуш розгорнуто в форматі "портрету". -K це не остання команда -O це не перша команда --LABEL_FONT_SIZE=14p розмір шрифта для позначення масштабу становитиме 14 пунктів --ANNOT_FONT_SIZE_PRIMARY=12p розмір шрифта для позначення довготи і широти становитиме 12 пунктів. >>afrika.ps результат обчислень буде додано до PostScript файлу з іменем afrika.ps

Крок 7

Виконати команду: GMT psscale -Cafrika_land.cpt -D0.5c/2.5c/4c/0.4c -B:"m": -L -P -O --LABEL_FONT_SIZE=14p --ANNOT_FONT_SIZE_PRIMARY=12p >>afrika.ps

Пояснення: psscale використаємо команду psscale для створення шкали висот -Cafrika_land.cpt