Contenu principal

campos

Set or query position of camera for geographic globe

Description

Set Position

campos(g,lat,lon) sets the latitude and longitude of the camera for the specified geographic globe.

campos(g,lat,lon,height) sets the latitude, longitude, and ellipsoidal height of the camera. If you want to set only the height of the camera, then use the camheight function instead.

example

Set Mode

campos(g,"auto") sets the camera position to an automatic mode, enabling the geographic globe to determine the latitude and longitude of the camera based on the plotted data. The mode defaults to automatic when you create a geographic globe. If you change the camera position using your mouse, then the mode switches to automatic. To control the mode for the height of the camera, use the camheight function instead.

campos(g,"manual") sets the camera position to a manual mode. When the hold state of the geographic globe is "on", manual mode specifies that the geographic globe preserve the latitude and longitude of the camera when the plotted data changes. If you change the camera position using the campos function, then the mode switches to manual.

example

Query Position

campos(g) displays the latitude, longitude, and ellipsoidal height of the camera as a three-element vector.

[latOut,lonOut,heightOut] = campos(___) sets the position or mode and then returns the latitude, longitude, and height of the camera. You can return the camera position using any of the previous syntaxes.

example

Examples

collapse all

Create a geographic globe. Specify the latitude and longitude of the Eiffel Tower, and specify a height that is 400 meters above the WGS84 reference ellipsoid. Use these values to move the camera.

uif = uifigure;
g = geoglobe(uif);

lat = 48.8584;
lon = 2.2945;
h = 400;
campos(g,lat,lon,h)

Satellite imagery of the Eiffel Tower

Get the position and the heading, pitch, and roll angles of the camera. Use this information to control the view of a different geographic globe or to automate navigation.

Create a geographic globe. Navigate to an area of interest using your mouse or gestures. For this example, navigate to an area around Hawaii.

uif = uifigure;
g = geoglobe(uif);

Bird's-eye view of Hawaii

Query the latitude, longitude, and ellipsoidal height of the camera, and assign each to a variable.

[camlat,camlon,camh] = campos(g)
camlat =

   18.3172


camlon =

 -155.5891


camh =

   6.2692e+04

Query the heading, pitch, and roll angles of the camera, and assign each to a variable.

heading = camheading(g)
pitch = campitch(g)
roll = camroll(g)
heading =

    3.7590


pitch =

  -29.9880


roll =

  359.9993

Use these values to control the view of a different geographic globe. For example, create a new geographic globe and programmatically set the view.

uif2 = uifigure;
g2 = geoglobe(uif2);
campos(g2,camlat,camlon,camh)
camheading(g2,heading)
campitch(g2,pitch)
camroll(g2,roll)

In many cases, the camera view of the geographic globe changes when you plot new data. You can preserve the camera view by setting the camera modes to "manual" and the hold state to "on".

Read the buildings layer from an OpenStreetMap file [1] containing data for several city blocks in Shibuya, Tokyo, Japan. Display the buildings in a geographic globe with a road map and no terrain data.

GT = readgeotable("shibuya.osm",Layer="buildings");
addCustomBuildings("shibuya",GT)

uif = uifigure;
g = geoglobe(uif,Buildings="shibuya",Basemap="streets-light",Terrain="none");

Adjust the camera view by interacting with the globe.

Geographic globe with 3-D buildings displayed over a road map

Read track points from a GPX file into a geospatial table. Extract the latitude and longitude coordinates from the geospatial table, and specify a height value for each coordinate.

track = readgeotable("shibuya_track.gpx",Layer="track_points");
lat = track.Shape.Latitude;
lon = track.Shape.Longitude;
height = linspace(10,100,length(lat));

Set the camera modes to "manual" and the hold state to "on". Then, plot the data. Note that the camera position does not change.

campos(g,"manual")
camheight(g,"manual")
camheading(g,"manual")
campitch(g,"manual")
camroll(g,"manual")
hold(g,"on")

geoplot3(g,lat,lon,height,"-o",LineWidth=3)

The same globe with a plotted blue line

[1] You can download OpenStreetMap files from https://www.openstreetmap.org, which provides access to crowd-sourced map data all over the world. The data is licensed under the Open Data Commons Open Database License (ODbL), https://opendatacommons.org/licenses/odbl/.

Input Arguments

collapse all

Geographic globe, specified as a GeographicGlobe object.1

Geodetic latitude of the camera, specified as a numeric scalar in the range [–90, 90] degrees.

Geodetic longitude of the camera, specified as a numeric scalar in the range [–360, 360].

Ellipsoidal height of the camera, specified as a numeric scalar in meters. Geographic globe objects use the WGS84 reference ellipsoid. For more information about ellipsoidal height, see Find Ellipsoidal Height from Orthometric Height.

If you specify the height so that the camera is level with or below the terrain, then the campos function sets the height to a value one meter above the terrain.

Output Arguments

collapse all

Geodetic latitude of the camera, returned as a numeric scalar in degrees.

Geodetic longitude of the camera, returned as a numeric scalar in degrees.

Ellipsoidal height of the camera, returned as a numeric scalar in meters. Geographic globe objects use the WGS84 reference ellipsoid. For more information about ellipsoidal height, see Find Ellipsoidal Height from Orthometric Height.

Version History

Introduced in R2020b


1 Alignment of boundaries and region labels are a presentation of the feature provided by the data vendors and do not imply endorsement by MathWorks®.