Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enable MKMapView 3D view?

Tags:

macos

mapkit

I have an MKMapView in a window, and pitchEnabled is true (and I've confirmed this in the debugger). The "3D" thingy in the middle of the compass is grayed out, and clicking or dragging it does nothing. Option-dragging the map (like I do in Maps.app) doesn't do anything, either.

From my interpretation of the docs, setting pitchEnabled should let me use the 3D view, like Maps.app does. Am I mistaken? Is there something else I need to do to allow my users to get a 3D map view?

like image 989
J. Cocoe Avatar asked Aug 23 '16 23:08

J. Cocoe


People also ask

What is new MapKit?

This map item contains additional metadata about the place, such as an address, a name, a phone number, and a URL. The map item also provides a function to punch out to the Maps app if your users want to see additional metadata which isn't available through MapKit.

What is Apple MapKit?

Apple Maps is the best way to navigate and explore the world. MapKit lets you bring the world's most detailed city experiences from Apple Maps to your apps and websites, all with a focus on privacy. And you can use the new Maps Server API to create more functional experiences across platforms.

What is MKMapView?

The MKMapView class supports the ability to annotate the map with custom information. Because a map may have large numbers of annotations, map views differentiate between the annotation objects MapKit uses to manage the annotation data and the view objects for presenting that data on the map.


1 Answers

You can get close to the experience of 3D mode by adjusting the camera angle from which you view the map and making buildings visible. The example below allows you view the Eiffel Tower in 3D:

viewDidLoad() {
    super.viewDidLoad()

    mapView.mapType = MKMapType.Standard
    mapView.showsBuildings = true // displays buildings

    let eiffelTowerCoordinates = CLLocationCoordinate2DMake(48.85815, 2.29452)
    mapView.region = MKCoordinateRegionMakeWithDistance(eiffelTowerCoordinates, 1000, 100) // sets the visible region of the map

    // create a 3D Camera
    let mapCamera = MKMapCamera()
    mapCamera.centerCoordinate = eiffelTowerCoordinates
    mapCamera.pitch = 45
    mapCamera.altitude = 500 // example altitude
    mapCamera.heading = 45

    // set the camera property
    mapView.camera = mapCamera
}

example from: this question

like image 155
George McDonnell Avatar answered Oct 28 '22 18:10

George McDonnell