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

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

Шаг 1. Настройте объект Осей и отобразите глобальную сетку повышения

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

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

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

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

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

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

Шаг 2: Улучшите отображение местности

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

demcmap(topo60c)
brighten(0.5)

Figure contains an axes. The axes 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. The axes contains 4 objects of type patch, surface, line, text.

Шаг 4: Постройте местоположения городов с красными маркерами точек

Прочитайте файл 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')

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

Шаг 5: Выберите города в интерактивном режиме (необязательно)

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

См. также

| | |