jvectormap添加不同半径的标记

时间:2016-09-13 11:03:06

标签: javascript ajax jvectormap

我尝试创建jvectormap并使用通过ajax接收的标记填充它。我现在能够将标记放在地图中,但我喜欢根据通过ajax收到的另一个值来改变它们的半径。

$.ajax({
            url: "/map",
            type: 'post',
            dataType: 'json',
            data: {
                _csrf : 'token'
            },
            success: function (data) {
                var mapObj = new jvm.Map({
                    container: $('#todaymap'),
                    map: 'it_merc_en',
                    normalizeFunction: 'polynomial',        
                    markerStyle: {
                        initial: {
                            fill: '#F8E23B',
                            stroke: '#383f47',
                            r: 3,
                        },
                        hover: {
                            fill: '#383f47',
                            stroke: '#383f47'
                        }
                    },
                    backgroundColor: '#383f47',
                    markers: [],
                    series: {
                        markers: [{
                            attribute: 'r',
                            scale: [3,10]
                        }],
                    }
                });
                $('#todaymap div:first-child').hide();

                var mapMarkers = [];
                var mapMarkersValues = [];
                mapMarkers.length = 0;
                mapMarkersValues.length = 0;
                for (var i = 0, l= data.length; i < l; i++) {
                    coords= Array();
                    coords[0]= data[i].lat;
                    coords[1]= data[i].lng;

                    console.log(data[i].count);
                    mapMarkers.push({name: data[i].name, latLng: coords});
                }
                mapObj.addMarkers(mapMarkers, []);  
            }
        }); 

我想要使用的字段是data[i].count,根据事件的计数,其值为0到6。我在网上找不到任何有用的东西。任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我刚刚在我自己的地图实现上测试的类似方法,但是我的版本设置为更改已经在创建地图时使用的标记,它使用:

mapObj.markers[markerNumber].element.config.style.initial.r = scaleValue;
mapObj.applyTransform();

因此要使用此功能,您必须在mapObj.addMarkers行之后使用数据上的另一个循环添加此项,然后使用applyTransform()在此次循环后使用更改的标记信息重绘/刷新地图,这样我应该想象的工作:

for (var i = 0, l= data.length; i < l; i++) {
    mapObj.markers[i].element.config.style.initial.r = data[i].count;
}
mapObj.applyTransform();

编辑:在再次查看您的代码并在创建初始标记时尝试使用某些内容之后,我认为您可以实际将信息添加到mapMarkers数组中,如下所示:

mapMarkers.push({name: data[i].name, latLng: coords, r:data[i].count});