当前位置:   article > 正文

react+echarts做各个省份地图_echarts + react 根据省份名称 实现纯展示的省级地图

echarts + react 根据省份名称 实现纯展示的省级地图

找了好长时间没找到现成的案例,最后找到了各个省份的json文件遍联想到了上篇写的中国地图那个案例https://blog.csdn.net/qq_42281649/article/details/91489475
嵌套了一下,效果实现了,再次记录一下,希望可以帮到需要的小伙伴。

下图是各个省份的json,也包括js文件。
在这里插入图片描述
另附百度网盘地址链接:https://pan.baidu.com/s/1qAt7UzjFBzkx5p0KMj2KLw
提取码:qfi9

记录一下代码
Hainan.js

import React, {Component} from 'react'; import './App.css'; import echarts from 'echarts'; import geoJson from './hainan.json'; import {geoCoordMap,provienceData} from "./geo";

class Hainan extends Component {
    constructor(props) {
        super(props);
        this.state = {
        }
    }
    componentDidMount() {
        this.initalECharts();
    }
    initalECharts() {
        const provienceData = [
            {name: '海口市', area: 'pink', type: 'areaCenterCity'},
            {name: '三亚市', area: 'green', type: 'areaCenterCity'},
            {name: '文昌市', area: 'blue', type: 'areaCenterCity'},
            {name: '定安县', area: 'green', type: 'areaCenterCity'},
            {name: '琼海市', area: 'pink', type: 'areaCenterCity'},
            {name: '万宁市', area: 'blue', type: 'areaCenterCity'},
            {name: '屯昌县', area: 'yellow', type: 'areaCenterCity'},
            {name: '澄迈县', area: 'blue', type: 'areaCenterCity'},
            {name: '儋州市', area: 'yellow', type: 'areaCenterCity'},
            {name: '临高县', area: 'pink', type: 'areaCenterCity'},
            {name: '保亭黎族苗族自治县', area: 'pink', type: 'areaCenterCity'},
            {name: '白沙黎族自治县', area: 'pink', type: 'areaCenterCity'},
            {name: '琼中黎族苗族自治县', area: 'green', type: 'areaCenterCity'},
            {name: '陵水黎族自治县', area: 'yellow', type: 'areaCenterCity'},
            {name: '乐东黎族自治县', area: 'blue', type: 'areaCenterCity'},
            {name: '东方市', area: 'yellow', type: 'areaCenterCity'},
            {name: '昌江黎族自治县', area: 'green', type: 'areaCenterCity'},
            {name: '五指山市', area: 'yellow', type: 'areaCenterCity'},
            {name: '三沙市', area: '东北大区', type: 'areaCenterCity'},
            {name: '西沙群岛', area: '东北大区', type: 'areaCenterCity'},
            {name: '南沙群岛', area: '东北大区', type: 'areaCenterCity'},
            {name: '中沙群岛', area: '东北大区', type: 'areaCenterCity'}
        ];
        /*for(let item of provienceData) {
            if (item.area === '1') {
                alert(1);
            }
        }*/
        echarts.registerMap('hainan', geoJson);
        for(let item of provienceData){
            if(item.area === 'blue'){
                item.itemStyle = {
                    normal: {
                        areaColor: "#0CE4E4",
                    },
                    emphasis: {
                        areaColor: "#0CE4E4",
                    }
                }
            }else if(item.area === 'pink'){
                item.itemStyle = {
                    normal: {
                        areaColor: "#F4C3CB",
                    },
                    emphasis: {
                        areaColor: "#F4C3CB",
                    }
                }
            }else if(item.area === 'green'){
                item.itemStyle = {
                    normal: {
                        areaColor: "#8EF48E",
                    },
                    emphasis: {
                        areaColor: "#8EF48E",
                    }
                }
            }else if(item.area === 'yellow'){
                item.itemStyle = {
                    normal: {
                        areaColor: "#F7F7B5",
                    },
                    emphasis: {
                        areaColor: "#F7F7B5",
                    }
                }
            }else {
                item.itemStyle = {
                    normal: {
                        areaColor: "red",
                    },
                    emphasis: {
                        areaColor: "red",
                    }
                }
            }

        }
        //初始化ECharts实例
        const myChart = echarts.init(document.getElementById('mainMap'));
        myChart.setOption({
            geo: {
                map: 'hainan',
                roam: false,
                zoom: 1.2,
                tooltip: {
                    show: false,       //不显示提示标签
                },
                label: {
                    normal: {
                        show: false,//显示省份标签
                        textStyle:{color:"#c71585"}//省份标签字体颜色
                    },
                    emphasis: {//对应的鼠标悬浮效果
                        show: false,
                        textStyle:{color:"#800080"}
                    }
                },
                itemStyle: {
                    normal: {
                        borderWidth: .5,//区域边框宽度
                        borderColor: '#fff',//区域边框颜色
                        areaColor:"#ffefd5",//区域颜色
                        label:{show:false}
                    },
                    emphasis: {
                        show: false,
                        borderWidth: .5,
                        borderColor: '#4b0082',
                        areaColor: "#ffdead",
                    }
                },
            },
            series: [
                {
                    type: 'scatter',  //'line'(折线图) | 'bar'(柱状图) | 'scatter'(散点图) | 'k'(K线图)
                    //'pie'(饼图) | 'radar'(雷达图) | 'chord'(和弦图) | 'force'(力导向布局图) | 'map'(地图)
                    coordinateSystem: 'geo',
                    data: this.convertData(provienceData),
                    symbolSize: 10,
                    symbolRotate: 40,
                    label: {
                        normal: {
                            formatter: '{b}',
                            position: 'bottom',
                            show: true
                        },
                        emphasis: {
                            show: false
                        }
                    },
                    tooltip: {
                        show: false,       //不显示提示标签
                        formatter: '{c}',      //提示标签格式
                        backgroundColor: "#fff",//提示标签背景颜色
                        borderColor: '#ccc',
                        borderWidth: 5,
                        textStyle:{color:"#000"} //提示标签字体颜色
                    },
                    itemStyle: {
                        normal: {
                            color: 'black'
                        }
                    }
                },
                {
                    type: 'map',
                    mapType: 'hainan',
                    roam: false,
                    zoom: 1.2,
                    tooltip: {
                        show: false,       //不显示提示标签
                    },
                    label: {
                        normal: {
                            show: false    //显示省份标签
                        },
                        emphasis: {
                            show: false,
                        }
                    },
                    itemStyle: {
                        //正常样式
                        normal: {
                            borderWidth: .2,      //区域边框宽度
                            borderColor: '#fff',  //区域边框颜色
                            label:{show:false}
                        },
                        //鼠标事件区块样式
                        emphasis: {
                            show: false,
                        }
                    },
                    data: provienceData
                }
            ],
        });

        myChart.on('click',function (params) {
            alert(params.name);
            /*const { dispatch } = this.props;
            dispatch({
                type: 'overview/select',
                payload: params.name,
            })*/
        });
    }


    convertData(data) {
        var res = [];
        for (var i = 0; i < data.length; i++) {
            var geoCoord = geoCoordMap[data[i].name];
            if (geoCoord) {
                res.push({
                    name: data[i].name,
                    value: geoCoord.concat(data[i].area),
                    area: data[i].area,
                    type: data[i].type,
                });
            }
        }
        console.log(res);
        return res;
    }

    render() {
        return (
            <div className="App">
                <div id="mainMap" style={{width:'100vm',height:'90vh'}} ></div>
            </div>
        );
    }



}

export default Hainan;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232

App.css

.App {
    text-align: center; }

.App-logo {
    animation: App-logo-spin infinite 20s linear;
    height: 80px; }

.App-header {
    background-color: #222;
    height: 150px;
    padding: 20px;
    color: white; }

.App-title {
    font-size: 1.5em; }

.App-intro {
    font-size: large; }

@keyframes App-logo-spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

gen.js(各个地区的经纬度可百度查询)

const provienceData = [
    ];

const geoCoordMap = {
    '三亚': [109.511909, 18.252847],
    '海口': [110.35, 20.02],
    '文昌': [110.72, 19.61],
    '定安': [110.31, 19.68],
    '琼海': [110.46, 19.25],
    '万宁': [110.39, 18.8],
    '屯昌': [110.1, 19.36],
    '澄迈': [110, 19.75],
    '儋县': [109.57, 19.52],
    '临高': [109.69, 19.91],
    '保亭': [109.7, 18.64],
    '白沙': [109.44, 19.23],
    '琼中': [109.83, 19.05],
    '陵水': [110.02, 18.48],
    '崖县': [109.5, 18.25],
    '乐东': [109.17, 18.73],
    '东方': [108.64, 19.09],
    '昌江': [109.03, 19.25], };

export {provienceData, geoCoordMap}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

效果图:
在这里插入图片描述

效果图有点丑还没有调试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/108838
推荐阅读