View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Todos los videos
  • Información

Más videos

  • Información
  • Resumen
  • Código
  • Ve más allá con MapKit

    Descubre las últimas actualizaciones de MapKit y MapKit JS. Presentaremos un nuevo tipo de indicaciones (en bicicleta) y te mostraremos cómo activar las imágenes de la función Echa un Vistazo en 3D en la web. Descubre cómo la nueva Geocoding API admite la conversión entre coordenadas y direcciones, y cómo usar la Address Representations API para obtener la dirección más adecuada para una región. Posteriormente, concluiremos con una nueva forma de hacer referencia a los lugares que garantiza que la app funcione a la perfección con App Intents.

    Capítulos

    • 0:00 - Introducción
    • 0:45 - Encontrar lugares
    • 9:34 - Mostrar lugares
    • 14:14 - Moverse

    Recursos

    • Searching, displaying, and navigating to places
    • Adopting unified Maps URLs
    • Place ID Lookup
      • Video HD
      • Video SD

    Videos relacionados

    WWDC24

    • Unlock the power of places with MapKit

    WWDC23

    • Meet MapKit for SwiftUI

    WWDC22

    • What's new in MapKit
  • Buscar este video…
    • 4:49 - Putting Marker on the Map with a coordinate

      // Putting Marker on the Map with a coordinate
      
      let annaLiviaCoordinates = CLLocationCoordinate2D(
          latitude: 53.347673,
          longitude: -6.290198
      )
      var body: some View {
          Map {
             Marker(
                  "Anna Livia Fountain",
                  coordinate: annaLiviaCoordinates
              )
          }
      }
    • 5:07 - Creating and resolving a PlaceDescriptor with coordinate PlaceRepresentation

      // Creating and resolving a PlaceDescriptor with coordinate PlaceRepresentation
      
      import GeoToolbox
      import MapKit
      
      let annaLiviaCoordinates = CLLocationCoordinate2D(
          latitude: 53.347673,
          longitude: -6.290198
      )
      let annaLiviaDescriptor =  PlaceDescriptor(
          representations: [.coordinate(annaLiviaCoordinates)],
          commonName: "Anna Livia Fountain"
      )
      
      let request = MKMapItemRequest(placeDescriptor: annaLiviaDescriptor)
      do {
          annaLiviaMapItem = try await request.mapItem
      } catch {
          print("Error resolving placeDescriptor: \(error)")
      }
    • 5:56 - Creating and resolving a PlaceDescriptor with address PlaceRepresentation

      // Creating and resolving a PlaceDescriptor with address PlaceRepresentation
      
      import GeoToolbox
      import MapKit
      
      let address = "121-122 James's St, Dublin 8"
      let descriptor =  PlaceDescriptor(
          representations: [.address(address)],
          commonName: "Obelisk Fountain"
      )
      
      let request = MKMapItemRequest(placeDescriptor: descriptor)
      do {
          obeliskFountain = try await request.mapItem
      } catch {
          print("Error resolving placeDescriptor: \(error)")
      }
    • 6:45 - Creating a PlaceDescriptor with identifiers

      // Creating a PlaceDescriptor with identifiers
      
      import GeoToolbox
      
      let annaLiviaCoordinates = CLLocationCoordinate2D(
          latitude: 53.347673,
          longitude: -6.290198
      )
      let identifiers = ["com.apple.MapKit" : "ICBB5FD7684CE949"]
      let annaLiviaDescriptor =  PlaceDescriptor(
          representations: [.coordinate(annaLiviaCoordinates)],
          commonName: "Anna Livia Fountain",
          supportingRepresentations: [.serviceIdentifiers(identifiers)]
      )
    • 7:28 - Fetching a MapItem from a PlaceDescriptor

      // Fetching a MapItem from a PlaceDescriptor
      
      let request = MKMapItemRequest(placeDescriptor: descriptor)
      let mapitem = try await request.mapItem
    • 7:43 - Getting a PlaceDescriptor from a MapItem

      // Getting a PlaceDescriptor from a MapItem
      
      let descriptor = PlaceDescriptor(mapItem: mapitem)
    • 8:10 - Place Card

      // Place Card
      
      var body: some View {
          Map {
              ForEach(fountains, id:\.name) { fountain in
                  Marker(item: fountain)
                      .mapItemDetailSelectionAccessory(.callout)
              }
          }
      }
    • 10:45 - Reverse geocode with MapKit

      // Reverse geocode with MapKit
      
      import MapKit
      
      let millCreekCoordinates = CLLocation(latitude: 39.042617, longitude: -94.587526)
      if let request = MKReverseGeocodingRequest(location: millCreekCoordinates) {
          do {
              let mapItems = try await request.mapItems
              millCreekMapItem = mapItems.first
          } catch {
              print("Error reverse geocoding location: \(error)")
          }
      }
    • 13:50 - Forward geocoding with MapKit

      // Forward geocoding with MapKit
      
      var body: some View {
          Map {
              if let mapItem {
                  Marker(item: mapItem)
              }
          }
          .task {
              let request = MKGeocodingRequest(
                  addressString: "1 Ferry Building, San Francisco"
              )
              do {
                  mapItem = try await request?.mapItems.first
              } catch {
                  print("Error geocoding location: \(error)")
              }
          }
      }
    • 14:38 - Allowing Map Selection

      // Allowing Map Selection
      
      @State var selectedItem: MKMapItem?
      
      var body: some View {
          Map(selection: $selectedItem) {
             UserAnnotation()
             ForEach(fountains, id: \.self) { item in
                Marker(item: item)
             }
          }
          .onChange(of: selectedItem) {
             // Compute Route
          }
      }
    • 15:00 - Fetch a route

      // Fetch a route
      
      let request = MKDirections.Request()
      request.source = MKMapItem.forCurrentLocation()
      request.destination = selectedItem
      let directions = MKDirections(request: request)
      do {
          let response = try await directions.calculate()
          returnedRoutes = response.routes
      } catch {
          print("Error calculating directions: \(error)")
      }
    • 16:06 - Fetch a cycling route

      // Fetch a cycling route
      
      let request = MKDirections.Request()
      request.source = MKMapItem.forCurrentLocation()
      request.destination = selectedItem
      request.transportType = .cycling
      let directions = MKDirections(request: request)
      do {
          let response = try await directions.calculate()
          returnedRoutes = response.routes
      } catch {
          print("Error calculating directions: \(error)")
      }
    • 16:25 - Display a route on the Map

      // Display a route on the Map
      
      Map {
          if let mapRoute {
              UserAnnotation()
              MapPolyline(mapRoute)
                  .stroke(Color.blue, lineWidth: 5)
          }
      }
    • 16:40 - Cycling directions in MapKit JS

      // Cycling directions in MapKit JS
      
      let directions = new mapkit.Directions();
      directions.route ({
          origin: safariPlayground,
          destination: cherryHillFountain,
          transportType: mapkit.Directions.Transport.Cycling
      }, (error, { routes: [{ polyline }] }) => {
          polyline.style.lineWidth = 5;
          map.showItems([
              new mapkit.PlaceAnnotation(place),
              new mapkit.PlaceAnnotation(
                place2,
                { selected: true }
              ),
              polyline
          ]);
      });
    • 17:26 - Look Around

      // Look Around
      
      var body: some View {
          Map {
              ForEach(fountains, id:\.name) { fountain in
                  Marker(item: fountain)
             }
          }
          .overlay(alignment: .bottomLeading) {
              if (lookAroundScene != nil) {
                  LookAroundPreview(scene: $lookAroundScene)
                      .frame(width: 230, height: 140)
                      .cornerRadius(10)
                      .padding(8)
              }
          }
      }
    • 18:10 - Look Around View in MapKit JS

      // Look Around View in MapKit JS
      
      const placeLookup = new mapkit.PlaceLookup();
      const place = await new Promise(
          resolve => placeLookup.getPlace(
              "IBE1F65094A7A13B1",
              (error, result) => resolve(result)
          )
      );
      
      // Create an interactive look around view.
      const lookAround = new mapkit.LookAround(
          document.getElementById("container"),
          place,
          options
      );
    • 18:35 - Look Around Options

      // Look Around Options for MapKit JS
      
      const options = {
          // Enters a full window experience
          // immediately on load
          openDialog: true,
          
          // Provides a button to enter and
          // exit full window.
          showsDialogControl: true,
          
          // Provides a button to destroy
          // the look around view.
          showsCloseControl: true,
      };
    • 19:10 - Handle MapKit JS Look Around events

      // Handle MapKit JS Look Around events
      
      lookAround.addEventListener(
          "close",
          event => {
              app.closeView();
              event.preventDefault();
          }
      );
      
      lookAround.addEventListener(
          "load",
          event => app.fadeInView()
      );
      
      lookAround.addEventListener(
          "error",
          event => app.fadeOutView()
      );
      
      lookAround.addEventListener(
          "readystatechange",
          event => console.log(lookAround.readyState)
      );
    • 20:01 - MapKit JS Look Around Preview

      // MapKit JS Look Around Preview
      
      const lookAround = new mapkit.LookAroundPreview(
          document.getElementById("container"),
          place
      );
    • 0:00 - Introducción
    • Las personas pueden navegar y explorar ubicaciones globales, incluidos lugares de interés, cafés, tiendas y senderos para caminatas con Apple Maps. Las plataformas MapKit y MapKit JS te permiten integrar estas funciones de mapeo en sus apps y sitios web. Las actualizaciones recientes incluyen 'PlaceDescriptor' para buscar y referenciar lugares, geocodificación mejorada para mostrar información del lugar y API de direcciones y Look Around para brindar asistencia de navegación.

    • 0:45 - Encontrar lugares
    • La nueva estructura GeoToolbox incluye el tipo 'PlaceDescriptor'. Utiliza 'PlaceDescriptor' para representar lugares con información estructurada, por ejemplo, un nombre común, una dirección, una coordenada o la ubicación de un dispositivo. Esto es útil cuando no tienes un ID de lugar de MapKit único para una ubicación, como cuando trabajas con datos de API o CRM externos, o cuando pasas referencias de lugar a un código que no usa MapKit. 'PlaceDescriptor' permite que MapKit u otros proveedores de servicios de mapas encuentren datos valiosos sobre el lugar especificado. La matriz de representaciones dentro de 'PlaceDescriptor' está ordenada en orden de precedencia decreciente, con la información más precisa primero, lo que ayuda a garantizar la identificación de la ubicación más precisa. Crea un 'PlaceDescriptor' al utilizar varios métodos, por ejemplo, especificar coordenadas, una dirección o un identificador de servicio. Un identificador de servicio es un diccionario que asigna un identificador de paquete a un identificador de lugar único para un servicio de mapeo específico. Esto permite flexibilidad e interoperabilidad entre diferentes servicios de mapeo. Cuando se utiliza un 'PlaceDescriptor' para crear un 'MKMapItemRequest', MapKit prioriza el uso del identificador MapKit de los identificadores de servicio, si está disponible. En caso contrario, recurre a otras representaciones, como coordenadas o dirección, para obtener el lugar. Los 'PlaceDescriptors' te permiten agregar fácilmente lugares a los mapas, mostrar tarjetas de lugares con información completa y crear enlaces universales a Apple Maps y brindar una experiencia de usuario perfecta en diferentes dispositivos y plataformas.

    • 9:34 - Mostrar lugares
    • En iOS 18, el proceso de geocodificación está integrado en MapKit, reemplazando las clases obsoletas de CoreLocation 'CLGeocoder' y 'CLPlacemark'. La geocodificación implica dos procesos principales: hacia adelante y hacia atrás. La geocodificación directa convierte una dirección en coordenadas, mientras que la geocodificación inversa hace lo contrario, toma coordenadas y proporciona una dirección. La nueva API MapKit te permite realizar solicitudes de geocodificación inversa utilizando 'MKReverseGeocodingRequest', la cual devuelve una matriz de elementos de mapa que generalmente contienen solo una entrada para la ubicación específica. Utiliza 'MKAddress' y 'MKAddressRepresentations' para mostrar la información de la dirección. 'MKAddress' proporciona cadenas de direcciones simples, completas y cortas, mientras que 'MKAddressRepresentations' ofrece más flexibilidad, lo que te permite personalizar la visualización de la dirección en función de factores como la configuración regional y las necesidades específicas de tu app, lo que permite una presentación más concisa y fácil de usar de los datos de ubicación.

    • 14:14 - Moverse
    • MapKit proporciona una API de direcciones que permite a las personas encontrar rutas entre ubicaciones al utilizar distintos modos de transporte, incluidos caminar, conducir y ahora andar en bicicleta. La API ofrece información detallada de la ruta, como estimaciones de tiempo y distancia, instrucciones paso a paso y la geometría de la ruta para dibujar en un mapa. Puedes crear solicitudes de direcciones, establecer el origen y el destino, y calcular rutas. La respuesta incluye ubicaciones de origen y destino coincidentes, una o más rutas y avisos relevantes como cierres de carreteras. MapKit también se ha ampliado para incluir soporte para indicaciones en bicicleta en watchOS y MapKit JS, lo que permite a las personas planificar rutas en bicicleta en sus relojes y sitios web. Además, la función Maps Look Around, que ofrece imágenes de 360 grados a nivel de calle, se ha incorporado a las apps MapKit en iOS 16 y ahora está disponible en MapKit JS, lo que te permite mejorar tus apps con vistas de calles interactivas.

Developer Footer

  • Videos
  • WWDC25
  • Ve más allá con MapKit
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines