کامپوننت نشانگرهای مکان
کامپوننت نشانگرهای مکان به شما امکان میدهد حاشیهنویسیهای نقشه قابل تنظیمی ایجاد کنید که اطلاعات کلیدی مکان را مستقیماً روی نقشه نمایش میدهند. میتوانید محتوایی مانند رتبهبندی مکان، نوع مکان، وضعیت باز یا بسته بودن، محدوده قیمت یا متن سفارشی (مثلاً یک برچسب تولید شده توسط هوش مصنوعی یا شماره برنامه سفر) را نمایش دهید. این کار به کاربران شما تجربه کاوش نقشه آموزندهتری را بدون نیاز به مراجعه به کارت مکان دقیق ارائه میدهد.

شما میتوانید یک آیکون نشانگر و متن نشانگر اختیاری را در هر PlaceMarker نمایش دهید.
آیکونهای موجود عبارتند از:
-
type: نوع مکان. -
none: بدون آیکون.
-
rating: امتیاز رتبهبندی. -
priceRange: محدوده قیمت (برای مثال، ۱۰ تا ۲۰ دلار). -
openStatus: اینکه آیا یک کسب و کار باز است یا بسته. -
custom: متن سفارشی (برای مثال، "محبوب").
با استفاده از شناسه مکان ( .placeID )، نام منبع ( .resourceName ) یا مختصات جغرافیایی ( .coordinate ) به مکان ارجاع دهید.
الزامات نمایش و انتساب
وقتی نشانگرهای نقشه Places UI Kit نمایش داده میشوند، نشانگرها نباید به صورت جداگانه ظاهر شوند. آنها باید تعاملی باشند و با کلیک یا لمس، یک کامپوننت یا لایت باکس جزئیات مکان مرتبط را باز کنند تا جریانهای مورد نیاز برندسازی گوگل، انتساب مشارکتکننده و گزارش مشکل را ارائه دهند.
برای سناریوهایی که فضا محدود است ، به الزامات مربوط به عکسها و نظرات ما مراجعه کنید.
نمونههای نشانگر مکان
سفارشیسازیهای اولیه نشانگر
مثال کد زیر، سفارشیسازیهای اولیه نشانگر مکان را نشان میدهد.
سویفت
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 را برای سفارشیسازی ظاهر نشانگر با پنهان کردن منقار حباب گفتار مثلثی و ارائه یک فراخوانی ضربه برای راهاندازی اقدامات سفارشی برنامه هنگام ضربه زدن کاربر روی نشانگر نشان میدهد.
سویفت
@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)") } } }
مدیریت فراخوانیهای برگشتی
مثال کد زیر نحوه استفاده از callbackها را برای مدیریت خطاهای رندر موفق یا خطاهای دادههای از دست رفته نشان میدهد.
سویفت
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)") } } } }
ادغام با SDK نقشهها
مثال کد زیر نحوه جاسازی PlaceMarker در SDK نقشههای گوگل برای iOS GMSMarker با استفاده از کلاس کمکی PlaceMarkerHostingView برای پوشش PlaceMarker نشان میدهد.
سویفت
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 }