实现在echart地图上显示柱状图(其他图表也能实现)

1,420 阅读1分钟
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>echarts 地图</title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/echarts/3.8.0/echarts.min.js"></script>
</head>

<body>
    <div id="map" style="width: 800px; height: 800px;"></div>
    <script type="text/javascript">
        var myChart;
        $.get("https://geo.datav.aliyun.com/areas_v3/bound/321000_full.json", function (huaianJson) {
            echarts.registerMap("yangzhou", huaianJson);
            myChart = echarts.init(document.getElementById("map"));
            var option = {
                animation: false,//图表动画
                backgroundColor: "#404a59",//图表背景
                tooltip: {
                    trigger: 'axis'//提示触发方式
                },
                //地图
                geo: {
                    map: 'yangzhou',//地图名 需要和注册的地图名一样
                    // silent: true,
                    roam: true,//是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启
                    zoom: 1.155, // 地图初始大小
                    label: {
                        //高亮状态下的多边形和标签样式。
                        emphasis: {
                            show: false,//地图上不用显示 那块地区是哪里用false
                            areaColor: '#eee'
                        }
                    },
                    // 地区块颜色
                    itemStyle: {
                        normal: {
                            areaColor: '#55C3FC',//常规状态地图颜色
                            borderColor: '#fff'//边框颜色
                        },
                        emphasis: {
                            areaColor: '#21AEF8'//区域被浏览时的颜色
                        }
                    }
                }
            };
            //遍历城市数据 重点
            //以地图坐标渲染柱状图
            function renderEachCity() {
                var option2 = {
                    xAxis: [],
                    yAxis: [],
                    grid: [],
                    series: []
                };
                echarts.util.each(rawData, function (dataItem, idx) {
                    var geoCoord = geoCoordMap[dataItem[0]];
                    /**
                     * 
                     * 在地理坐标系(geo)上,把某个点的经纬度坐标转换成为像素坐标:
                     *[128.3324, 89.5344] 表示 [经度,纬度]。
                     *使用第一个 geo 坐标系进行转换:
                     *chart.convertToPixel('geo', [128.3324, 89.5344]); // 参数 'geo' 等同于 {geoIndex: 0}
                     *使用第二个 geo 坐标系进行转换:
                     *chart.convertToPixel({geoIndex: 1}, [128.3324, 89.5344]);
                     *使用 id 为 'bb' 的 geo 坐标系进行转换:
                     *chart.convertToPixel({geoId: 'bb'}, [128.3324, 89.5344]);
                     * 
                     * 
                     * 
                    */
                    var coord = myChart.convertToPixel('geo', geoCoord);
                    idx += '';
                    //此处为柱状图数据 按需求自己加  
                    //rawData
                    var inflationData = [130, 50, 20];

                    option2.xAxis.push({
                        id: idx,
                        gridId: idx,
                        type: 'category',
                        name: dataItem[0],
                        nameLocation: 'middle',
                        nameGap: 3,
                        splitLine: {
                            show: false
                        },
                        axisTick: {
                            show: false
                        },
                        axisLabel: {
                            show: false
                        },
                        axisLine: {
                            onZero: false,
                            lineStyle: {
                                color: '#666'
                            }
                        },
                        data: ["数据A", "数据B", "数据C"],
                        z: 100

                    });
                    option2.yAxis.push({
                        id: idx,
                        gridId: idx,
                        splitLine: {
                            show: false
                        },
                        axisTick: {
                            show: false
                        },
                        axisLabel: {
                            show: false
                        },
                        axisLine: {
                            show: false,
                            lineStyle: {
                                color: '#1C70B6'
                            }
                        },
                        z: 100
                    });
                    option2.grid.push({
                        id: idx,
                        width: 30,
                        height: 40,
                        left: coord[0] + 10,//x
                        top: coord[1] - 30,//y
                        z: 100
                    });
                    option2.series.push({
                        id: idx,
                        type: 'bar',
                        xAxisId: idx,
                        yAxisId: idx,
                        barGap: 0,
                        barCategoryGap: 0,
                        data: inflationData,//每个柱状图加载的数据源头
                        z: 100,
                        itemStyle: {
                            normal: {
                                color: function (params) {
                                    // 柱状图每根柱子颜色
                                    var colorList = ['#F75D5D', '#59ED4F', '#4C91E7'];
                                    return colorList[params.dataIndex];
                                }
                            }
                        }
                    });
                });
                console.time('a');
                myChart.setOption(option2);
                console.timeEnd('a');
            }

            setTimeout(renderEachCity, 0);
            myChart.on('geoRoam', renderEachCity);
            myChart.setOption(option);





        });


        // 市区坐标
        var geoCoordMap = {
            "广陵区": [119.442267, 32.392154],
            "邗江区": [119.397777, 32.377899],
            "江都区": [119.567481, 32.426564],
            "宝应县": [119.321284, 33.23694],
            "仪征市": [119.182443, 32.271965],
            "高邮市": [119.443842, 32.785164],
        };
        //rawData的要求只要和上面的坐标键名对应即可
        var rawData = [
            ["广陵区"],
            ["邗江区"],
            ["江都区"],
            ["宝应县"],
            ["仪征市"],
            ["高邮市"],
        ];
    </script>
</body>

</html>