jVectorMap - 如何动态添加标记

9

我正在使用jVectorMap插件为网站添加地图。这里是一个我在页面加载时添加标记的地图。是否有动态添加标记的方法?我需要在鼠标点击时添加它们。我使用jVectorMap插件。

   var plants = [
        {name: 'VAK', coords: [-25.274398, 133.775136], status: 'mrk'},
        {name: 'MZFR', coords: [37.090240, -95.712891], status: 'mrk'},
        {name: 'AVR', coords: [50.9030599, 6.4213693], status: 'mrk'}

      ];

   $('#world-map-markers').vectorMap({
    map: 'world_mill_en',       
    normalizeFunction: 'polynomial',        
    markerStyle: {
        initial: {
            fill: '#F8E23B',
            stroke: '#383f47'
        }
    },
    backgroundColor: '#383f47',
    markers: plants.map(function(h) {
        return {
            name: h.name,
            latLng: h.coords
        }
    }),
    series: {
        markers: [{
            attribute: 'image',
            scale: {
                'mrk': 'marker.png'
            },
            values: plants.reduce(function(p, c, i) {
                p[i] = c.status;
                return p
            }, {}),

        }]
    }
    });
    });
2个回答

12

使用空标记和值初始化地图:

mapObj = new jvm.Map({
    container: $('#world-map-markers'),
    map: 'world_mill_en',       
    normalizeFunction: 'polynomial',        
    markerStyle: {
        initial: {
            fill: '#F8E23B',
            stroke: '#383f47'
        }
    },
    backgroundColor: '#383f47',
    markers: [],
    series: {
        markers: [{
            attribute: 'image',
            scale: {
                'mrk': 'marker.png'
            },
            values: [],
            }]
    }
}); 

只是想指出,您也可以分别设置标记和值,声明两个数组:

var mapMarkers = [];
var mapMarkersValues = [];

然后,在需要单击处理程序的任何位置,调用以下函数:

function addPlantsMarkers() {
   var plants = [
        {name: 'VAK', coords: [-25.274398, 133.775136], status: 'mrk'},
        {name: 'MZFR', coords: [37.090240, -95.712891], status: 'mrk'},
        {name: 'AVR', coords: [50.9030599, 6.4213693], status: 'mrk'}

   ];
    mapMarkers.length = 0;
    mapMarkersValues.length = 0;
    for (var i = 0, l= plants.length; i < l; i++) {
        mapMarkers.push({name: plants[i].name, latLng: plants[i].coords});
        mapMarkersValues.push(plants[i].status);
    }
    mapObj.addMarkers(mapMarkers, []);
    mapObj.series.markers[0].setValues(mapMarkersValues);   
}

最终结果:

在此输入图片描述


1
运行得非常顺畅!! - Jude
@deblocker:请查看我的问题 https://stackoverflow.com/questions/51318385/jvector-map-dynamic-markers-not-working 你有任何想法吗? - Sam Hanson

0
另一种方法是清空地图容器并重新渲染带有标记的地图。渲染速度快,页面内存管理得很好:
function load_map() {

   $("#us_map").empty();

   $("#us_map").vectorMap({
   map: "us_merc_en",
   normalizeFunction: "polynomial",
   hoverOpacity: .7,
   hoverColor: !1,
   regionStyle: {
    initial: {
     fill: "#e3eaef"
    }
   },
   markerStyle: {
    initial: {
     r: 9,
     fill: "#727cf5",
     "fill-opacity": .9,
     stroke: "#fff",
     "stroke-width": 7,
     "stroke-opacity": .4
    },
    hover: {
     stroke: "#fff",
     "fill-opacity": 1,
     "stroke-width": 1.5
    }
   },
   backgroundColor: "transparent",
   markers: [{
    latLng: [$('#latitude').val(), $('#longitude').val()],
    name: $('#address').val()
   }]
  })
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接