Umair
Umair

Reputation: 5481

Disable click event on a transit bus stop icon

How can I disable the click event on a bus icon in Google Maps? I have my own markers that provide the bus stop information, and a user can accidentally click the bus stop instead of my custom marker and sometime there can be multiple popup boxes. See the image below:

Google maps with custom marker

I use this code for the map:

// https://maps.googleapis.com/maps/api/js?key=XXXXXX&sensor=true&callback=initialize
var mapOptions = {
    center: new google.maps.LatLng(mapCenterLat, mapCenterLon),
    zoom: 9,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapTypeControl: false,
    panControl: true,  
    scaleControl: false,
    overviewMapControl: false,
    streetViewControl: false,
    navigationControl: true,
    navigationControlOptions: {
        style: google.maps.NavigationControlStyle.ANDROID
    }
};

map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

Upvotes: 1

Views: 1092

Answers (2)

xomena
xomena

Reputation: 32158

Starting from version 3.24 of Maps JavaScript API you can use a property clickableIcons in MapOptions object:

https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapOptions

You can use this property to turn off clickable icons on maps by setting the clickableIcons property to false. Also exists a setClickableIcons() method.

Please look at this example: http://jsbin.com/liyamecoqa/edit?html,output

var map;
      
      /**
       * The POIControl adds a control to the map that turns POI
       * clicking off or on.
       * This constructor takes the control DIV as an argument.
       * @constructor
       */
      function POIControl(controlDiv, map) {

        // Set CSS for the control border.
        var controlUI = document.createElement('div');
        controlUI.style.backgroundColor = '#fff';
        controlUI.style.border = '2px solid #fff';
        controlUI.style.borderRadius = '3px';
        controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
        controlUI.style.cursor = 'pointer';
        controlUI.style.marginBottom = '22px';
        controlUI.style.textAlign = 'center';
        if (map.getClickableIcons()) {
          controlUI.title = 'Click to disable Map Icons clicks.';
        } else {
          controlUI.title = 'Click to enable Map Icons clicks.';
        }
        controlDiv.appendChild(controlUI);

        // Set CSS for the control interior.
        var controlText = document.createElement('div');
        controlText.style.color = 'rgb(25,25,25)';
        controlText.style.fontFamily = 'Roboto,Arial,sans-serif';
        controlText.style.fontSize = '16px';
        controlText.style.lineHeight = '38px';
        controlText.style.paddingLeft = '5px';
        controlText.style.paddingRight = '5px';
        if (map.getClickableIcons()) {
          controlText.innerHTML = 'Disable POIs';
        } else {
          controlText.innerHTML = 'Enable POIs';
        }
        controlUI.appendChild(controlText);

        // Setup the click event listeners: flip the clickableIcons state.
        controlUI.addEventListener('click', function() {
          var clickableIcons = map.getClickableIcons();
          if (clickableIcons) {
            controlUI.title = 'Click to enable Map Icons clicks.';
            controlText.innerHTML = 'Enable POIs';
          } else {
            controlUI.title = 'Click to disable Map Icons clicks.';
            controlText.innerHTML = 'Disable POIs';
          }
          map.setClickableIcons(!clickableIcons);
        });

      }
      
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -33.858667, lng: 151.214028},
          zoom: 16,
          clickableIcons: false
        });
        // Create the DIV to hold the control and call the POIControl()
        // constructor passing in this DIV.
        var poiControlDiv = document.createElement('div');
        var poiControl = new POIControl(poiControlDiv, map);

        poiControlDiv.index = 1;

        map.controls[google.maps.ControlPosition.TOP_CENTER].push(poiControlDiv);

      }
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
#map {
    height: 100%;
}
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?v=3&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initMap"
async defer></script>

Upvotes: 3

Verma
Verma

Reputation: 8439

You can put polygon over POI to block them being clickable.

Here is geocodezip example of doing that http://www.geocodezip.com/v3_GoogleEx_rectangle-simple_RoseCanyonClear.html

Upvotes: -1

Related Questions