【问题标题】:Add markercluster Google Maps V3添加markercluster谷歌地图V3
【发布时间】:2017-10-16 08:31:38
【问题描述】:

我使用此页面中的代码。如何添加标记簇?

谢谢。

[Google Map v3 auto refresh Markers only

【问题讨论】:

    标签: marker markerclusterer


    【解决方案1】:

    示例脚本...

    $(function() {
        var locations = {};//A repository for markers (and the data from which they were constructed).
    
        //initial dataset for markers
        var locs = {
            1: { info:'11111. Some random info here', lat:-37.8139, lng:144.9634 },
            2: { info:'22222. Some random info here', lat:46.0553, lng:14.5144 },
            3: { info:'33333. Some random info here', lat:-33.7333, lng:151.0833 },
            4: { info:'44444. Some random info here', lat:27.9798, lng:-81.731 }
        };
        var map = new google.maps.Map(document.getElementById('map_2385853'), {
            zoom: 1,
            maxZoom: 8,
            minZoom: 1,
            streetViewControl: false,
            center: new google.maps.LatLng(40, 0),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });
        var infowindow = new google.maps.InfoWindow();
    
    var auto_remove = true;//When true, markers for all unreported locs will be removed.
    
    function setMarkers(locObj) {
        if(auto_remove) {
            //Remove markers for all unreported locs, and the corrsponding locations entry.
            $.each(locations, function(key) {
                if(!locObj[key]) {
                    if(locations[key].marker) {
                        locations[key].marker.setMap(null);
                    }
                    delete locations[key];
                }
            });
        }
    
            $.each(locObj, function(key, loc) {
                if(!locations[key] && loc.lat!==undefined && loc.lng!==undefined) {
                    //Marker has not yet been made (and there's enough data to create one).
    
                    //Create marker
                    loc.marker = new google.maps.Marker({
                        position: new google.maps.LatLng(loc.lat, loc.lng),
                        map: map
                    });
    
                    //Attach click listener to marker
                    google.maps.event.addListener(loc.marker, 'click', (function(key) {
                        return function() {
                            infowindow.setContent(locations[key].info);
                            infowindow.open(map, locations[key].marker);
                        }
                    })(key));
    
                    //Remember loc in the `locations` so its info can be displayed and so its marker can be deleted.
                    locations[key] = loc;
                }
                else if(locations[key] && loc.remove) {
                    //Remove marker from map
                    if(locations[key].marker) {
                        locations[key].marker.setMap(null);
                    }
                    //Remove element from `locations`
                    delete locations[key];
                }
                else if(locations[key]) {
                    //Update the previous data object with the latest data.
                    $.extend(locations[key], loc);
                    if(loc.lat!==undefined && loc.lng!==undefined) {
                        //Update marker position (maybe not necessary but doesn't hurt).
                        locations[key].marker.setPosition(
                            new google.maps.LatLng(loc.lat, loc.lng)
                        );
                    }
                    //locations[key].info looks after itself.
                }
            });
        }
    
        var ajaxObj = {//Object to save cluttering the namespace.
            options: {
                url: "........",//The resource that delivers loc data.
                dataType: "json"//The type of data tp be returned by the server.
            },
            delay: 10000,//(milliseconds) the interval between successive gets.
            errorCount: 0,//running total of ajax errors.
            errorThreshold: 5,//the number of ajax errors beyond which the get cycle should cease.
            ticker: null,//setTimeout reference - allows the get cycle to be cancelled with clearTimeout(ajaxObj.ticker);
            get: function() { //a function which initiates 
                if(ajaxObj.errorCount < ajaxObj.errorThreshold) {
                    ajaxObj.ticker = setTimeout(getMarkerData, ajaxObj.delay);
                }
            },
            fail: function(jqXHR, textStatus, errorThrown) {
                console.log(errorThrown);
                ajaxObj.errorCount++;
            }
        };
    
        //Ajax master routine
        function getMarkerData() {
            $.ajax(ajaxObj.options)
              .done(setMarkers) //fires when ajax returns successfully
              .fail(ajaxObj.fail) //fires when an ajax error occurs
              .always(ajaxObj.get); //fires after ajax success or ajax error
        }
    
        setMarkers(locs);//Create markers from the initial dataset served with the document.
        //ajaxObj.get();//Start the get cycle.
    
        // *******************
        //test: simulated ajax
        /*
        var testLocs = {
            1: { info:'1. New Random info and new position', lat:-37, lng:124.9634 },//update info and position and 
            2: { lat:70, lng:14.5144 },//update position
            3: { info:'3. New Random info' },//update info
            4: { remove: true },//remove marker
            5: { info:'55555. Added', lat:-37, lng:0 }//add new marker
        };
        setTimeout(function() {
            setMarkers(testLocs);
        }, ajaxObj.delay);
        */
        // *******************
    });
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2020-11-24
      • 1970-01-01
      • 2011-06-12
      • 2011-05-02
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      相关资源
      最近更新 更多