Componente Place Markers
Com o componente Place Markers, é possível criar anotações personalizáveis que mostram informações importantes do lugar diretamente no mapa. Você pode mostrar conteúdo como a classificação de um lugar, o tipo de lugar, o status aberto ou fechado, a faixa de preço ou um texto personalizado (por exemplo, um rótulo gerado por IA ou um número de itinerário). Isso oferece aos usuários uma experiência de exploração de mapas mais informativa sem exigir que eles toquem em um card de lugar detalhado.
O
É possível mostrar um ícone de marcador e um texto opcional por PlaceMarker.
Os ícones disponíveis são:
type: o tipo de lugar.none: sem ícone.
rating: pontuação da classificação.priceRange: faixa de preço (por exemplo, R$ 10 a R$ 20).openStatus: se uma empresa está aberta ou fechada.custom: texto personalizado (por exemplo, "POPULAR").
Faça referência ao lugar usando um ID de lugar (.placeID), um nome de recurso (.resourceName) ou coordenadas geográficas (.coordinate).
Requisitos de exibição e atribuição
Quando os marcadores de mapa do Kit de Interface do Places são mostrados, eles não podem aparecer isolados. Eles precisam ser interativos e abrir um componente de Place Details ou uma caixa de luz associada ao clicar ou tocar para fornecer a marca do Google, a atribuição do colaborador e os fluxos de denúncia de um problema necessários.
Consulte nossos requisitos de atribuição de fotos e avaliações para cenários em que o espaço é limitado.
Exemplos de marcador de lugar
Personalizações básicas de marcadores
O exemplo de código a seguir demonstra personalizações básicas de marcadores de lugar.
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") ) } }
Personalizar a aparência do marcador
O exemplo de código a seguir demonstra como usar modificadores de visualização declarativos do SwiftUI para personalizar a aparência do marcador. Para isso, ele oculta o bico triangular do balão de fala e fornece um callback de toque para acionar ações personalizadas do app quando o usuário toca no marcador.
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)") } } }
Processar callbacks
O exemplo de código a seguir demonstra como usar callbacks para processar erros de renderização bem-sucedida ou de dados ausentes.
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)") } } } }
Integrar com o SDK do Maps
O exemplo de código a seguir demonstra como incorporar PlaceMarker em um SDK do Maps para iOS GMSMarker usando a classe auxiliar PlaceMarkerHostingView para envolver 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 }