Composant Place Markers
Le composant "Repères de lieux" vous permet de créer des annotations de carte personnalisables qui affichent des informations clés sur les lieux directement sur la carte. Vous pouvez afficher des contenus tels que la note d'un lieu, son type, son état (ouvert ou fermé), sa gamme de prix ou du texte personnalisé (par exemple, un libellé généré par IA ou un numéro d'itinéraire). Vos utilisateurs bénéficient ainsi d'une expérience d'exploration de carte plus informative sans avoir à appuyer sur une fiche détaillée d'un lieu.
Vous pouvez afficher une icône de repère et un texte de repère facultatif par PlaceMarker.
Voici les icônes disponibles :
type: type de lieu.none: aucune icône.
rating: score de la note.priceRange: gamme de prix (par exemple, 10 € à 20 €).openStatus: indique si un établissement est ouvert ou fermé.custom: texte personnalisé (par exemple, "POPULAIRE").
Faites référence au lieu à l'aide d'un ID de lieu (.placeID), d'un nom de ressource (.resourceName) ou de coordonnées géographiques (.coordinate).
Exigences concernant l'affichage et l'attribution
Lorsque des repères de carte du Kit UI pour Places sont affichés, ils ne doivent pas apparaître de manière isolée. Ils doivent être interactifs et ouvrir un composant Place Details ou une lightbox associés lorsqu'un utilisateur clique ou appuie dessus. Cela permet de fournir la marque Google requise, l'attribution des contributeurs et les flux "Signaler un problème".
Consultez nos exigences concernant l'attribution des photos et des avis pour les cas où l'espace est limité.
Exemples de repères
Personnalisation de base des repères
L'exemple de code suivant illustre les personnalisations de base des repères de lieux.
Swift
import GooglePlacesSwift import SwiftUI @MainActor struct DefaultMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.placeID("PLACE_ID"), markerIcon: .none ) } } @MainActor struct RatingMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.placeID("PLACE_ID"), markerIcon: .none, markerText: .rating ) } } @MainActor struct TypeAndRatingMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.placeID("PLACE_ID"), markerIcon: .type, markerText: .rating ) } } @MainActor struct PriceRangeMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.resourceName("places/PLACE_RESOURCE_NAME"), markerIcon: .none, markerType: .priceRange ) } } @MainActor struct OpenStatusMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.coordinate(CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194)), markerIcon: .icon, markerText: .openStatus ) } } @MainActor struct PhotoMarker: View { PlaceMarker( identifier: PlaceIdentifier.resourceName("places/PLACE_RESOURCE_NAME") markerIcon =.Photo ) } @MainActor struct CustomMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.placeID("PLACE_ID"), markerIcon: .none, markerType: .custom(label: "3") ) } }
Personnaliser l'apparence des repères
L'exemple de code suivant montre comment utiliser des modificateurs de vue SwiftUI déclaratifs pour personnaliser l'apparence des repères en masquant le bec triangulaire de la bulle de dialogue et en fournissant un rappel d'appui pour déclencher des actions d'application personnalisées lorsque l'utilisateur appuie sur le repère.
Swift
@MainActor struct ModifierStyleMarker: View { var body: some View { PlaceMarker( identifier: .placeID("PLACE_ID"), markerIcon: .none, markerText: .openStatus, configuration: PlaceMarkerConfiguration(beakPresence: false) ) .onTap { placeID in print("Marker tapped for place: \(placeID)") } } }
Gérer les rappels
L'exemple de code suivant montre comment utiliser des rappels pour gérer les erreurs de rendu ou les données manquantes.
Swift
import GooglePlacesSwift import SwiftUI @MainActor struct StatusHandlingMarker: View { var body: some View { PlaceMarker( identifier: PlaceIdentifier.placeID("PLACE_ID"), markerIcon: .none markerText: .priceRange, ) /// Triggered when place data is successfully fetched or when data fetching fails or /// required data is missing for the place.. .onLoad { result in if let place = result.place { print("Marker successfully loaded for place ID: \(place.placeID)") } else if let error = result.error { print("Failed to load marker: \(error)") } } } }
Intégrer le SDK Maps
L'exemple de code suivant montre comment intégrer PlaceMarker dans un GMSMarker du SDK Google Maps pour iOS à l'aide de la classe d'assistance PlaceMarkerHostingView pour encapsuler PlaceMarker.
Swift
import GoogleMaps import GooglePlacesSwift import SwiftUI import UIKit func addPlaceMarker(to mapView: GMSMapView, placeID: String) { let marker = GMSMarker() let markerView = PlaceMarker( identifier: .placeID(placeID), markerType: .rating(showIcon: true), ).onLoad { result in switch Result case .success(let place) marker.position = place.coordinate case .error(let error) { print("Failed to load marker: \(error)") } } marker.iconView = PlaceMakerHostingView(markerView) marker.map = mapView }