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
 

Vidéos

Ouvrir le menu Fermer le menu
  • Collections
  • Toutes les vidéos
  • À propos

Plus de vidéos

  • À propos
  • Résumé
  • Code
  • Allez plus loin avec MapKit

    Découvrez les dernières mises à jour de MapKit et MapKit JS. Nous présenterons un nouveau type d'itinéraire – à vélo – et vous montrerons comment activer l'imagerie 3D Look Around sur le Web. Apprenez comment la nouvelle API Geocoding prend en charge la conversion entre les coordonnées et les adresses, et comment utiliser l'API Address Representations pour obtenir l'adresse la plus appropriée pour une région. Nous conclurons avec une nouvelle façon de référencer les lieux, qui garantit une intégration fluide de votre app avec App Intents.

    Chapitres

    • 0:00 - Introduction
    • 0:45 - Trouver des lieux
    • 9:34 - Afficher des lieux
    • 14:14 - Se déplacer

    Ressources

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

    Vidéos connexes

    WWDC24

    • Unlock the power of places with MapKit

    WWDC23

    • Meet MapKit for SwiftUI

    WWDC22

    • What's new in MapKit
  • Rechercher dans cette vidéo…
    • 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 - Introduction
    • Apple Plans permet de naviguer et d’explorer des lieux dans le monde entier, y compris des points de repère, des cafés, des magasins et des sentiers de randonnée. Les plateformes MapKit et MapKit JS vous permettent d’intégrer ces fonctionnalités de cartographie dans vos apps et sites web. Parmi les mises à jour récentes, citons « PlaceDescriptor » pour la recherche et le référencement de lieux, le géocodage amélioré pour l’affichage d’infos sur les lieux, ainsi que les API Directions et Look Around pour l’aide à la navigation.

    • 0:45 - Trouver des lieux
    • Le nouveau framework, GeoToolbox, inclut le type « PlaceDescriptor ». Utilisez « PlaceDescriptor » pour représenter des lieux à l’aide d’infos structurées, telles qu’un nom commun, une adresse, des coordonnées ou l’emplacement d’un appareil. Cela est utile lorsque vous ne disposez pas d’un ID MapKit unique pour un lieu, par exemple lorsque vous utilisez des données provenant d’API ou de CRM externes, ou lorsque vous transmettez des références de lieux à un code qui n’utilise pas MapKit. « PlaceDescriptor » permet à MapKit ou à d’autres fournisseurs de services de cartographie de trouver des données riches sur le lieu spécifié. Le tableau de représentations dans « PlaceDescriptor » est ordonné par ordre de priorité décroissante, avec les infos les plus précises en premier, ce qui permet d’assurer l’identification la plus précise possible du lieu. Créez un « PlaceDescriptor » à l’aide de différentes méthodes, par exemple en spécifiant des coordonnées, une adresse ou un ID de service. Un ID de service est un dictionnaire qui associe un ID de lot à un ID de lieu unique pour un service de cartographie spécifique. Cela permet une flexibilité et une interopérabilité entre différents services de cartographie. Lorsque vous utilisez un « PlaceDescriptor » pour créer un « MKMapItemRequest », MapKit utilise en priorité l’ID MapKit s’il est disponible parmi les ID de service. Sinon, il se rabat sur d’autres représentations comme les coordonnées ou l’adresse pour récupérer le lieu. Les « PlaceDescriptors » vous permettent d’ajouter facilement des lieux à des cartes, d’afficher des fiches de lieu avec des infos détaillées et de créer des liens universels vers Apple Plans, offrant ainsi une expérience utilisateur fluide sur différents appareils et plateformes.

    • 9:34 - Afficher des lieux
    • Dans iOS 18, le processus de géocodage est intégré à MapKit, remplaçant ainsi les classes CoreLocation obsolètes « CLGeocoder » et « CLPlacemark ». Le géocodage implique deux processus principaux : direct et inversé. Le géocodage direct convertit une adresse en coordonnées, tandis que le géocodage inversé fait le contraire, en prenant des coordonnées et en fournissant une adresse. La nouvelle API MapKit vous permet d’effectuer des demandes de géocodage inversé à l’aide de « MKReverseGeocodingRequest », qui renvoie un tableau d’éléments cartographiques, contenant généralement une seule entrée pour le lieu spécifique. Utilisez « MKAddress » et « MKAddressRepresentations » pour afficher les infos d’adresse. « MKAddress » fournit de simples chaînes d’adresses complètes et courtes, tandis que « MKAddressRepresentations » offre plus de flexibilité, vous permettant de personnaliser l’affichage de l’adresse en fonction de facteurs tels que la langue et les besoins spécifiques de l’app, pour une présentation plus concise et conviviale des données de localisation.

    • 14:14 - Se déplacer
    • MapKit fournit une API d’itinéraires qui permet de trouver des itinéraires entre des lieux en utilisant divers modes de transport, notamment la marche, la voiture et maintenant le vélo. L’API fournit des infos détaillées sur les itinéraires, telles que des estimations de temps et de distance, des instructions détaillées et la géométrie de l’itinéraire pour dessiner sur une carte. Vous pouvez créer des demandes d’itinéraire, définir la source et la destination et calculer des itinéraires. La réponse comprend des lieux source et de destination correspondants, un ou plusieurs itinéraires et des avis pertinents tels que les fermetures de routes. MapKit s’est également enrichi de la prise en charge des itinéraires pour cyclistes sur watchOS et MapKit JS, ce qui permet aux utilisateurs de planifier des itinéraires cyclistes sur leurs montres et leurs sites web. Par ailleurs, la fonctionnalité Look Around de Plan, qui fournit des vues à 360 degrés au niveau des rues, a été intégrée dans les apps MapKit dans iOS 16 et est désormais disponible dans MapKit JS, ce qui vous permet d’améliorer vos apps avec des vues de rue interactives.

Developer Footer

  • Vidéos
  • WWDC25
  • Allez plus loin avec 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