Создайте интерактивную карту для выбора функций точки

В этом примере показано, как создать карту крупнейших мировых городов, улучшенных с береговыми линиями и ландшафтом. Это использует модифицированную азимутальную проекцию карты Briesemeister. Пример включает некоторый дополнительный код, который позволяет пользователю в интерактивном режиме выбирать местоположение и завоевывать репутацию и район самого близкого города. Чтобы видеть эту часть примера, необходимо запустить полный пример, всплывающий последний рисунок в отдельную фигуру MATLAB, и затем запустить дополнительный код в командной строке MATLAB.

Шаг 1: Настройте Объект осей Карты и Рендеринг Глобальная Сетка Вертикального изменения

Создайте объект осей карты.

figure 
axesm bries
text(2.8,-1.8,'Briesemeister projection','HorizontalAlignment','right')
framem('FLineWidth',1)

Figure contains an axes object. The axes object contains 2 objects of type patch, text.

Загрузите растровые данные о вертикальном изменении и географический объект ссылки ячеек. Отобразите данные по карте.

load topo60c
geoshow(topo60c,topo60cR,'DisplayType','texturemap')

Figure contains an axes object. The axes object contains 3 objects of type patch, surface, text.

Шаг 2: улучшите отображение ландшафта

Примените палитру, подходящую для данных о вертикальном изменении. Сделайте отображение более ярким.

demcmap(topo60c)
brighten(0.5)

Figure contains an axes object. The axes object contains 3 objects of type patch, surface, text.

Шаг 3: добавьте упрощенные береговые линии

Загрузите глобальные координаты береговой линии. Обобщите береговые линии к допуску с 0.25 степенями. Затем постройте береговые линии коричневого цвета.

load coastlines
[rlat,rlon] = reducem(coastlat,coastlon,0.25);
geoshow(rlat,rlon,'Color',[.6 .5 .2],'LineWidth',1.5)

Figure contains an axes object. The axes object contains 4 objects of type patch, surface, line, text.

Шаг 4: постройте городские районы с Красными маркерами точки

Считайте файл форм, содержащий имена городов во всем мире и их координат в широте и долготе.

cities = shaperead('worldcities.shp','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')

Figure contains an axes object. The axes object contains 6 objects of type patch, surface, line, text.

Шаг 5: выберите Cities Interactively (Необязательно)

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

Смотрите также

| | |