代码之家  ›  专栏  ›  技术社区  ›  Nitish Kumar

在Vuejs中使用Google地图标记集群

  •  -1
  • Nitish Kumar  · 技术社区  · 6 年前

    我正在Vuejs上构建一个小应用程序,我在那里使用 npm package 替代 js-marker-clusterer 我试图在从API获得响应后加载映射,下面是我的代码:

    var MarkerClusterer = require('node-js-marker-clusterer');
    let rawMarkers=[];
    let rawMarkers2=[];
    $.each(response.data.data, function( key, value) {
        if((value.latitude != null) && (value.longitude != null) )
        {
            rawMarkers.push({
                name:value.name,
                lat:parseFloat(value.latitude),
                long:parseFloat(value.longitude),
                // conAr:value.technical_description.construction_area,
            });
        }
    });
    // console.log( rawMarkers);
    // console.log( rawMarkers.map(obj => Object.values(obj)));
    
    rawMarkers2=rawMarkers.map(obj => Object.values(obj));
    let markers =rawMarkers2;
    
    let displayDetails=[];
    $.each(response.data.data, function( key, value) {
        let det='<div class="info_content">' +
            // '<h3>'+value.name+'</h3>' +
            '<a href="/#/projectprofile/'+value.slug+'" target="_blank">'+value.name+'</a>'+
            '</div>';
        displayDetails.push({
            det:det,
        });
        det='';
    });
    // console.log( displayDetails.map(obj => Object.values(obj)));
    let infoWindowContent =displayDetails.map(obj => Object.values(obj));
    
    if (this.mapState.initMap) { // map is already ready
        /*console.log("from mounted :"+this.mapState.initMap);
        alert("from mounted :"+this.mapState.initMap);*/
    
    
        let bounds = new google.maps.LatLngBounds();
    
        let map = new google.maps.Map(document.getElementById('map'), {
            zoom: 4,
            center: {lat: 21.7679, lng: 78.8718},
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });
        let labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
    
        let markerBg = {
            url: 'http://maps.google.com/mapfiles/ms/icons/red-dot.png',
            // This marker is 20 pixels wide by 32 pixels high.
            size: new google.maps.Size(80, 30),
            // The origin for this image is (0, 0).
            origin: new google.maps.Point(0, 0),
            // The anchor for this image is the base of the flagpole at (0, 32).
            anchor: new google.maps.Point(0, 32)
        };
    
        // Info Window Content
        // console.log(infoWindowContent);
    
        // Display multiple markers on a map
        let infoWindow = new google.maps.InfoWindow(), marker, i;
    
        // Loop through our array of markers & place each one on the map
        for( i = 0; i < markers.length; i++ ) {
            let position = new google.maps.LatLng(markers[i][1], markers[i][2]);
            bounds.extend(position);
            marker = new google.maps.Marker({
                position: position,
                map: map,
                label: markers[i][3],
                title: markers[i][0],
                animation: google.maps.Animation.DROP,
                icon: markerBg,
            });
    
            //Marker Cluster operation
            var mcOptions = {
                //imagePath: 'https://googlemaps.github.io/js-marker-clusterer/images/m',
                styles:[{
    
                    url: "https://googlemaps.github.io/js-marker-clusterer/images/m1.png",
                    width: 53,
                    height:53,
                    fontFamily:"comic sans ms",
                    textSize:15,
                    textColor:"red",
                    //color: #00FF00,
                }]
    
            };
            var mc = new MarkerClusterer(map, marker, mcOptions);
    
            // Allow each marker to have an info window
            google.maps.event.addListener(marker, 'click', (function (marker, i) {
                return function () {
                    infoWindow.setContent(infoWindowContent[i][0]);
                    infoWindow.open(map, marker);
                }
            })(marker, i));
    
            // Automatically center the map fitting all markers on the screen
            map.fitBounds(bounds);
        }
    }
    

    但这张地图是这样显示的:

    Marker image

    我希望图像显示如下:

    enter image description here

    我从这里得到代码引用 JSFiddle

    帮助我实现这个目标。谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dipen Shah    6 年前

    您正在创建 MarkerCluster 对于所有标记,将所有标记存储在数组中,只需创建一个 标记聚类 如所附问题链接所示。

    var gMarkers = [];
    for( i = 0; i < markers.length; i++ ) 
    {
        // add markers on the map
        ....
    
        // attach event handlers
        ....
    
        gMarkers.push(marker);
    }
    var mc = new MarkerClusterer(map, gMarkers , mcOptions);
    
    推荐文章