به طور پیشفرض، نقاط مورد علاقه (POI) به همراه نمادهای مربوطهشان روی نقشه پایه ظاهر میشوند. POIها شامل پارکها، مدارس، ساختمانهای دولتی و موارد دیگر میشوند. علاوه بر این، POIهای تجاری به طور پیشفرض روی نقشه ظاهر میشوند، زمانی که نوع نقشه kGMSTypeNormal باشد. POIهای تجاری نشاندهنده مشاغلی مانند مغازهها، رستورانها، هتلها و موارد دیگر هستند.
یک POI مطابق با Place ID است که در Places SDK برای iOS تعریف شده است. برای مثال، پارکهای تفریحی POI هستند، اما چیزهایی مانند فوارههای آب معمولاً POI نیستند (مگر اینکه از اهمیت ملی یا تاریخی برخوردار باشند).
گوش دادن به رویدادهای کلیک در POIها
اگر میخواهید به ضربه زدن کاربر روی یک POI پاسخ دهید، GMSMapViewDelegate را پیادهسازی کنید و متد mapView(_:didTapPOIWithPlaceID:name:location:) را همانطور که در مثال زیر نشان داده شده است، پیادهسازی کنید:
سویفت
import GoogleMaps class POI: UIViewController, GMSMapViewDelegate { override func loadView() { let camera = GMSCameraPosition.camera( withLatitude: 47.603, longitude:-122.331, zoom:14 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } func mapView( _ mapView: GMSMapView, didTapPOIWithPlaceID placeID: String, name: String, location: CLLocationCoordinate2D ) { print("You tapped \(name): \(placeID), \(location.latitude)/\(location.longitude)") } }
هدف-سی
#import "POI.h" @import GoogleMaps; @interface POI () <GMSMapViewDelegate> @end @implementation POI - (void)loadView { GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.603 longitude:-122.331 zoom:14]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location { NSLog(@"You tapped %@: %@, %f/%f", name, placeID, location.latitude, location.longitude); } @end
نمایش جزئیات در یک پنجره اطلاعات
نقاط مورد علاقه (POI) به طور پیشفرض روی نقشه ظاهر میشوند، اما هیچ رابط کاربری پیشفرضی برای کلیک وجود ندارد (API به طور خودکار پنجره اطلاعات یا هیچ رابط کاربری دیگری را هنگام ضربه زدن کاربر روی یک POI نمایش نمیدهد). مثال زیر نحوه استفاده از یک نشانگر برای نمایش پنجره اطلاعات برای یک POI را نشان میدهد:
سویفت
// Declare GMSMarker instance at the class level. let infoMarker = GMSMarker() // Attach an info window to the POI using the GMSMarker. func mapView( _ mapView: GMSMapView, didTapPOIWithPlaceID placeID: String, name: String, location: CLLocationCoordinate2D ) { infoMarker.snippet = placeID infoMarker.position = location infoMarker.title = name infoMarker.opacity = 0; infoMarker.infoWindowAnchor.y = 1 infoMarker.map = mapView mapView.selectedMarker = infoMarker }
هدف-سی
// Declare a GMSMarker instance at the class level. GMSMarker *infoMarker; // Attach an info window to the POI using the GMSMarker. - (void)mapView:(GMSMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location { infoMarker = [GMSMarker markerWithPosition:location]; infoMarker.snippet = placeID; infoMarker.title = name; infoMarker.opacity = 0; CGPoint pos = infoMarker.infoWindowAnchor; pos.y = 1; infoMarker.infoWindowAnchor = pos; infoMarker.map = mapView; mapView.selectedMarker = infoMarker; }
جلوگیری از نمایش نقاط مورد علاقه روی نقشه
شما میتوانید با اعمال سبکهای سفارشی به همه POIها یا به دستههای خاصی از POIها، POIها را پنهان کنید.
اعلان سبک JSON زیر تمام POI های تجاری را روی نقشه پنهان میکند:
[
{
"featureType": "poi.business",
"stylers": [
{ "visibility": "off" }
]
}
]
به عنوان مثالی دیگر، JSON زیر نمایش همه دستههای POIها را ساده میکند:
[
{
"featureType": "poi",
"stylers": [
{ "visibility": "simplified" }
]
}
]
برای جزئیات بیشتر، به راهنمای پنهان کردن عوارض نقشه با استفاده از استایلبندی مراجعه کنید.