使用带有JQVmap的自定义区域

时间:2014-01-31 13:09:31

标签: javascript map jqvmap

我正在使用JQVmap(https://github.com/manifestinteractive/jqvmap)在网站上输出地图。我希望将它们分组到各个区域,而不是在您悬停每个国家时执行某些操作。例如,而不是加拿大,美国和美国。墨西哥,我希望这三个人都能显示悬停状态,当你将它们悬停在其中任何一个国家并成为一组国家时。我已经看过关于如何为国家/地区设置颜色的多个帖子,但是每个国家/地区仍然有自己的悬停状态,并且不会触发具有相同颜色的其他国家/地区的悬停状态。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

我正在开展一个项目并且需要这样做。我就是这样做的。

  1. 定义您想要的区域。
  2. 添加帮助方法以突出显示/取消突出显示某个区域中所有国家/地区的国家/地区。
  3. 将这些辅助方法添加为地图的“onRegionOver”和“onRegionOut”方法。
  4. 第1步。

    以下是我定义区域的方式。

    var regionMap = {
            "southAmerica" :{
            "countries" : ["ar", "bo", "br", "cl", "co", "ec", "fk", "gy", "gf", "pe", "py", "sr", "uy", "ve"],
            "name" : "South America"
        },
            "northAmerica" :{
            "countries" : ["ca", "gl", "us"],
            "name" : "Northern America"
        }
    }; //And so on...
    

    我还添加了一个地图和一个反向查找方法。

    var countryMap = {
        "ca":"northAmerica",
        "gl":"northAmerica",
        "us":"northAmerica",
    }; //And so on...
    function getRegion(cc) {
        var regionCode = countryMap[cc];
        return regionMap[regionCode];
    }
    

    或者,您可以避免使用反向查找映射并编写函数:

    function getCountriesInRegion(cc) {
        for (var regionKey in regions)
        {
            var countries = regionMap[regionKey].countries;
            for (var countryIndex in countries)
            {
                if (cc == countries[countryIndex])
                {
                    return countries;
                }
            }
        }
    }
    

    第2步

    用于突出显示/取消突出显示区域的辅助方法:

    function highlightRegionOfCountry (cc) {
        var countries = getRegion(cc).countries;
        for (countryIndex in countries)
        {
            $('#vmap').vectorMap('highlight',countries[countryIndex]); 
        }
        $('#vmap').vectorMap('highlight',cc);
    }
    
    function unhighlightRegionOfCountry (cc) {
        var countries = getRegion(cc).countries;
        for (countryIndex in countries)
        {
            $('#vmap').vectorMap('unhighlight',countries[countryIndex]);    
        }
        $('#vmap').vectorMap('unhighlight',cc);
    }
    

    第3步。

    添加将辅助方法注册到地图的悬停事件。

    jQuery(document).ready(function() {
        jQuery('#vmap').vectorMap({
            map: 'world_en',
            backgroundColor: '#333333',
            color: '#ffffff',
            hoverOpacity: 0.2,
            selectedColor: '#666666',
            enableZoom: true,
            showTooltip: true,
            onRegionOver : function (element, code, region)
            {
                highlightRegionOfCountry(code);
            },
            onRegionOut : function (element, code, region)
            {
                unhighlightRegionOfCountry(code);
            }
        });
    });
    

    tl; dr:使用这些:

    $('#vmap').vectorMap('highlight', countryCode);
    

    $('#vmap').vectorMap('unhighlight', countryCode); 
    

    我项目所需的地区是联合国定义的地区。您可以在GitHub上查看我的JVQmap分支。您要查看的文件是/jqvmap/maps/jquery.vmap.un_regions.js

    我希望这有帮助!