高德地图2.0使用SvgMarker.Shape.IconFont方法将iconfont矢量图作为图标

解决问题

项目中地图一直使用图片作为图标,这样就会导致加载大量图片,加载资源慢,项目体积增大、每次涉及地图展示站点功能,UI需要切一大批图片;

使用SvgMarker.Shape将iconfont作为图标,几种类型仅需要几个矢量图,每种类型的状态和类别等填充不同颜色展示即可;

举例:有5种图标类型,每种类型有7中类别和5中状态,需要展示不同颜色;

那么:需要5*(7+5)= 60张图片

所以:SvgMarker.Shape.IconFont解决这个问题,仅需要5个矢量图标即可;

具体实现方法

1、index.html引入高德地图2.0版本和UI组件库js(或使用npm安装包方式引入)

<script type="text/javascript" src='//webapi.amap.com/maps?v=2.0&key=a174a1cd3299a20dff08de1679760e12'></script>
<!-- UI组件库 1.0 -->
<script src="//webapi.amap.com/ui/1.1/main.js?v=1.1.1"></script>

2、使用高德地图2.0版本SvgMarker+iconfont实现地图站点展示

symbolJs:iconfont官网中symbol矢量图地址,可引线上地址,开发完成也可下载js文件到本地,引本地字体js文件;

addSvgMarker(stationInfoList){
    let _this = this;
    AMapUI.loadUI(['overlay/SvgMarker'], function (SvgMarker) {
        if (!SvgMarker.supportSvg) {
            alert('当前环境不支持SVG');
        }
        let markers = [];
        stationInfoList.forEach((item,index)=>{
            let marker = new SvgMarker(
                new SvgMarker.Shape.IconFont({
                    symbolJs: '//at.alicdn.com/t/c/font_2773476_axpuk6h9lji.js',//iconfont中symbol矢量图库地址,开发完成可将js文件下载放本地
                    // icon: item.type == 1 ?'icon-water-level':item.type == 2?'icon-a-zu453831-copy':item.type==3?'icon-zoushi1':'',
                    icon:'icon-a-zu453831-copy',//icon可根据不同类型判断展示不同图标
                    size: 60,
                    offset: [-30, -60],//偏移,当前经纬度精确的点是图标底部中间
                    fillColor: item.level == '1'?'#ff0':item.level == '2'?'#ff4400':'#0cf'//填充颜色,根据状态/水质类别展示不同颜色
                }), {
                position: [item.longitude,item.latitude],
                showPositionPoint: false,//打开就能看到当前精确定位,根据需求调整offset
            });
            markers.push(marker);//将marker添加到一个数组中
        })
        _this.myMap.add(markers)//最后将marker批量添加到地图上
    });
},

补充:stationInfoList初始化数据

stationInfoList:[
    {
        stationName:"测试排污口",
        type:'2',
        longitude:106.901367,
        latitude:34.905904,
        level:2, //水质类别
        status:2, //状态
    },
    {
        stationName:"测试断面",
        type:'1',
        longitude:109.901367,
        latitude:34.905904,
        level:1, //水质类别
        status:1, //状态
    },
    {
        stationName:"测试污染源名称还挺长的呢",
        type:'3',
        longitude:112.901367,
        latitude:34.905904,
        level:3, //水质类别
        status:3, //状态
    }
],

实现效果图

注意:图标不能修改颜色解决方案

登录官网,找到引入的图标,批量操作-批量去色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值