- Пакет відображення для Матлаб Ви зібрали свої дані, завантажили їх Матлаб , проаналізував усе...
- Як отримати M_Map
- Приклад коду
- 2. Ламбертова конформальна конічна проекція північноамериканської топографії
- 3. Стереографічна проекція північнополярних регіонів
- 4. Дві перервані прогнози Світового океану
- 5. Косий Меркатор Проекція з сагайдаком та контурними даними
- 6. Проекція Міллера з великим колом
- 7. Конформна проекція Ламберта з батиметрією високої роздільної здатності західного Середземномор'я
- 8. Демонстрація фантазійних векторів
- 9. Збільшити масштаб острова Принца Едварда, щоб показати різні роздільні можливості берегової лінії
- 10. Сліди та проекція UTM
- 11. Діапазонні кільця
- 12. Крапчаста межа
- 13. Блакитний океан
- 14. Одна океанська проекція
- 15. Поетапна кольорова карта
- 16. Батиметрія
- 17. Затінене полегшення (приклад 1)
- 18. Затінене полегшення (Приклад 2)
- 19. Кольорові карти
- Приклади маніпулювання супутниковими даними
- 2. Крижана кришка SSM / I (дані, надані на нерухомій сітці) (формат HDF)
- 3. Аерофотознімки в мережі UTM
- 4. Підмножина глобального набору даних (формат HDF)
- 5. Метеорологічні дані (формат netCDF)
- 6. Дріфтер-треки ARGO (формат netCDF)
- 7. SAR-зображення внутрішніх хвиль (формат HDF-5)
- 8. Затінене полегшення від топографії високої роздільної здатності (формат netCDF)
- 9. Статичний API Google Maps
Пакет відображення для Матлаб
Ви зібрали свої дані, завантажили їх Матлаб , проаналізував усе до смерті, і тепер ви хочете скласти просту карту, що показує, як вона стосується світу.
Але ти не можеш.
Натомість ви повинні з’ясувати, як зберегти всі свої дані, а потім прочитати їх в іншій програмі (наприклад, наприклад GMT ), а потім витрачайте увесь цей додатковий час, з'ясовуючи, чому це не дає вам того, що ви очікували, що це було б ... або ви можете інвестувати у власний набір інструментів картографування Matlab (з аналогічно крутою кривою навчання) ... чи ні!
Оголошення M_Map v1.4k!
(випущено березня / 2019)
M_Map - це набір інструментів для картографування, написаних для Matlab (він також працює під Октава ). M_Map включає:
- Рутинно проектувати дані в 19 різних проекціях (і визначати зворотні відображення), використовуючи сферичні та еліпсоїдальні земні моделі.
- Процедура створення сітки для створення приємних осей з обмеженнями або в лат / довгому, або в планарному X / Y.
- База даних узбережжя (з роздільною здатністю 1/4).
- Глобальна база даних висот (роздільна здатність 1 ступеня).
- Підключається до вільно доступних баз даних берегової лінії високої роздільної здатності та батиметрії.
- Інші корисні речі.
Як отримати M_Map
Ви можете завантажити панель інструментів M_Map або як gzipped tar-файл або як zip-архів (Для завантаження натисніть на ці посилання). Якщо ви розпаковуєте поштовий файл, ЗАБЕЗПЕЧУЙТЕ ВИ ТАКОЖ РЕПАКУВАТИ ПІДПРИЄМСТВО! Обидва мають розмір близько 650 тис. Щойно у вас є цей архів, прочитайте Починаємо розділ Посібник користувача правильно встановити цю панель інструментів та розділи 8.6 і 9.3 встановити ETOPO1 та GSHHS відповідно.
Деяка кількість приклади доступні для виділення різних можливостей M_Map (ескізи показані вище).
M_Map - це програма інструментів програмування. Однак ви також можете вивчити картографування, використовуючи MAP-LAB , графічний інтерфейс користувача (GUI) на основі MATLAB, призначений для створення карт та візуалізації наборів даних, пов’язаних з геодезичними, геофізичними та океанографічними додатками, який побудований поверх M_Map. MAP_Lab доступний тут .
Нове у випуску 1.4k (березень / 2019):
- Нарешті - спосіб обробки піксельних даних за допомогою m_image!
- Перевірено в Octave до версії 4.4.1
Нове у випуску 1.4j (травень / 2018):
- Затінене рельєфне відображення з m_shadedrelief.
- Незалежна сітка для карт UTM з m_utmgrid
Нове у випуску 1.4i (січ / 2018):
- Нарешті було розібрано основні проблеми, пов'язані з графічним двигуном 2014b та пізніших систем matlab, з багатьма незначними покращеннями графіки.
- m_windbarb та m_streamline для метеорологів, також m_scatter.
- Набір корисних кольорових карт в m_colmap, включаючи перцептивно однорідну колоритну карту.
- Кольорова функція m_contfbar створена для роботи з контурними ділянками.
- m_annotation та wysiwyg, щоб допомогти вам додавати стрілки та речі.
- Оновлено документацію, щоб вона не мала такого вигляду "1990-х".
- Додано посилання на китайський переклад Посібника користувача, а також на картографічний графічний графік GUI MAP-LAB, який побудований поверх M_Map.
- Список кодованих прикладів оновлений та додано кілька нових.
Нові у випуску 1.4h (листопад / 2017)
- Підтримка ETOPO2v2 та ETOPO1.
- Обробляв деякі попередження щодо BITMAX, які виникають у Matlab 2014b. Зауважте - мені вдалося лише виправити чи вирішити ДЕЯКІ дійсно поганих помилок у 2014b. Використовуйте обережно (а ще краще не використовуйте). Зокрема, висновок EPS справді жахливий, навіть якщо сюжет екрану виглядає "приємно". На щастя, математика "може розглянути можливість виправити це в майбутніх випусках".
- Додана опція для виведення національних + державних або національних кордонів лише у mggshhs.
Нові у випуску 1,4 г (січ / 2014)
- m_ellipse.m для побудови припливних еліпсів (скажімо, від T_Tide )
- Можливість використання або десяткових градусів, або градусів / десяткових хвилин у мітках осі сітки
- Matlab 2013b має погану помилку у властивості осей dataaspectratio, що впливає майже на все графічне зображення. У цій версії M_Map є вирішення того, що MOSTLY працює, але було б краще уникати використання 2013b.
Новий у випуску 1.4f (травень / 2012)
- m_shaperead.m для читання ШАФЕФІЛІВ! (так Природна Земля може бути використаний для політичних кордонів замість DCW, серед інших можливостей)
- Підтримка gshhs версії 2
- часткова сумісність OCTAVE
Нове у випуску 1.4e (травень / 2010)
- GSHHS Тепер постачається з базою даних річок і кордонів СДБ, а посилання на них додані через m_gshhs.m
- Еліпсоїдальні Альбер та Ламберт конічні проекції включені
Новий у випуску 1.4d (жовтень 2007)
- Модифікації для усунення помилок в контурі matlab7
- Проекція Робінсона
- Кілька проблем із сумісністю з поточними версіями matlab
- Оновлені гачки в деяких базах даних.
Новий у випуску 1.4b (черв. 2006)
- m_hatch для вилуплених та крапчастих латок
- старомодні крапчасті берегові лінії (добре для фотографій, пов'язаних з B&W - див. див Приклад 13 ).
- m_lldist тепер також повертає бали за великою геодезикою кола.
- m_fdist, m_idist та m_geodesic для геодезики на еліпсоїдальній землі.
Новий у випуску 1.4 (листопад / 2005) є
- m_pcolor
- m_coord (для створення географічних та геомагнітних систем координат)
- Дуже мало виправлень помилок.
- Деякі натяки та приклади додавання даних супутникових зображень до ваших карт.
Приклад коду
1. Логотип M_Map
m_proj ('орто', 'лат', 48 ',' довгий ', - 123'); m_coast ('патч', 'r'); m_grid ('linest', '-', 'xticklabels', [], 'yticklabels', []); патч (.55 * [- 1 1 1 -1],. 25 * [- 1 -1 1 1] -. 55, 'w'); текст (0, - 55., 'M \ _Карта', 'розмір шрифтів', 25, 'колір', 'b', ... 'вертикальна вирівнювання', 'середина', 'горизонтальне вирівнювання', 'центр');
2. Ламбертова конформальна конічна проекція північноамериканської топографії
m_proj ('lambert', 'long', [- 160 -40], 'lat', [30 80]); m_coast ('патч', [1 .85 .7]); m_elev ('контур', [500: 500: 6000]); m_grid ('ящик', 'фантазія', 'галочка', 'в'); кольорова карта (фліппуд (мідь));
3. Стереографічна проекція північнополярних регіонів
% Зауважте, що берегова лінія намальована ЗА сіткою через порядок, в якому% дві підпрограми називаються m_proj ('стереографічний', 'lat', 90, 'довгий', 30, 'радіус', 25); m_elev ('контур', [- 3500: 1000: -500], 'edgecolor', 'b'); m_grid ('xtick', 12, 'tickdir', 'out', 'ytick', [70 80], 'linest', '-'); m_coast ('патч', [. 7 .7 .7], 'edgecolor', 'r');
4. Дві перервані прогнози Світового океану
субплот (211); Подовжки = [- 100 0; -75 25; 0 45; 25 145; 45 100; 145 295; 100 295]; Планки = [8 80; -80 8; 8 80; -80 8; 8 80; -80 0; 0 80]; для l = 1: 7 m_proj ('синусоїдальний', 'довгий', Подовження (l, :), 'lat', Рейки (l, :)); m_grid ('розмір шрифту', 6, 'xticklabels', [], 'xtick', [- 180: 30: 360], ... 'ytick', [- 80:20:80], 'yticklabels', [] , 'linest', '-', 'color', [. 7 .7 .7]); m_coast ('патч', 'g'); закінчення xlabel ("Перервана синусоїдальна проекція Світового океану"); % Щоб побачити всі карти, ми повинні скасувати обмеження осі, встановлене викликами m_grid: set (gca, 'xlimmode', 'auto', 'ylimmode', 'auto'); субплот (212); Подовжки = [- 100 43; -75 20; 20 145; 43 100; 145 295; 100 295]; Рейки = [0 90; -90 0; -90 0; 0 90; -90 0; 0 90]; для l = 1: 6 m_proj ('mollweide', 'long', Slongs (l, :), 'lat', Slats (l, :)); m_grid ('розмір шрифту', 6, 'xticklabels', [], 'xtick', [- 180: 30: 360], ... 'ytick', [- 80:20:80], 'yticklabels', [] , 'linest', '-', 'color', 'k') m_coast ('патч', [. 6 .6 .6]); закінчення xlabel («Перервана Молвейдея проекція світових океанів»); набір (gca, 'xlimmode', 'auto', 'ylimmode', 'auto');
5. Косий Меркатор Проекція з сагайдаком та контурними даними
%% приємно виглядають дані [lon, lat] = meshgrid ([- 136: 2: -114], [36: 2: 54]); u = гріх (лат. / 6);
v = гріх (lon / 6); m_proj (‘косий’, ‘лат’, [56 30], ‘лон’, [- 132 -120], ‘аспект’,. 8); субплот (121); m_coast ('патч', [. 9 .9 .9], 'edgecolor', 'none'); m_grid ('tickdir', 'out', 'yaxislocation', 'right', ... 'xaxislocation', 'top', 'xlabeldir', 'end', 'tickled',. 02); Зачекай; m_quiver (lon, lat, u, v); xlabel ("Імітовані поверхневі вітри"); субплот (122); m_coast ('патч', [. 9 .9 .9], 'edgecolor', 'none');
m_grid ('tickdir', 'out', 'yticklabels', [], ... 'xticklabels', [], 'linestyle', 'none', 'tickled',. 02); Зачекай; [cs, h] = m_contour (lon, lat, sqrt (u. * u + v. * v)); clabel (cs, h, 'розмір шрифту', 8); xlabel ("Імітоване щось інше");
6. Проекція Міллера з великим колом
% Накресліть кругову орбіту lon = [- 180: 180]; lat = atan (tan (60 * pi / 180) * cos ((lon-30) * pi / 180)) * 180 / pi; m_proj ('мельник', 'лат', 82); m_coast ('колір', [0 .6 0]); m_line (lon, lat, 'linewi', 3, 'color', 'r'); m_grid ('linestyle', 'none', 'box', 'fancy', 'tickdir', 'out');
7. Конформна проекція Ламберта з батиметрією високої роздільної здатності західного Середземномор'я
m_proj ('lambert', 'lon', [- 10 20], 'lat', [33 48]); [CS, CH] = m_etopo2 ('контур', [- 5000: 500: 0 250: 250: 3000], 'edgecolor', 'none'); m_grid ('linestyle', 'none', 'tickdir', 'out', 'linewidth', 3); кольорова карта ([m_colmap ('блюз', 80); m_colmap ('залоза', 48)]); скрасити (.5); ax = m_contfbar (1, [. 5 .8], CS, CH); назва (ax, {'Рівень / м', ''}); % Рух вгору, вставляючи порожній рядок
8. Демонстрація фантазійних векторів
m_vec; % Детальну інформацію див. У коді m_vec.m
9. Збільшити масштаб острова Принца Едварда, щоб показати різні роздільні можливості берегової лінії
% Приклад, що показує берегову лінію за замовчуванням і всі різні роздільні здатності% GSHHS берегової лінії, коли ми збільшуємо масштаб на ділянці острова Принца Едуарда. оси clf ('положення', [. 35 .6 .37 .37]); m_proj ('альбер рівної площі', 'лат', [40 60], 'довгий', [- 90 -50], 'прямої', 'в'); m_coast ('патч', [0 1 0]); m_grid ('linestyle', 'none', 'linewidth', 2, 'tickdir', 'out', ... 'xaxisloc', 'top', 'yaxisloc', 'right', 'fontsize', 6); m_text (-69,51, "Стандартна берегова лінія", "колір", "r", "шрифт", "жирний шрифт"); m_ruler ([. 5 .9],. 8,3, "розмір шрифту", 8) осі ("положення", [. 09 .5 .37 .37]); m_proj ('альбер рівної площі', 'лат', [40 54], 'довгий', [- 80 -55], 'прямої', 'в'); m_gshhs_c ('патч', [. 2 .8 .2]); m_grid ('linestyle', 'none', 'linewidth', 2, 'tickdir', 'out', ... 'xaxisloc', 'top', 'fontsize', 6); m_text (-80,52,5, 'GSHHS \ _C (неочищений)', 'color', 'm', 'weightweight', 'bold'); m_ruler ([. 5 .9],. 8,2, 'розмір шрифту ", 8); осі ('положення', [. 13 .2 .37 .37]); m_proj ('альбер рівної площі', 'лат', [43 48], 'довгий', [- 67 -58], 'прямої', 'в'); m_gshhs_l ('патч', [. 4 .6 .4]); m_grid ('linestyle', 'none', 'linewidth', 2, 'tickdir', 'out', 'fontsize', 6); m_text (-66.5,43.5, 'GSHHS \ _L (низький)', 'color', 'm', 'fontweight', 'bold'); m_ruler ([. 5 .9],. 8,3, 'розмір шрифту ", 8); осі ('положення', [. 35 .05 .37 .37]); m_proj ('альбер рівної площі', 'лат', [45,8 47,2], 'довгий', [- 64,5 -62], 'прямої', 'на'); m_gshhs_i ('латка', [. 5 .6 .5]); m_grid ('linestyle', 'none', 'linewidth', 2, 'tickdir', 'out', ... 'yaxisloc', 'right', 'fontsize', 6); m_text (-64.4,45.9, 'GSHHS \ _I (проміжний)', 'color', 'm', ... 'fontweight', 'bold', 'horizontaltalalignment', 'right'); m_ruler ([. 5 .8],. 1,3, 'розмір шрифту', 8); осі ('положення', [. 5 .1 .37 .37]); m_proj ('альбер рівної площі', 'лат', [46.375 46.6], 'довгий', [- 64.2 -63.7], 'прямої', 'на'); m_gshhs_h ('патч', [. 6 .7 .6]); m_grid ('linestyle', 'none', 'linewidth', 2, 'tickdir', 'out', ... 'xaxisloc', 'top', 'yaxisloc', 'right', 'fontsize', 6); m_text (-64.18,46.4, 'GSHHS \ _H (high)', 'color', 'm', 'fontweight', 'bold'); m_ruler ([. 5 .8],. 2,3, "розмір шрифту", 8); осі ('положення', [. 55 .35 .37 .37]); m_proj ('альбер рівної площі', 'лат', [46.55 46.65], 'довгий', [- 63,97 -63,77], 'прямої', 'в'); m_gshhs_f ('патч', [. 7 .9 .7]); m_grid ('linestyle', 'none', 'linewidth', 2, 'tickdir', 'out', ... 'xaxisloc', 'top', 'yaxisloc', 'right', 'fontsize', 6); m_text (-63,95,46,56, 'GSHHS \ _F (full)', 'color', 'm', 'fontweight', 'bold'); m_ruler ([. 5 .8],. 2,3, "розмір шрифту", 8);
10. Сліди та проекція UTM
m_proj ('UTM', 'long', [- 72 -68], 'lat', [40 44]); m_gshhs_i ('колір', 'k'); m_grid ('ящик', 'фантазія', 'галочка', 'в'); m_ruler (1.2, [. 5 .8]); % підробляють тривалість траси = [- 71: .1: -67]; lats = 60 * cos ((lons + 115) * pi / 180); дати = датен (1997,10,23,15,1: 41, нулі (1,41)); m_track (lons, lats, дати, 'ticks', 0, 'times', 4, 'дати', 8, ... 'clip', 'off', 'color', 'r', 'orient', ' вертикально ');
11. Діапазонні кільця
m_proj ('молоток', 'клонг', 170); m_grid ('xtick', [], 'ytick', [], 'linestyle', '-'); m_coast ('патч', 'g'); m_line (100.5,13.5, 'маркер', 'квадрат', 'колір', 'r'); m_range_ring (100.5,13.5, [1000: 1000: 15000], 'color', 'b', 'linewi', 2); xlabel ('кільця дальності в 1000 км від Бангкока');
12. Крапчаста межа
bndry_lon = [- 128,8 -128,8 -128,3 -128 -126,8 -126,6 -128,8]; bndry_lat = [49 50,33 50,33 50 49,5 49 49]; clf; m_proj ('lambert', 'long', [- 130 -121.5], 'lat', [47 51.5], 'rectbox', 'on'); m_gshhs_i ('колір', 'k'); % Берегової лінії ... m_gshhs_i ('спекл', 'колір', 'k'); % із додаванням спекл m_line (bndry_lon, bndry_lat, 'linewi', 2, 'color', 'k'); % Контур площі ... m_hatch (bndry_lon, bndry_lat, 'одиночний', 30,5, 'color', 'k'); % ... із додаванням штрихування m_grid ('linewi', 2, 'linest', 'none', 'tickdir', 'out', 'fontsize', 12); заголовок («Кольорові межі для гарного представлення з B&W», «розмір шрифту», 14); m_text (-128,48, {'Тихий океан', 'Океан'}, 'розмір шрифту ", 18);
13. Блакитний океан
m_proj ('мельник', 'лат', [- 77 77]); m_coast ('патч', [. 7 1 .7], 'edgecolor', 'none'); m_grid ('ящик', 'фантазія', 'linestyle', '-', 'gridcolor', 'w', 'backcolor', [. 2 .65 1]); міст = {'Каїр', 'Вашингтон', 'Буенос-Айрес'}; lons = [30 + 2/60 -77-2 / 60 -58-22 / 60]; lats = [31 + 21/60 38 + 53/60 -34-45 / 60]; для k = 1: 3 [діапазон, ln, lt] = m_lldist ([- 123-6 / 60 lons (k)], [49 + 13/60 латів (k)], 40); m_line (ln, lt, 'color', 'r', 'linewi', 2); m_text (ln (кінець), lt (кінець), sprintf ('% s -% d км', міста {k}, круглий (діапазон))); кінець; назва ("Великі маршрути кола", "розмір шрифту", 14, "шрифт", "жирний шрифт"); набір (gcf, 'color', 'w'); % Потрібно зробити це в іншому випадку "друк" стає озером чорним
14. Одна океанська проекція
% Ця проекція показує всі океани, пов'язані один з одним - зовнішнє кільце% - це узбережжя Азії (завдяки M BO за цю ідею)%, інакше це лише приклад різних типів карт. m_proj ('азимутальна рівна площа', 'радіус', 156, 'lat', - 46, 'довга', - 95, 'гниття', 30); ax1 = subplot (2,2,1, 'align'); m_coast ('патч', 'r'); m_grid ('xticklabel', [], 'yticklabel', [], 'linestyle', '-', 'ytick', [- 60:30:60]); ax2 = subplot (2,2,2, 'вирівняти'); m_elev ('contourf', [- 7000: 1000: 0 500: 500: 3000], 'edgecolor', 'none'); кольорова карта (ax2, [m_colmap ('блюз', 70); m_colmap ('залоза', 30)]); caxis (ax2, [- 7000 3000]); m_grid ('xticklabel', [], 'yticklabel', [], 'linestyle', '-', 'ytick', [- 60:30:60]); ax3 = subplot (2,2,3, 'вирівняти'); кольорова карта (ax3, [m_colmap ('блюз', 70); m_colmap ('залоза', 30)]); caxis (ax3, [- 7000 3000]); m_elev ('зображення'); m_grid ('xticklabel', [], 'yticklabel', [], 'linestyle', '-', 'ytick', [- 60:30:60]); ax4 = subplot (2,2,4, 'вирівняти'); кольорова карта (ax4, [m_colmap ('блюз')]); caxis (ax4, [- 8000 000]); m_elev ('затінений рельєф', 'градієнт',. 5); m_coast ('патч', [. 7 .7 .7], 'edgecolor', 'none'); m_grid ('xticklabel', [], 'yticklabel', [], 'linestyle', '-', 'ytick', [- 60:30:60]); ha = осі ("Позиція", [0 0 1 1], "Xlim", [0 1], "Ylim", [0 1], "Коробка", "Вимкнено", ... "Видно", "Вимкнено ',' Одиниці ',' нормалізовано ',' відсікання ',' вимкнено '); текст (0,5, 0,98, "Ця проекція показує всі океани, пов'язані один з одним", ... "horiz", "center", "fontsize", 20);
15. Поетапна кольорова карта
% отримують дані delta-SA з атласу TEOS-10 gsw при 2500 дбар [LG, LT] = мешгрид (0: 360, -86: 89); dSA = ті (розмір (LG)); dSA (:) = gsw_deltaSA_atlas (3000 * dSA (:), LG (:), LT (:)); % Переставити дані так, щоб вони лежали в межах довготи, які я даю для% проекції ind = [31: 361 1:30]; % Перемістіться лівою стороною вправо dSA = dSA (:, ind); LT = LT (:, інд); LG = LG (:, ind); LG (LG> 30) = LG (LG> 30) -360; % ... і відніміть 360 до деякої довготи clf; m_proj ('robinson', 'lon', [- 330 30]); m_pcolor (LG, LT, dSA * 1000); m_coast ('патч', [. 7 .7 .7], 'edgecolor', 'none'); m_grid ('tickdir', 'out', 'linewi', 2); % Це перцептивно рівномірний колірний масштаб, схожий на струмінь, але в m_colmap% ми можемо додати кілька простих градуйованих кроків, щоб pcolor виглядав трохи більше, як кольорова карта контуру (m_colmap ('jet', 'step', 10)) ; h = кольорова смуга ('північний бік'); назва (h, '\ deltaSA / (г / кг) при 2000 дбар', 'розмір шрифту ", 14); set (h, 'pos', get (h, 'pos') + [. 2 .05 -.4 0], 'tickdir', 'out') безліч (gcf, 'color', 'w'); % Потрібно зробити це в іншому випадку "друк" стає озером чорним
16. Батиметрія
навантаження / океан / багатий / будинок / den14 / VENTS lp = навантаження ('/ океан / багатий / дім / den14 / Linep_201402'); m_proj ('lambert', 'long', [- 160 -115], 'lat', [32 60]); [CS, CH] = m_etopo2 ('контур', [- 7000: 1000: -1000 -500 -200 0], 'edgecolor', 'none'); m_gshhs_f ('патч', [. 7 .7 .7], 'edgecolor', 'none'); h1 = m_line (vents.lon, vents.lat, 'marker', 's', 'color', [0 .5 0], ... 'linest', 'none', 'markerfacecolor', 'w', 'кліп', 'точка'); h2 = m_line (lp.POS (:, 2), lp.POS (:, 1), 'marker', 'o', 'color', 'r', 'linewi', 2, ... 'linest' , 'none', 'markersize', 8, 'markerfacecolor', 'w'); m_grid ('linest', 'none', 'tickdir', 'out', 'box', 'fancy', 'fontsize', 16); легенда ([h1 (1), h2 (1)], "відомі гідротермальні отвори", "станції Line-P", "розташування", "південний захід"); кольорова карта (m_colmap ('блюз')); caxis ([- 7000 000]); [ax, h] = m_contfbar ([. 55 .75], 8, CS, CH, 'endpiece', 'no', 'axfrac',. 05); набір (сокира, 'метр') набір (gcf, 'color', 'w'); % в іншому випадку "друк" стає чорним
17. Затінене полегшення (приклад 1)
m_proj (‘ламберт’, ‘лат’, [5 24], ‘довгий’, [105 125]); set (gcf, 'color', 'w')% Встановити колір тла перед ca_is виклику m_image ([- 6000 0]); кольорова карта (flipud ([flipud (m_colmap ('блюз', 10)); m_colmap ('jet', 118)])); m_etopo2 ('затінений рельєф', 'градієнт', 3); m_gshhs_i ('латка', [. 8 .8 .8]); m_grid ('коробка', 'фантазія'); ax = m_contfbar (.97, [. 5 .9], [- 6000 0], [- 6000: 100: 000], 'edgecolor', 'none', 'endpiece', 'no'); xlabel (сокира, 'метри', 'колір', 'k');
18. Затінене полегшення (Приклад 2)
m_proj ('utm', 'ellipse', 'grs80', 'zone', 10, 'lat', [49 + 15.7 / 60 49 + 21/60], ... 'long', [- 123-15 / 60 -123-3 / 60]); % Використовує багатопроменеву батиметрію з горизонтальною роздільною здатністю 10 м.% Вже регулярно сітки в UTM-координатах з вектором x2 / y2 та% матрицею Z2. caxis ([- 150 0]); кольорова карта ([m_colmap ('вода', 128)]); m_shadedrelief (x2, y2, -Z2, 'маяк', - 45, 'градієнт', 8, 'координата', 'z'); % Додайте кілька затриманих контурів; [cs, h] = контур (x2, y2, Z2, [0: 20: 150], 'колір', 'k'); clabel (cs, h, 'розмір шрифту', 6); затримувати, не впускати; % Земельних частин із збереженого раніше берегової лінії високої роздільної здатності = = [255 214 140] / 255; % Колір CHS діаграми m_usercoast ('/ ocean / rich / more / mmapbase / bcgeo / PNW.mat', 'patch', col); m_usercoast ('/ ocean / rich / more / mmapbase / bcgeo / PNWrivers.mat', 'patch', col); % Lat / long AND сітка UTM m_grid ('tickdir', 'out', 'fontsize', 12, 'linest', 'none', 'xaxisloc', 'top', 'yaxisloc', 'right'); m_utmgrid ('xcolor', 'b', 'ycolor', 'b', 'linest', '-'); m_ruler ([. 5 .8],. 9, 'tickdir', 'out', 'tickled', [. 007 .007]); xlabel ('Гавань Ванкувера', 'колір', 'k');
19. Кольорові карти
Ця команда генерує цифру% У кожному заголовку субплоти є виклик M_COLMAP, який% генерує відображену кольорову карту. %% Використання цих кольорових зображень можна побачити% на інших картах цієї галереї. m_colmap демонстрація
Приклади маніпулювання супутниковими даними
1. Глобальний SST (або будь-яка змінна глобальна сітка Lat / Long)
% NOAA / NASA Pathfinder AVHRR SST продукт% http://podaac.jpl.nasa.gov/sst/ [P, карта] = imread ('../ m_mapWK / 199911h54ma-gdm.hdf'); % Документація для набору даних 54 км дає% цю формулу температури P = 0,15 * подвійний (P) -3; % deg C% ... і визначає цю сітку Lat / Long для даних Plat = 90-.25- [0: 359] *. 5; Plon = -180 + .25 + [0: 719] *. 5; Оскільки сітка прямокутна в lat / long (тобто зовсім не є справді проекцією, хоча вона включена у% m_map під назвою "рівномірна циліндрична"), ми% не хочемо використовувати техніку "зображення". Натомість ...% Створіть сітку, зсунувши на половину точки сітки для обліку% для плоскої pcolor [Plg, Plt] = meshgrid (Plon-0,25, Plat + 0,25); m_proj ('молоток-айтофф', 'в'язкість', - 150); % Замість того, щоб переставляти дані так, щоб його межі відповідали% графіку, я просто малюю їх двічі (ви можете побачити приєднання на 180 Вт% через химерність плоскої кольоровості) (Зверніть увагу, що% усіх глобальних проекцій мають неоднозначність 360 градусів) Plg, Plt, P); затінення плоским; кольорова карта (карта); Зачекай; m_pcolor (Plg-360, Plt, P); затінення плоским; кольорова карта (карта); m_coast ('патч', [. 6 1 .6]); m_grid ('xaxis', 'середина'); % додати стандартну кольорову панель. h = кольорова смуга ('h'); set (get (h, 'xlabel'), 'string', 'AVHRR SST Nov 1999');
2. Крижана кришка SSM / I (дані, надані на нерухомій сітці) (формат HDF)
% Щоденна глобальна концентрація льоду та% Снігоспроможність в реальному часі SSM / I-SSMIS EASE-Grid, версія 5%% Бродзик, Дж. Дж. Та Дж. Стюарт. 2016. SSM майже в режимі реального часу / I-SSMIS EASE-Grid% Щоденна глобальна концентрація льоду та об'єм снігу, версія 5. Боулдер, штат Колорадо, США. Національний центр даних щодо снігу та льоду НАСА розповсюдив активний архівний центр. % doi: http://dx.doi.org/10.5067/3KB2JPLFPK3R. Q = hdfinfo ('NISE_SSMISF18_20171124.HDFEOS')% Q.Attributes (2). Валерія говорить% UpperLeftPointMtrs = (- 9036842.762500,9036842.762500)% LowerRightMtrs = (9036842.762500), (9036842.762500, 690368, 690368, 690368, 690, 690, 690, 690, 690, 690, 690, 690) 0,90000000,0,0,0,0,0,0,0)% та% Q.Разподіляє (3) .Валюта говорить% 'Параметр Значення даних% 0 безсніжна земля% 1-100 концентрація морського льоду відсоток% 101 постійний лід (Гренландія, Антарктида)% 102 не використовується% 103 сухий сніг% 104 мокрий сніг% 105-251 не використовується% 252 змішані пікселі на узбережжі (не в змозі надійно застосувати алгоритм мікрохвильової печі)% 253 підозріле значення льоду% 254 кути (невизначено )% 255 ocean P = hdfread ('NISE_SSMISF18_20171124.HDFEOS', 'Північна півкуля', 'поля', 'Обсяг'); Р (Р == 255) = 105; % Поставте океан на вершину індексів P (P> 105) = 0; % За даними веб-сайту, це інформація про проекцію. Хоча я роблю радіус% моєї карти менше, ніж фактичне поле даних. m_proj ('азимутальна рівна площа', 'широта', 90, 'радіус', 47, 'rectbox', 'on'); clf% Дані графіку як зображення вимкнено = 9036842.762500 / 6371228; % Перетворити проекційні координати в одиниці зображення земних радіусів ([- offs off], [offs-offs], P); набір (gca, 'ydir', 'normal'); кольорова карта ([. 2 .5 .2;% 0 струмінь (100);% 1-100 1 1 1;% Гренландії 0 0 0; .9 .9 .9;% сухого снігу .8 .8 .8;% мокрого сніг 0 0 .5]); % 105 - зараз океанічна осі ([0 105]); m_coast ('колір', 'k'); m_grid ('linewi', 2, 'tickdir', 'out'); назва ({'SSM / I Ice cover 24.11.2017', ''}, 'розмір шрифту', 14, 'шрифт', 'жирний'); hh = кольорова смуга ('h'); набір (hh, 'tickdir', 'out'); xlabel (hh, '% крижаного покриву');
3. Аерофотознімки в мережі UTM
% Це зображення походить від TerraServer% (http://terraserver.microsoft.com/ - зараз сильно змінено)% і було задано для координат UTM. Проекція UTM% використовує координати UTM на екрані (доки параметр ellipse% встановлений на щось інше, ніж за замовчуванням), [P, map] = imread ('../ m_mapWK / Oncehome.jpeg'); % Встановіть межі проекції на ширину / довжину кутів зображення%. m_proj ('UTM', 'long', [- 71-6 / 60-30 / 3600 -71-4 / 60-43 / 3600], ... 'lat', [42 + 21/60 + 13/3600 42 + 22/60 + 7/3600], 'еліпс', 'wgs84'); clf; зображення ([326400 328800], [4692800 4691200], P); набір (gca, 'ydir', 'normal'); m_grid ('tickdir', 'out', 'linewi', 2, 'fontsize', 14); назва («Дім для певних дурнів», «розмір шрифту», 16);
4. Підмножина глобального набору даних (формат HDF)
% Дані про колір океану з http://seawifs.gsfc.nasa.gov/SEAWIFS.html%% Візьміть середній набір даних на відстані 4 км та складіть карту для протоки% Грузії та зовнішнього узбережжя. Зауважте, що більша частина цього коду використовується% для зчитування та підмноження даних. LATLIMS = [47 51]; LONLIMS = [- 130 -121]; % Примітка. Це, мабуть, не найефективніший спосіб читання та обробки даних HDF, але я зазвичай цього не роблю ...%% По-перше, отримайте дані атрибутів PI = hdfinfo ('../ m_mapWK / A20040972004104. L3m_8D_CHLO_4KM '); % І запишіть його в структуру pin = []; для k = 1: 59 nm = PI.Atributes (k) .Name; nm (nm == '') = '_'; якщо isstr (PI.Attributes (k) .Value), pin = setfield (pin, nm, PI.Attributes (k) .Value); else pin = setfield (pin, nm, double (PI.Attributes (k) .Value)); кінцевий кінець; % lon / lat кутів сітки lon = [pin.Westernmost_Longitude: pin.Longitude_Step: pin.Easternmost_Longitude]; lat = [pin.Northernmost_Latitude: -pin.Latitude_Step: pin.Southernmost_Latitude]; % Отримати показники, необхідні для цікавої області [mn, ilt] = min (abs (lat-max (LATLIMS))); [mn, ilg] = min (abs (lon-min (LONLIMS))); ltlm = fix (diff (LATLIMS) /pin.Latitude_Step); lglm = fix (розл. (LONLIMS) /pin.Longitude_Step); % завантажують підмножину даних, необхідних для обмежень на карті, заданих P = hdfread ('../ m_map / WKA20040972004104.L3m_8D_CHLO_4KM', 'l3m_data', ... 'Індекс', {[ilt ilg], [], [ltlm lglm ]}); % Перетворити дані в журнал (Chla) за допомогою наведених рівнянь. Пусті відсутні дані. P = подвійний (P); P (P == 255) = NaN; P = (pin.Slope * P + pin.Intercept); % log_10 з chla LT = lat (ilt + [0: ltlm-1]); LG = lon (ilg + [0: lglm-1]); [Plg, Plt] = мешгрід (LG, LT); % НАЗАГАЛЬНО .... Накресліть карту ... clf; m_proj ('lambert', 'lon', LONLIMS, 'lat', LATLIMS); m_pcolor (Plg, Plt, P); затінення плоске; m_gshhs_i ('колір', 'k') ;; m_grid ('linewi', 2, 'tickdir', 'out') ;; h = кольорова смуга; set (get (h, 'ylabel'), 'String', 'Chla (\ mug / l)'); набір (h, 'ytick', log10 ([. 5 1 2 3 5 10 20 30]), 'yticklabel', [. 5 1 2 3 5 10 20 30], ... 'tickdir', 'out') ; назва (['MODIS Chla' ... datestr (datenum (pin.Period_Start_Year, 1,0) + pin.Period_Start_Day) ... '->' ... datestr (datenum (pin.Period_Start_Year, 1,0) + pin.Period_End_Day)], ... 'розмір шрифту, 14,' шрифт ',' жирний ');
5. Метеорологічні дані (формат netCDF)
ідей = 156; % день, щоб показати% використовувати ncdisp (ім'я файлу) для виявлення вмісту файлу ... lat = ncread ('uwnd.10m.gauss.2017.nc', 'lat'); lon = ncread ('uwnd.10m.gauss.2017.nc', 'lon'); [LN, LT] = meshgrid (lon, lat); mtime = ncread ('uwnd.10m.gauss.2017.nc', 'time') / 24 + datenum (1800,1,1,0,0,0); u = ncread ('uwnd.10m.gauss.2017.nc', 'uwnd', [1,1, iday], [192,94,1]); v = ncread ('vwnd.10m.gauss.2017.nc', 'vwnd', [1,1, iday], [192,94,1]); prote = ncread ('prote.sfc.gauss.2017.nc', 'prote', [1,1, iday], [192,94,1]); m_proj ('мельник', 'lon', [100 260], 'lat', [0 65]); m_coast ('патч', [. 8 .8 .8]); утримуйте [CS, CH] = m_contourf (LN, LT, prote '* 1e3, [0,05: .05: .7],' edgecolor ',' none '); m_windbarb (LN, LT, u ', v', 2, 'одиниці', 'm / s', 'linewi', 1, 'color', 'r'); затримувати, не впускати; m_grid ('коробка', 'фантазія', 'галочка', 'поза'); ax = m_contfbar ([. 3 .7] ,. 05, CS, CH); набір (ax, 'fontsize', 12) xlabel (ax, 'Середня добова норма опадів / (кг / м ^ 2 / с)'); назва (['Північно-Тихоокеанський поверхневий вітер:' datestr (mtime (iday))]], 'fontsize', 16); кольорова карта (flipud (m_colmap ('Blues')))
6. Дріфтер-треки ARGO (формат netCDF)
% Argo stuff% Перейдіть до:% http://www.usgodae.org/cgi-bin/argo_select.pl% Виберіть потрібну область та діапазон дат, завантажте всі профілі% tar -xvzf їх у каталог ... basname = ' ./argo '; % базової карти m_proj ('lambert', 'lons', [- 150 -124], 'lat', [40 60], 'rectbox', 'on'); [cs, h] = m_etopo2 ('contourf', [- 7000: 500: 0], 'edgecolor', 'none'); m_gshhs_l ('патч', [. 5 .8 0], 'edgecolor', 'none'); m_grid ('linewi', 2, 'шар', 'top'); caxis ([- 7000 000]); m_contfbar (.92, [. 2 .5], cs, h, 'endpiece', 'no', 'axfrac',. 02); кольорова карта (m_colmap ('синій')); назва («Поплавкові траєкторії Argo NE Pacific (2017)»); % Додайте плавні траєкторії ARGO% 1) намалюйте стрілку масштабу vecscl = 0,015; m_vec (vecscl, -126,58, -0,01,0, 'r', 'ширина вала', 2, 'довжина голови', 10, ... 'ключ', {'1 см / с', 'Середній дрейф'} , 'в центрі', 'так'); dirs = dir (базова назва); m = 0; для k = 3: довжина (dirs) profname = dir ([dirs (k). folder '/' dirs (k). name]); для l = 3: length (profname) fname = [profname (l). folder '/' profname (l) .name '/' profname (l) .name '_Rtraj.nc']; % ncdisp (ім'я); argo.id = ncread (ім'я, 'PLATFORM_NUMBER'); argo.mtime = ncread (fname, 'JULD') + datenum (1950,1,1); argo.lat = ncread (fname, 'LATITUDE'); argo.lon = ncread (fname, 'LONGITUDE'); % Довго зберігаються між -180 та +180; це видаляє штучні стрибки%, які можуть статися лише зліва від меж карти. argo.lon (argo.lon> 0) = argo.lon (argo.lon> 0) -360; ii = знайти (isfinite (argo.lon)); якщо є (ii) m_line (argo.lon (ii), argo.lat (ii), 'color', [0 0 0]); % Іноді перша точка - помилка якоїсь форми, тому пропустіть її Dlon = argo.lon (ii ([2 кінець])); Dlat = argo.lat (ii ([2 кінець])); t = diff (argo.mtime (ii ([2 кінець]))); % час між точками% Відстань між точками [d, a12] = m_idist (Dlon (1), Dlat (1), Dlon (2), Dlat (2)); % Зберігати речі m = m + 1; spd (m) = d / (t * 86400);% m / s% Знайдіть середню точку на геодезичній і також зберігайте [Clon (m), Clat (m), a21 (m)] = m_fdist (Dlon (1), Dlat (1), a12, d / 2); end end end Clon = rem (Clon-360,360); % Поставте його в потрібний діапазон a21 = rem (a21-180,360); % Мені потрібен протилежний напрямок% Намалюйте всі стрілки «середньої швидкості», по центру в середній точці% геодезики між першою та останньою точками. m_vec (vecscl, Clon, Clat, spd. * sind (a21), spd. * cosd (a21), 'r', ... 'в центрі', 'так', 'ширина вала', 2, 'headlength', 10 );
7. SAR-зображення внутрішніх хвиль (формат HDF-5)
fname = 'SAR_IMP_1PNESA19920724_190439_00000018C086_00199_05354_0000.h5'; % h5disp (fname)% Дивіться структуру titlestr = h5readatt (fname, '/ метадані / MPH', 'STATE_VECTOR_TIME'); datsize = double ([h5readatt (fname, '/ band / Amplitude', 'raster_width') ... h5readatt (fname, '/ band / Amplitude', 'raster_height')]); tielat = h5read (fname, '/ tie_point_grids / laitude'); tielon = h5read (ім'я, '/ tie_point_grids / longitude'); stp = [h5readatt (fname, '/ tie_point_grids / laitude', 'sub_sampling_x') ... h5readatt (fname, '/ tie_point_grids / laitude', 'sub_sampling_y')]; % Витягніть підрозділ на [2000 2500] з одного кута, а в% [600 2000] з протилежного кута istart = [2000 2500]; strd = [3 3]; cnt = fix ([(datsize (1) -istart (1) -600) / strd (1) (datsize (2) -istart (2) -2000) / strd (2)]); % ... і читайте. subimg = h5read (fname, '/ смуги / амплітуда', istart, cnt, strd); % .... згладьте трохи ... subf = filter2 (ті (3,3) / 9, subimg); % Тепер генеруйте lat / lon для всіх пікселів, інтерполюючи з% крапки. Ty = [0: розмір (tielat, 2) -1] * stp (2) +1; Tx = [0: розмір (tielat, 1) -1] * stp (1) +1; Iy = istart (2) + [0: розмір (subimg, 2) -1] * strd (2); Ix = istart (1) + [0: розмір (subimg, 1) -1] * strd (1); sublat = interp2 (Ty ', Tx, tielat, Iy', Ix); підклон = interp2 (Ty ', Tx, tielon, Iy', Ix); % Тепер зробіть карту m_proj ('lambert', 'lon', [- 123-25 / 60 -122-40 / 60], 'lat', [48 + 42/60 49 + 9/60]); m_pcolor (sublon, sublat, subf); затінення плоске; m_grid ('коробка', 'фантазія', 'галочка', 'поза'); m_ruler (1,03, [. 15 .5], 'цокає', [. 01]); caxis ([0 450]); кольорова карта (сіра); назва (titlestr)
8. Затінене полегшення від топографії високої роздільної здатності (формат netCDF)
клат = [48 + 46/60 49 + 5/60]; клон = [- 125-15 / 60 -124-55 / 60]; % Barkley Sound %% Прочитати дані з файлу netcdf fname = '/ ocean / rich / more / mmapbase / noaa_bc3 / barkley_sound_1_navd88_2016.nc'; lat = ncread (fname, 'lat'); lon = ncread (fname, 'lon'); ilat = lat> = clat (1) & lat = clon (1) & lon
9. Статичний API Google Maps
% Межі осі lms = [-123- [14 8] / 60 49+ [10 13.5] / 60]; % plot_google_maps.m з бази даних користувачів математики надав файли файлів:% https://www.mathworks.com/matlabcentral/fileexchange/27627-zoharby-plot_google_map% отримує доступ до статичних плиток карти Google, повертаючи лат / довге сіткове% зображення, яке просто більше, ніж задані межі. clf; вісь (лмс); [Glon, Glat, Gimg] = plot_google_map ('maptype', 'супутник', 'refresh', 0, 'autoaxis', 0); clf; % Тепер намалюй! m_proj ('utm', 'lat', lms (3: 4), 'lon', lms (1: 2)); m_image (Glon, Glat, Gimg); m_grid ('tickdir', 'out', 'box', 'fancy'); m_ruler ([. 4 .9], 1.05,6, 'tickdir', 'in', 'tickled',. 01);
Якщо ви вирішили, що M_Map зробив вагомий внесок у проект, і ви хочете визнати цей внесок цитатами (спасибі!), Я рекомендую щось подібне:
Ряд людей допоміг із пропозиціями, виправленнями кодів тощо. Я особливо вдячний за роботу, яку виконали Е. Фірінг, Д. Бірн, М. Манн, Дж. Прінгл, Дж. Е. Нілсен, М. Халверсон, Джеймі Цоа, та Ши Вейхен, які внесли всі коди.