AI-generated Key Takeaways
-
This documentation demonstrates handling click events on map boundaries, specifically using
GMSFeatureTypeLocalityfor the example. -
When a boundary is clicked, an info window appears displaying event data, such as the place IDs of the clicked features.
-
It's crucial to note that map boundaries need a minimum alpha value for click events to register, ensuring they are tappable.
-
Sample code snippets in Swift and Objective-C are provided for implementation guidance on setting up and responding to click events on map boundaries.
This example shows map boundaries for GMSFeatureTypeLocality
, and implements the delegate
function that styles the clicked
polygon. The result displays an info alert window with the event data.

Swift
class SampleViewController : UIViewController { private lazy var mapView : GMSMapView = GMSMapView ( frame : . zero , mapID : GMSMapID ( identifier : "YOUR_MAP_ID" ), camera : GMSCameraPosition ( latitude : 40 , longitude : - 80 , zoom : 12 )) override func loadView () { view = mapView let style = FeatureStyle ( fill : . orange . withAlphaComponent ( 0.5 ), stroke : . orange , strokeWidth : 2 ) mapView . featureLayer ( of : . locality ). style = { _ in style } mapView . delegate = self } } extension SampleViewController : GMSMapViewDelegate { func mapView ( _ mapView : GMSMapView , didTap features : [ Feature ] , in featureLayer : FeatureLayer<Feature> , atLocation : CLLocationCoordinate2D ) { let toast = UIAlertController ( title : "Clicked places" , message : ( features . compactMap { ( $0 as ? PlaceFeature )?. placeID }). joined ( separator : ", " ), preferredStyle : . alert ) present ( toast , animated : true , completion : nil ) } }
Objective-C
@interface SampleViewController : UIViewController < GMSMapViewDelegate > @end @implementation SampleViewController - ( void ) loadView { GMSMapView * mapView = [ GMSMapView mapWithFrame : CGRectZero mapID : [ GMSMapID mapIDWithIdentifier : @"YOUR_MAP_ID" ] camera : [ GMSCameraPosition cameraWithLatitude : 40 longitude : -80 zoom : 12 ]]; mapView . delegete = self ; GMSFeatureStyle * style = [ GMSFeatureStyle styleWithFillColor : [[ UIColor orangeColor ] colorWithAlphaComponent : 0.5 ] strokeColor : [ UIColor orangeColor ] strokeWidth : 2.0 ]; [ mapView featureLayerOfFeatureType : GMSFeatureTypeLocality ]. style = ^ ( GMSPlaceFeature * feature ) { return style ; }; self . view = mapView ; } - ( void ) mapView: ( GMSMapView * ) mapView didTapFeatures: ( NSArray<id<GMSFeature> > * ) features inFeatureLayer: ( GMSFeatureLayer * ) featureLayer atLocation: ( CLLocationCoordinate2D ) location { NSMutableArray<NSString * > * places = [ NSMutableArray array ]; for ( id<GMSFeature> feature in features ) { if ( ! [ feature isKindOfClass : [ GMSPlaceFeature class ]]) { continue ; } NSString * placeID = (( GMSPlaceFeature * ) feature ). placeID ; [ places addObject : placeID ]; } UIAlertController * toast = [ UIAlertController alertControllerWithTitle : @"Clicked places" message : [ places componentsJoinedByString : @", " ] preferredStyle : UIAlertControllerStyleAlert ]; [ self presentViewController : toast animated : YES completion : nil ]; }

