echarts显示自定义中国地图——笔记

引入方法和备注在最后面

var geoCoordMap = {    //地理坐标

"舟山":[122.207216,29.985295],    

"齐齐哈尔":[123.97,47.33],

"盐城":[120.13,33.38],

"拉萨":[91.11,29.97],

"南宁":[108.33,22.84],

"苏州":[120.62,31.32],

"南昌":[115.89,28.68],

"南京":[118.78,32.04],

"杭州":[120.19,30.26],

"哈尔滨":[126.63,45.75],

"合肥":[117.27,31.86],

"武汉":[114.31,30.52],

"大庆":[125.03,46.58]

};

var data = [    //根据value值大小决定是中心还是站点

{name: "舟山", value: 12},

{name: "齐齐哈尔", value: 14},

{name: "盐城", value: 15},

{name: "拉萨", value: 24},

{name: "南宁", value: 37},

{name: "苏州", value: 50},

{name: "南昌", value: 54},

{name: "南京", value: 67},

{name: "杭州", value: 144},

{name: "哈尔滨", value: 114},

{name: "合肥", value: 129},

{name: "武汉", value: 173},

{name: "大庆", value: 179}

];

var convertData = function (data) {

var res = [];

for (var i = 0; i < data.length; i++) {

var geoCoord = geoCoordMap[data[i].name];    //得到对应坐标

if (geoCoord) {  //判断data第i个的name对应的地理坐标是否存在

res.push({

name: data[i].name,

value: geoCoord.concat(data[i].value)  //两个value值连接

});

}

}

return res;

};

var convertedData = [

convertData(data),

convertData(data.sort(function (a, b) {

return b.value - a.value;

}).slice(0, 6))

];

option = {  //设置自定义地图

backgroundColor: 'rgba(64,74,89,0.1)',  //地图背景色

animation: true,

animationDuration: 1000,

animationEasing: 'cubicInOut',

animationDurationUpdate: 1000,

animationEasingUpdate: 'cubicInOut',

// title: [

//    {

//        text: '全国主要城市 PM 2.5',

//        subtext: 'data from PM25.in',

//        sublink: 'http://www.pm25.in',

//        left: 'center',

//        textStyle: {

//            color: '#fff'

//        }

//    },

//    {

//        id: 'statistic',

//        right: 120,

//        top: 40,

//        width: 100,

//        textStyle: {

//            color: '#fff',

//            fontSize: 16

//        }

//    }

// ],

// toolbox: {

//    iconStyle: {

//        normal: {

//            borderColor: '#fff'

//        },

//        emphasis: {

//            borderColor: '#b1e4ff'  //浅蓝

//        }

//    }

// },

// brush: {    //区域选择组件,选中的区域进行统计排序

//    outOfBrush: {

//        color: '#abc'

//    },

//    brushStyle: {

//        borderWidth: 2,

//        color: 'rgba(0,0,0,0.2)',

//        borderColor: 'rgba(0,0,0,0.5)',

//    },

//    seriesIndex: [0, 1],

//    throttleType: 'debounce',

//    throttleDelay: 300,

//    geoIndex: 0

// },

geo: {

map: 'china',

left: '10',

right: '35%',

center: [117.98561551896913, 31.205000490896193],

zoom: 2.5,

label: {

emphasis: {

show: false

}

},

roam: true,

itemStyle: {

normal: {

areaColor: '#017054',  //两种深黑灰

borderColor: '#48dcad'

},

emphasis: {

areaColor: '#1b654f'  //深黑灰

}

}

},

tooltip : {    //悬浮提示信息

trigger: 'item'

},

// grid: {    //统计表

//    right: 40,

//    top: 100,

//    bottom: 40,

//    width: '30%'

// },

// xAxis: {

//    type: 'value',

//    scale: true,

//    position: 'top',

//    boundaryGap: false,

//    splitLine: {show: false},

//    axisLine: {show: false},

//    axisTick: {show: false},

//    axisLabel: {margin: 2, textStyle: {color: '#aaa'}},  //背景灰

// },

// yAxis: {

//    type: 'category',

//    name: 'TOP 20',

//    nameGap: 16,

//    axisLine: {show: false, lineStyle: {color: '#ddd'}},

//    axisTick: {show: false, lineStyle: {color: '#ddd'}},

//    axisLabel: {interval: 0, textStyle: {color: '#ddd'}},

//    data: []

// },

series : [

{

name: '站点',

type: 'scatter',    //散点图

coordinateSystem: 'geo',  //地理坐标系

data: convertedData[0],

symbolSize: function (val) {    //标记的大小,大小不一样会用如下公式计算

return Math.max(val[2] / 10, 8);

},

label: {  //图形上的文本标签

normal: {

formatter: '{b}',

position: 'right',

show: false  //站点地名的直接显示

},

emphasis: {

show: true  //悬浮显示

}

},

itemStyle: {

normal: {

color: '#ddb926'  //屎黄

}

},

},

{

name: '中心',

type: 'effectScatter',    //带有涟漪的散点图

coordinateSystem: 'geo',

data: convertedData[1],

symbolSize: function (val) {

return Math.max(val[2] / 10, 8);

},

showEffectOn: 'emphasis',  //配置何时显示特效:高亮(hover)的时候显示特效。

rippleEffect: {

brushType: 'stroke'    //波纹的绘制方式:空心或者实心fill

},

hoverAnimation: true,

label: {

normal: {

formatter: '{b}',  //模板变量有 {a}、{b}、{c},分别表示系列名,数据名,数据值。

position: 'right',

show: true

}

},

itemStyle: {

normal: {

color: '#f4e925',  //亮黄

shadowBlur: 10,

shadowColor: '#333'    //悬浮灰

}

},

zlevel: 1

}

]

};

myChart.on('brushselected', renderBrushed);

// myChart.setOption(option); 这里本来就是注释的

// setTimeout(function () {

//    myChart.dispatchAction({    //属于API里面action.brush,选择区域进行统计

//        type: 'brush',

//        areas: [

//            {

//                geoIndex: 0,    //index 为 0 的 geo 坐标系

//                brushType: 'polygon',  //指定选框的类型,下面的是选框范围

//                coordRange: [[119.72,34.85],[119.68,34.85],[119.5,34.84],[119.19,34.77],[118.76,34.63],[118.6,34.6],[118.46,34.6],[118.33,34.57],[118.05,34.56],[117.6,34.56],[117.41,34.56],[117.25,34.56],[117.11,34.56],[117.02,34.56],[117,34.56],[116.94,34.56],[116.94,34.55],[116.9,34.5],[121.64,34.08]]

//            }

//        ]

//    });

// }, 0);

function renderBrushed(params) {

var mainSeries = params.batch[0].selected[0];

var selectedItems = [];

var categoryData = [];

var barData = [];

var maxBar = 30;

var sum = 0;

var count = 0;

for (var i = 0; i < mainSeries.dataIndex.length; i++) {

var rawIndex = mainSeries.dataIndex[i];

var dataItem = convertedData[0][rawIndex];

var pmValue = dataItem.value[2];

sum += pmValue;

count++;

selectedItems.push(dataItem);

}

selectedItems.sort(function (a, b) {

return a.value[2] - b.value[2];

});

for (var i = 0; i < Math.min(selectedItems.length, maxBar); i++) {

categoryData.push(selectedItems[i].name);

barData.push(selectedItems[i].value[2]);

}

this.setOption({

yAxis: {

data: categoryData

},

xAxis: {

axisLabel: {show: !!count}

},

title: {

id: 'statistic',

text: count ? '平均: ' + (sum / count).toFixed(4) : ''

},

series: {

id: 'bar',

data: barData

}

});}

引入注意事项:

显示地图首先要引入china.js,然后调用

var mapChart =echarts.init(document.getElementById('map_chart'));

mapChart.setOption({

series:[{

  type:'map',

  map:'china'

}]

});

前面var了一个option需要渲染,所以还要:

mapChart.setOption(option)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,292评论 0 7
  • 这一天,你说,就此别过 我挥挥手,再见。 我忍痛放你飞翔 我的爱人 哦,不 我的挚爱 不要回头 不要看见我这狼狈的...
    苏荷小姐阅读 354评论 0 2
  • 北京的天气已经流露丝丝寒意,接连几天的晴空万里使心情格外畅爽。昨日研一篮球队的学弟们也迎来了他们第一场训练,但更重...
    神闲游阅读 195评论 0 0
  • 很多人应该有这样的经历,下班出了地铁,操起电话和朋友一通狂侃,内容包罗万象:难缠的甲方,反复无常的上司,新买的衣服...
    宝艾妈妈阅读 897评论 0 1