Place Markers コンポーネント
Place Markers コンポーネントを使用すると、地図上に場所の重要な情報を直接表示する、カスタマイズ可能な地図の注釈を作成できます。場所の評価、場所のタイプ、営業中または閉店中のステータス、価格帯、カスタム テキスト(AI 生成ラベルや旅程番号など)などのコンテンツを表示できます。これにより、ユーザーは詳細なプレイスカードをタップしなくても、より多くの情報を含む地図を探索できます。
PlaceMarker ごとに 1 つのマーカー アイコンとオプションのマーカー テキストを表示できます。
使用可能なアイコンは次のとおりです。
type: 場所のタイプ。none: アイコンなし。
rating: 評価スコア。priceRange: 価格帯(例: $10 ~ 20)。openStatus: ビジネスが営業中か休業中か。custom: カスタム テキスト(「人気」など)。
プレイス ID(.placeID)、リソース名(.resourceName)、地理座標(.coordinate)を使用して場所を参照します。
表示と帰属表示の要件
Places UI キットの地図マーカーが表示される場合、マーカーが単独で表示されてはなりません。インタラクティブで、クリックまたはタップすると関連する Place Details コンポーネントまたはライトボックスが開き、必要な Google ブランド、投稿者の帰属表示、問題の報告フローを提供する必要があります。
スペースが限られている場合のシナリオについては、写真とクチコミの帰属に関する要件をご覧ください。
Place Marker の例
マーカーの基本的なカスタマイズ
次のコード例は、プレイスマーカーの基本的なカスタマイズを示しています。
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") ) } }
マーカーの外観をカスタマイズする
次のコード例は、宣言型の SwiftUI ビュー修飾子を使用して、マーカーの吹き出しの三角形の先端を非表示にしてマーカーの外観をカスタマイズし、ユーザーがマーカーをタップしたときにカスタムアプリ アクションをトリガーするタップ コールバックを提供する方法を示しています。
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)") } } }
コールバックを処理する
次のコード例は、コールバックを使用してレンダリングの成功またはデータ欠落エラーを処理する方法を示しています。
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)") } } } }
Maps SDK と統合する
次のコード例は、PlaceMarkerHostingView ヘルパークラスを使用して PlaceMarker をラップし、Google Maps SDK for iOS の GMSMarker 内に 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 }