echarts 地图自定义图标_Echarts3.0 地图自定义图标

Echarts 是大家常用的可视化工具,相比大家用的也是得心应手,但是有时候偏偏会遇到些奇怪的想法,比如:我要在地图上插:triangular_flag_on_post:。

刚开始想到的居然不是用 Echarts ,而是百度的另一款产品 百度地图 ,但是集成之后,还需要对特定行政单位外的区域添加遮罩层,并且地图自带的路网等也不好去除,于是又回来折腾 Echarts 。

翻看官方的 配置项手册 ,良久之后才找到 renderItem 。官方的说法是: custom 系列需要开发者自己提供图形渲染的逻辑。这个渲染逻辑一般命名为 renderItem 。

找到方法就动手,开始下载 Echarts 的地图支持,但是此时 Echarts 自称部分数据不符合国家《测绘法》规定,目前暂时停止下载服务。 因为是自己玩的项目 ,所以动了一点坏心思,在 Github 上找找大家以前的存货。 如果是商业项目,大家千万不要这样做哦 。

chinaJson.features.forEach(function (item, index) {

data.forEach(function (row, num) {

if (item.properties.name === row.PROVINCE_NAME) {

provinceData.push({

"id": item.id,

"name": row.PROVINCE_NAME,

"cp": item.properties.cp,

"point": row.FLAG,

"value": 0 // value 为关键字,值必须为0

});

}

});

});

var myOption = {

geo: {

map: '中国',

zoom: 1,

},

series: [{

name: '红旗',

type: 'custom',

coordinateSystem: 'geo',

renderItem: function (params, api) {//具体实现自定义图标的方法

if (provinceData[params.dataIndex].point > 0) {

return {

type: 'image',

style: {

image: './img/flag.png',

x: api.coord([provinceData[params.dataIndex].cp[0], provinceData[params.dataIndex].cp[1]])[0],

y: api.coord([provinceData[params.dataIndex].cp[0], provinceData[params.dataIndex].cp[1]])[1],

}

}

}

},

data: provinceData,

}]

};

chinaJson 为 Echarts 地图数据,一部分数据大概长下图这样

]

data 为哪些省份需要插上:triangular_flag_on_post:的数据,我的数据长这样

[{ "PROVINCE_NAME": "北京", "FLAG": 1 }, { "PROVINCE_NAME": "上海", "FLAG": 1 }……]

provinceData 为最后得出的数据,然后在 renderItem 方法里对这个数组进行使用;

这个方法中有两个参数 params , api ,打印了以下发现能用的只有 dataIndex 这个属性,为数据数组的下标,我们在方法里判断当 point 的值大于0的时候,我们就插一个:triangular_flag_on_post:, x , y 是:triangular_flag_on_post:的坐标,这个坐标需要通过 api 里的 coord 方法进行坐标转化,参数是一个坐标数组,且会返回一个坐标数组,这个方法有误差,:triangular_flag_on_post:可能不在省会城市上,比如澳门的:triangular_flag_on_post:在海上,当然也有可能是 Echarts 的数据不准确。

最后我们看一下完成后的样子,我们在河南插上一个:triangular_flag_on_post:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值