Code covered by the BSD License  

Highlights from
Google Earth COM API (Example)

image thumbnail

Google Earth COM API (Example)

by

 

23 May 2008 (Updated )

Connect to the Google Earth COM API

GEcamera(ge,focusPoint,camera,speed)
function [point,bounds] = GEcamera(ge,focusPoint,camera,speed)
% Change GoogleEarth camera position and orientation.
%
% This will set the Google Earth camera parameters and fly the 
% camera to the specified camera view at the specified speed. 
% The camera view is defined by a focus point, (what the camera
% is looking at) and the camera offset, tilt and azimuth.
%
% The Google Earth server structure (ge) returned from the 
% GEserver command is needed. 
%
% [point] = GEcamera(ge) will return the focus point and view 
% bounds of the current camera position. point is a 3 element 
% vector of latitude longitude and altitude where altitude is 
% the local terrain level. If the focus point is not on the 
% terrain then the projected point to the globe's horizon is 
% returned. If the terrain is not active in Google Earth then 
% zero is returned.
%
% [point, bounds] = GEcamera(ge) will return the view bounds 
% of the current camera position as a minimum and maximum
% latitude and longitude value.
%
% [point, bounds] = GEcamera(ge,focusPoint) moves the camera so 
% that it is looking at the focus point defined. The focus point
% can be specified as either a 2 element vector of latitude and 
% longitude or a 3 element vector including altitude. If altitude
% is zero or negative then the value will be interpreted as above 
% ground level, otherwise altitude will be above mean sea level.
%
% [point, bounds] = GEcamera(ge,focusPoint,camera) sets the camera
% offset, tilt and azimuth. Offset is measured as meters from the
% focus point, tilt is in degrees where 0 is a view straight down 
% and 90 is horizontal. Azimuth is in degrees where 0 is North.
%
% [point, bounds] = GEcamera(ge,focusPoint,camera,speed) sets the 
% speed at which the camera will fly to the defined point. Values 
% can be from 0 to 5 where 5 is instantaneous. The default is 2. 
%
% Examples:
%  ge = GEserver;
%  [point, bounds] = GEcamera(ge)
%  GEcamera(ge,[-25.7450 28.2788])
%  GEcamera(ge,[-25.7 28.3 1500])
%  GEcamera(ge,[-25.7 28.3 1500],[100 60 90])
%  [point] = GEcamera(ge,[-33.85 18.48 500],[3000 80 -155],5)
%
% See also: GEserver, GEaddKmlFeature, actxserver

if (nargin<2),  
  moveCamera = 0;  
else
  moveCamera = 1;
  if (length(focusPoint)<=2),
    focusPoint(3) = 0;
  end;
  if (length(focusPoint)==3),
    if (focusPoint(3)<=0),
      focusPoint(3) = abs(focusPoint(3));
      altmode = 1; % RelativeToGroundAltitudeGE
    else
      altmode = 2; % AbsoluteAltitudeGE
    end;
  else
    altmode = focusPoint(4);
  end;
end;  
% if no camera parameters set then use current camera
cam  = ge.GetCamera(1);
if (nargin<3),  
  camera = [cam.Range cam.Tilt cam.Azimuth];
end;  
if (nargin<4),  speed = 2;  end;  

if (moveCamera),
  % set camera parameters
  cam.FocusPointLatitude = focusPoint(1); % Focus point Latitude -90 (South Pole) and 90 (North Pole).
  cam.FocusPointLongitude = focusPoint(2);% Focus point Longitude -180 and 180, 0 being the longitude of the Prime Meridian
  cam.FocusPointAltitude = focusPoint(3); % See altitude mode
  cam.FocusPointAltitudeMode = altmode;   % mode : 1 = RelativeToGroundAltitudeGE, 2 =  AbsoluteAltitudeGE
  cam.Range = camera(1);                  % Distance between camera and focus point in meters.
  cam.Tilt = camera(2);                   % 0-90 deg. A tilt angle of 0 means the camera is directly on top of the focus point and looking straight down.
  cam.Azimuth = camera(3);                % Camera's azimuth in degrees (between -180 and 180). 0 means North.
  % activate camera 
  ge.SetCamera(cam,speed);    % Speed 0-5 (5=instant)
end;

% Get point on terrain information
if (nargout>=1),
  point_raw = ge.GetPointOnTerrainFromScreenCoords(0,0).get;
  point = [point_raw.Latitude point_raw.Longitude point_raw.Altitude];
end;  

% Get information about the screen bounds
if (nargout>=2),
  for jj = 1:2,
    for ii = 1:2,
      tmp = ge.GetPointOnTerrainFromScreenCoords(2*ii-3,3-2*jj).get;
      bounds_raw.Latitude(jj,ii) = tmp.Latitude;
      bounds_raw.Longitude(jj,ii) = tmp.Longitude;
      bounds_raw.Altitude(jj,ii) = tmp.Altitude;
      bounds_raw.ProjectedOntoGlobe(jj,ii) = tmp.ProjectedOntoGlobe;
      bounds_raw.ZeroElevationExaggeration(jj,ii) = tmp.ZeroElevationExaggeration;
    end;
  end;
  bounds = [min(bounds_raw.Latitude(:)) min(bounds_raw.Longitude(:)); max(bounds_raw.Latitude(:)) max(bounds_raw.Longitude(:))];
end;

Contact us