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

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

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

Создайте оси.

figure 
axesm bries
text(.8, -1.8, 'Briesemeister projection')
framem('FLineWidth',1)

Загрузите и отобразите 1 1 сеткой повышения степени.

load topo
geoshow(topo, topolegend, 'DisplayType', 'texturemap')

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

Получите палитру, подходящую для повышения.

demcmap(topo)

Сделайте его более ярким.

brighten(.5)

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

Загрузите глобальные координаты береговой линии.

load coastlines

Обобщите береговые линии к допуску с 0.25 степенями.

[rlat, rlon] = reducem(coastlat,coastlon, 0.25);

Постройте береговые линии коричневого цвета.

geoshow(rlat, rlon, 'Color', [.6 .5 .2], 'LineWidth', 1.5)

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

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

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')

Шаг 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

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

| | |