Reputation: 5481
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:
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
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
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