Этот пример показывает, как создать карту крупных мировых городов, усиленных береговыми линиями и местности. Он использует модифицированную азимутальную проекцию карты Бриземейстера. Пример включает в себя некоторый дополнительный код, который позволяет пользователю в интерактивном режиме выбрать местоположение и получить имя и местоположение ближайшего города. Чтобы увидеть эту часть примера, необходимо запустить полный пример, отобразить последний рисунок в отдельную фигуру MATLAB, а затем запустить дополнительный код в командной строке MATLAB.
Создайте объект осей.
figure axesm bries text(2.8,-1.8,'Briesemeister projection','HorizontalAlignment','right') framem('FLineWidth',1)
Загрузка повышения растровых данных и географических камер ссылки объекта. Отобразите данные на карте.
load topo60c geoshow(topo60c,topo60cR,'DisplayType','texturemap')
Применить палитру, соответствующую данным о повышении. Сделайте отображение ярче.
demcmap(topo60c) brighten(0.5)
Загрузка глобальных координат береговой линии. Обобщите береговые линии до допуска 0,25 градуса. Затем постройте береговые линии коричневым цветом.
load coastlines [rlat,rlon] = reducem(coastlat,coastlon,0.25); geoshow(rlat,rlon,'Color',[.6 .5 .2],'LineWidth',1.5)
Прочитайте файл shapefile, содержащий имена городов по всему миру и их координаты в широте и долготе.
cities = shaperead('worldcities','UseGeoCoords',true);
Извлеките точечные широты и долготы с extractfield
, и добавить их на карту.
lats = extractfield(cities,'Lat'); lons = extractfield(cities,'Lon'); geoshow(lats, lons,... 'DisplayType', 'point',... 'Marker', 'o',... 'MarkerEdgeColor', 'r',... 'MarkerFaceColor', 'r',... 'MarkerSize', 3) text(-2.8,-1.8,'Major World Cities')
Теперь, используя созданную карту, можно настроить простой цикл, чтобы запросить нажатия кнопки на карте и отобразить имя и координаты ближайшего города. Вы должны вывести последнюю карту, созданную вами на шаге 4, в отдельное окно графического окна MATLAB помощью кнопки, которая появляется в верхней части карты. Также в следующем коде установите runCitySelectionLoop
на true
, и выполните код в командной строке.
Код сначала отображает текстовые инструкции в верхней левой части карты. Затем он входит в цикл, в котором захватывает выбранные широты и долготы с inputm
. Использование distance
вычислить большое расстояние между каждой выбранной точкой и каждым городом в базе данных. Определите индекс ближайшего города, измените внешний вид его маркера символа и отобразите имя города и координаты широты/долготы.
runCitySelectionLoop = false; % Set to true to run optional city selection loop if(runCitySelectionLoop) h1 = text(-2.8, 1.9, 'Click on a dot for its city name. Press ENTER to stop'); h2 = text(-2.8, 1.7, ''); h3 = text(-2.8, 1.5, 'City Coordinates.'); while true [selected_lat,selected_lon] = inputm(1); if isempty(selected_lat) break % User typed ENTER end d = distance(lats, lons, selected_lat, selected_lon); k = find(d == min(d(:)),1); city = cities(k); geoshow(city.Lat, city.Lon, ... 'DisplayType', 'point', ... 'Marker', 'o', ... 'MarkerEdgeColor', 'k', ... 'MarkerFaceColor', 'y', ... 'MarkerSize', 3) h2.String = city.Name; h3.String = num2str([city.Lat, city.Lon],'%10.2f'); end disp('End of input.') end