%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% For use in optimization problem for genetic algorithms where you
% search for the highest elevation on a section of earth.
%
% By: Kevin Passino
% Date: 3/12/01
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear

% For a specific country or region, go do the data base with
% in the US Dept. of Commerce, National Inst. of 
% Geophysical Data and get into the MGG-02 5min data
% To make it interesting let's look at a section of the earth
% in the Andean mountain range, particularly around Colombia
% South America.

% Download the data as space separated ascii data.  Save it
% on the computer and name the file country.dat
% then in matlab say "load country.dat -ascii"
% Now the data needs to be re-defined (the ordering
% does not conform to how matlab plots it.  So let
% country=flipud(country) to get it strait then do a
% "save country" and it will create a matlab data file
% called country.mat. To load that file

load colom.mat

% Good color plot, with edge of land, in color

% Define the patch of land on the earth for which we have
% topographical data (here, Colombia)

northlat=13; % Number of degrees north of the equator
southlat=-5; % Relative to north
westlong=-84; % Relative to Meridian of Greenwich
eastlong=-64; % Relative to Meridian of Greenwich

long=westlong:5/60:eastlong; % Define the vector of longitudinal
							% coordinates for plotting (loaded
							% 5 min data so there is a data
							% point each 5 min of a degree)
lat=southlat:5/60:northlat; % Define the vector of lateral
							% points at which we have data

% Check the definitions of the axes.

[lat_size,long_size]=size(colom); % Find the number of points 
if lat_size ~= size(lat), display('data error'), end
if long_size ~= size(long), display('data error'), end

% Next, plot the topographical data

figure(1)
clf
contour(long,lat,colom,20); colormap(jet)
xlabel('Degrees Longitudinal (- = west of Meridian of Greenwich)')
ylabel('Degrees North of Equator (- = south)')
title('Topographical map of Colombia (meters elevation)')
hold on
contour(long,lat,colom,[0 0],'k-')  % Adds the shorelines to the ocean
                             % and the Carribean by plotting the points
							 % where the contour is at 0 elevation
plot(long,0*ones(size(long)),'k--')  % Plots the equator

% Test the interpolation on the map so that elevations can 
% be computed anywhere on the map

interplong=westlong:3/60:eastlong; % Create 3 minute data
interplat=southlat:3/60:northlat;

interp_elev=interp2(long,lat,colom,interplong,interplat','linear');
figure(2)
clf
contour(interplong,interplat,interp_elev,20); colormap(jet)
xlabel('Degrees Longitudinal (- = west of Meridian of Greenwich)')
ylabel('Degrees North of Equator (- = south)')
title('Topographical map of Colombia (meters elevation)')
hold on
contour(long,lat,colom,[0 0],'k-')  % Adds the shorelines to the ocean
                             % and the Carribean by plotting the points
							 % where the contour is at 0 elevation
plot(long,0*ones(size(long)),'k--')  % Plots the equator


% Then to plot additional contour lines for specific elevations

%contour(colom,[1000 1000],'k--')
%contour(colom,[1800 1800],'k--')

%II=find(colom>=1000 && colom<=1800);
%III=find(colom>1800);

% For black and white printers

figure(2)
clf
contour(-colom,20); colormap(gray)
hold on
contour(-colom,[0 0],'k-')
xlabel('Degrees Longitudinal (- = west of Meridian of Greenwich)')
ylabel('Degrees North of Equator (- = south)')
title('Topographical map of Colombia (meters elevation)')


% For a 3d plot

figure(3)
clf
surf(colom)
shading interp
colormap(copper)
xlabel('Degrees Longitudinal (- = west of Meridian of Greenwich)')
ylabel('Degrees North of Equator (- = south)')
title('Topographical map of Colombia (meters elevation)')


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% End of program
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
