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