В этом примере показано, как создать карту крупнейших мировых городов, улучшенных с береговыми линиями и ландшафтом. Это использует модифицированную азимутальную проекцию карты 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