به طور پیش فرض، نقاط مورد علاقه (POI) به همراه نمادهای مربوطه روی نقشه پایه ظاهر می شوند. POI شامل پارک ها، مدارس، ساختمان های دولتی و موارد دیگر می شود. علاوه بر این، زمانی که نوع نقشه kGMSTypeNormal
باشد، POIهای تجاری به طور پیش فرض روی نقشه ظاهر می شوند. کسب و کار POI نشان دهنده مشاغلی مانند مغازه ها، رستوران ها، هتل ها و غیره است.
یک POI مطابق با شناسه مکان است که در 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)") } }
هدف-C
#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 }
هدف-C
// 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 ها یا دسته های خاصی از POI ها پنهان کنید.
اعلان سبک JSON زیر همه POI های تجاری را روی نقشه پنهان می کند:
[
{
"featureType": "poi.business",
"stylers": [
{ "visibility": "off" }
]
}
]
به عنوان مثالی دیگر، JSON زیر نمایش همه دستههای POI را ساده میکند:
[
{
"featureType": "poi",
"stylers": [
{ "visibility": "simplified" }
]
}
]
برای جزئیات بیشتر، راهنمای پنهان کردن ویژگی های نقشه با یک ظاهر طراحی را ببینید.