Этот пример показывает, как создать карту крупнейших мировых городов, улучшенных с береговыми линиями и ландшафтом. Это использует измененную азимутальную проекцию карты Briesemeister. Пример включает некоторый дополнительный код, который позволяет пользователю в интерактивном режиме выбирать местоположение и завоевывать репутацию и район самого близкого города. Чтобы видеть эту часть примера, необходимо запустить полный пример, всплывающий последний рисунок в отдельную фигуру MATLAB, и затем запустить дополнительный код в командной строке MATLAB.
Создайте оси.
figure axesm bries text(.8, -1.8, 'Briesemeister projection') framem('FLineWidth',1)
Загрузите и отобразите 1 1 сеткой повышения степени.
load topo geoshow(topo, topolegend, 'DisplayType', 'texturemap')
Получите палитру, подходящую для повышения.
demcmap(topo)
Сделайте его более ярким.
brighten(.5)
Загрузите глобальные координаты береговой линии.
load coastlines
Обобщите береговые линии к допуску с 0.25 степенями.
[rlat, rlon] = reducem(coastlat,coastlon, 0.25);
Постройте береговые линии коричневого цвета.
geoshow(rlat, rlon, 'Color', [.6 .5 .2], 'LineWidth', 1.5)
Считайте файл форм, содержащий имена городов во всем мире и их координат в широте и долготе.
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