www.gusucode.com > map 案例源码 matlab代码程序 > map/mapexfindcity.m

    %% Creating an Interactive Map for Selecting Point Features
% This example shows how to construct a map of major world cities enhanced
% with coastlines and terrain. It uses the modified azimuthal Briesemeister
% map projection. Then it allows a user to interactively pick a location
% and automatically highlights the nearest city, displaying its name and
% coordinates.

% Copyright 2003-2014 The MathWorks, Inc.

%% Step 1: Set up a Map Axes Object and Render a Global Elevation Grid
%
% Construct the axes.
figure 
axesm bries
text(.8, -1.8, 'Briesemeister projection')
framem('FLineWidth',1)

%%
% Load and display a 1-by-1-degree elevation grid.
load topo
geoshow(topo, topolegend, 'DisplayType', 'texturemap')

%% Step 2: Improve the Terrain Display
%
% Get a colormap appropriate for elevation.
demcmap(topo)

%%
% Make it brighter.
brighten(.5)

%% Step 3: Add Simplified Coastlines
%
% Load global coastline coordinates.
load coast

%%
% Generalize the coastlines to 0.25-degree tolerance.
[rlat, rlon] = reducem(lat, long, 0.25);

%%
% Plot the coastlines in brown.
geoshow(rlat, rlon, 'Color', [.6 .5 .2], 'LineWidth', 1.5)

%% Step 4: Plot City Locations with Red Point Markers
%
% Read a shapefile containing names of cities worldwide and their
% coordinates in latitude and longitude.
cities = shaperead('worldcities', 'UseGeoCoords', true);

%%
% Extract the point latitudes and longitudes with |extractfield|, and add
% them to the map.
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')

%% Step 5: Loop Forever while Selecting Cities
%
% Now, using the map you've created, you can set up a simple loop to prompt
% for clicks on the map and display the name and coordinates of the nearest
% city.  First, display instructions to the upper left of the map:

h1 = text(-2.8, 1.7, 'Click on a dot for its city name');
h2 = text(-2.8, 1.5, 'Press ENTER to stop');

%%
% Then, run the following, optional code block, to capture selected
% latitudes and longitudes with |inputm|.  Use |distance| to calculate the
% great circle distance between each selected point and every city in the
% database.  Determine index of the closest city, change the appearance of
% its marker symbol, and display the city's name and 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)
%      h1.String = city.Name;
%      h2.String = num2str([city.Lat, city.Lon],'%10.2f');
%  end
%  disp('End of input.')