Support

Account

Home Forums Front-end Issues Marker clustering doesn't work

Solved

Marker clustering doesn't work

  • HI,

    I am trying to add marker clustering in to acf google maps js code, but I fail.
    Nothing seems to work, can someone check my code please ?

    I am using markerCluster.js, which is added and loaded.

    (function($) {
    /*
    *  new_map
    */
    
    function new_map( $el ) {
    	
    	// var
    	var $markers = $el.find('.marker');
    	
    	// vars
    	var args = {
    		zoom		: 12,
    		center		: new google.maps.LatLng(52.279776, 19.343746),
    		mapTypeId	: google.maps.MapTypeId.ROADMAP,
    		scrollwheel: true,
    		zoomControlOptions: {
    			style: google.maps.ZoomControlStyle.SMALL,
    			position: google.maps.ControlPosition.RIGHT_CENTER
    		},
    		styles: [{"elementType":"geometry","stylers":[{"color":"#bb12f2"}]},{"elementType":"labels","stylers":[{"color":"#ffffff"},{"visibility":"on"}]},{"elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"elementType":"labels.text.fill","stylers":[{"lightness":20},{"gamma":0.01}]},{"elementType":"labels.text.stroke","stylers":[{"saturation":-31},{"lightness":-33},{"gamma":0.8},{"weight":2}]},{"featureType":"landscape","elementType":"geometry","stylers":[{"saturation":30},{"lightness":30}]},{"featureType":"landscape","elementType":"geometry.fill","stylers":[{"visibility":"on"}]},{"featureType":"poi","elementType":"geometry","stylers":[{"saturation":20}]},{"featureType":"poi.park","elementType":"geometry","stylers":[{"saturation":-20},{"lightness":20}]},{"featureType":"road","elementType":"geometry","stylers":[{"saturation":-30},{"lightness":10}]},{"featureType":"road","elementType":"geometry.stroke","stylers":[{"saturation":25},{"lightness":25}]},{"featureType":"water","stylers":[{"lightness":-20}]}]
    		
    	};
    	
    	// create map	        	
    	var map = new google.maps.Map( $el[0], args);
    	
    	// add a markers reference
    	map.markers = [];
    	
    	// add markers
    	$markers.each(function(){
        	add_marker( $(this), map );	
    	});
    	
    	// center map
    	center_map( map );
    
    	// return
    	return map;	
    }
    
    /*
    *  add_marker
    */
    
    function add_marker( $marker, map ) {
    
    	// var
    	var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );
    
    	// create marker
    	var marker = new google.maps.Marker({
    		position	: latlng,
    		map			: map,
    		icon: "http://gonzo.mastafu2.pro-linuxpl.com/wp-content/themes/customTpl/img/googleMarker.png"
    	});
    	
    	// add to array
    	map.markers.push( marker );
    
    	// if marker contains HTML, add it to an infoWindow
    	if( $marker.html() )
    	{
    		// create info window
    		var infowindow = new google.maps.InfoWindow({
    			content		: $marker.html()
    		});
    
    		// show info window when marker is clicked
    		google.maps.event.addListener(marker, 'click', function() {
    
    			infowindow.open( map, marker );
    
    		});
    	}
    }
    
    /*
    *  center_map
    */
    
    function center_map( map ) {
    
    	// vars
    	var bounds = new google.maps.LatLngBounds();
    
    	// loop through all markers and create bounds
    	$.each( map.markers, function( i, marker ){
    
    		var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );
    
    		bounds.extend( latlng );
    
    	});
    
    	// only 1 marker?
    	if( map.markers.length == 1 )
    	{
    		// set center of map
    	    map.setCenter( bounds.getCenter() );
    	    map.setZoom( 16 );
    	}
    	else
    	{
    		// fit to bounds
    		map.fitBounds( bounds );
    	}
    }
    
    function markerCluster( markers, map ) {
    	var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
    	console.log( markers );
    }
    /*
    * Render when ready
    */
    // global var
    var map = null;
    
    $(document).ready(function(){
    
    	$('.acf-map').each(function(){
    
    		// create map
    		map = new_map( $(this) );
    
    	});
    
    });
    })(jQuery);
  • Hi @mastafu

    I think that’s because you’ve set the function, but never execute it. Could you please try it like this:

    // add markers
    $markers.each(function(){
        add_marker( $(this), map );	
    });
    
    // center map
    center_map( map );
    
    // add marker cluster
    markerCluster( map.markers, map )
    
    // return
    return map;

    Because this issue is more related to Google Map, kindly get in touch with Google Maps community for further support.

    Thanks 🙂

  • Best example of not to code very late 🙂

  • I tried this, but console gave me still “MarkerClusterer is not defined” and not work unfortunately. Did i something wrong? Thanks

    Here is my code

    (function($) {
    
    /*
    *  new_map
    *
    *  This function will render a Google Map onto the selected jQuery element
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	4.3.0
    *
    *  @param	$el (jQuery element)
    *  @return	n/a
    */
    
    function new_map( $el ) {
    	
    	// var
    	var $markers = $el.find('.marker');
    	
    	// vars
    	var args = {
    		zoom		: 16,
    		center		: new google.maps.LatLng(0, 0),
    		mapTypeId	: google.maps.MapTypeId.HYBRID
    	};
    	
    	
    	// create map	        	
    	var map = new google.maps.Map( $el[0], args);
    	
    	
    	// add a markers reference
    	map.markers = [];
    	
    	
    	// add markers
    	$markers.each(function(){
    		
        	add_marker( $(this), map );
    		
    	});
    	
    	// center map
    	center_map( map );
    	
    	
    	// add marker cluster
    	markerCluster( map.markers, map );
    	
    	
    	// return
    	return map;
    	
    }
    
    /*
    *  add_marker
    *
    *  This function will add a marker to the selected Google Map
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	4.3.0
    *
    *  @param	$marker (jQuery element)
    *  @param	map (Google Map object)
    *  @return	n/a
    */
    
    function add_marker( $marker, map ) {
    
    	// var
    	var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );
    	
    	var defaultMarker = {
    		path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z M -2,-30 a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0',
    	    fillColor: '#de6b6b',
    	    fillOpacity: 1
    	};
    	
    	var blueMarker = {
    		//path: 'M -1,0 A 1,1 0 0 0 1,0 1,1 0 0 0 -1,0 z',
    	    //path: google.maps.SymbolPath.CIRCLE,
    	    //fillColor: '#42bd2c',
    	    //fillOpacity: 1,
    	    //scale: 3,
    	    //strokeColor: "#42bd2c",
    	    //strokeWeight: 3,
    	    path: 'M 0,0 C -2,-20 -10,-22 -10,-30 A 10,10 0 1,1 10,-30 C 10,-22 2,-20 0,0 z M -2,-30 a 2,2 0 1,1 4,0 2,2 0 1,1 -4,0',
    	    fillColor: '#3292d6',
    	    fillOpacity: 1
    	}
    	
    	//Check your marker type, if it's green then set that otherwise leave it grey
    	var markerType = $marker.attr('data-marker')=="bluemarker"?blueMarker:defaultMarker;
    
    	// create marker
    	var marker = new google.maps.Marker({
    		position	: latlng,
    		icon		: markerType,
    		map			: map
    	});
    
    	// add to array
    	map.markers.push( marker );
    
    	// if marker contains HTML, add it to an infoWindow
    	if( $marker.html() )
    	{
    		// create info window
    		var infowindow = new google.maps.InfoWindow({
    			content		: $marker.html()
    		});
    
    		// show info window when marker is clicked
    		google.maps.event.addListener(marker, 'click', function() {
    
    			infowindow.open( map, marker );
    
    		});
    	}
    
    }
    
    /*
    *  center_map
    *
    *  This function will center the map, showing all markers attached to this map
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	4.3.0
    *
    *  @param	map (Google Map object)
    *  @return	n/a
    */
    
    function center_map( map ) {
    
    	// vars
    	var bounds = new google.maps.LatLngBounds();
    
    	// loop through all markers and create bounds
    	$.each( map.markers, function( i, marker ){
    
    		var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );
    
    		bounds.extend( latlng );
    
    	});
    
    	// only 1 marker?
    	if( map.markers.length == 1 )
    	{
    		// set center of map
    	    map.setCenter( bounds.getCenter() );
    	    map.setZoom( 16 );
    	}
    	else
    	{
    		// fit to bounds
    		map.fitBounds( bounds );
    	}
    
    }
    
    function markerCluster( markers, map ) {
    	var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
    	console.log( markers );
    }
    
    /*
    *  document ready
    *
    *  This function will render each map when the document is ready (page has loaded)
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	5.0.0
    *
    *  @param	n/a
    *  @return	n/a
    */
    // global var
    var map = null;
    
    $(document).ready(function(){
    
    	$('.acf-map').each(function(){
    
    		// create map
    		map = new_map( $(this) );
    
    	});
    
    });
    
    })(jQuery);
Viewing 4 posts - 1 through 4 (of 4 total)

The topic ‘Marker clustering doesn't work’ is closed to new replies.