Select platform: [Android](https://developers.google.com/maps/documentation/maps-3d/android-sdk/configure-camera-controls.md.txt "View this page for the Android platform docs.") [iOS](https://developers.google.com/maps/documentation/maps-3d/ios-sdk/configure-camera-controls.md.txt "View this page for the iOS platform docs.") [JavaScript](https://developers.google.com/maps/documentation/javascript/3d/map-controls.md.txt "View this page for the JavaScript platform docs.")

<br />

Users can control the zoom, tilt, position, and rotation of the camera using
gestures on the map. You can also configure the camera programmatically.

![Diagram illustrating the 3D camera model](https://developers.google.com/static/maps/documentation/maps-3d/images/maps-3d-sdk-camera-diagram.png)

## The Camera Position

The map view is modeled as a camera looking at a specific point in space. The
position and orientation of the camera are defined by
latitude/longitude/altitude coordinates, heading, tilt, range,
and roll.

### Latitude, longitude, altitude

The camera's initial position is defined by setting the latitude, longitude, and
altitude. These values combine to determine where the camera is positioned, not
where the camera is pointing to, or centered on.

Latitude can be between -90 and 90 degrees, inclusive. Longitude ranges between
-180 and 180 degrees, inclusive. Altitude is specified in meters above sea
level.

Values above or below this range will be clamped to the nearest value within
this range. For example, specifying a latitude of 100 will set the value to 90.


### Heading

The **heading** specifies the compass direction of the map, measured in degrees
clockwise from true North. North corresponds to 0 degrees, East to 90 degrees,
South to 180 degrees, and West to 270 degrees.

### Tilt

The **tilt** specifies the angle of the camera with respect to the vertical
axis, measured in degrees. A tilt of 0 degrees means the camera is pointing
straight down towards the Earth (
[nadir](https://en.wikipedia.org/wiki/Nadir)). A tilt of 90 degrees
means the camera is pointed horizontally in the direction specified by the
[heading](https://developers.google.com/maps/documentation/maps-3d/ios-sdk/configure-camera-controls.md.txt#heading_orientation).

### Range

The **range** defines the distance in meters between the camera's own position
and the center of the map. The range can vary from zero meters (very close up)
up to sixty-three million meters, allowing for views from very close up all the
way to a truly global perspective. This effectively controls how "zoomed in" or
"zoomed out" the map appears.

### Roll

The **roll** sets the angle of the camera with respect to the horizon, measured
in degrees. This parameter can be used to create effects like banking during
flight simulations or even a full barrel roll, rotating the camera around its
viewing axis.

## Controlling the camera

The following code sample demonstrates how to control the camera programmatically.

<br />

### Swift

```swift

public static var sanFrancisco: Camera = .init(
  center: .init(
    latitude: 37.7845812,
    longitude: -122.3660241,
    altitude: 585),
  fieldOfView: .init(degrees: 100),
  heading: 288.0,
  tilt: 75.0,
  roll: 0.0,
  range: 100)

```

## UI controls

In addition to standard gestures, the Maps 3D SDK for iOS also provides UI controls
for manipulating the position of the camera.

- The **Zoom control** displays "+" and "-" buttons for changing the zoom level of the map.
- The **Move control** displays "←", "→", "↑", and "↓" buttons for changing the center of the map.
- The **Rotate controls** displays "↺" and "↻" to change the camera's heading.
- The **Tilt control** displays "\^" and "⌄" to change the camera's tilt.
- The **Compass control** indicates the direction of compass north, and allows for resetting the camera to a northerly heading.

The following code sample shows how to change the visibility of the UI controls:

### Swift

```swift

struct ContentView: View {
  @State private var showControls = true

  var body: some View {
    Map(mode: .hybrid)
      .mapControls(at: .trailing) {
        if showControls {
          CompassControl()
          ZoomControl()
          TiltControl()
        }
      }
  }
}

```