echarts 地图geo、geo3D 下穿

记录贴

echarts地铁图,3D地图的下穿

首先说平面的吧,平面地图的下穿通过echats的点击事件,获取到点击板块的名称,通过名称请求json数据,代码如下

 myChart.on('click', function (params) {
//params.name 结果是“重庆=chongqing” 
	 if (params.name.indexOf('=') > 0) {//后台传值geoname便于知道那个省市可以下穿
	 	echarMap(params.name.indexOf('=')[1])//调用echartsMap,将geoname传递过去
	}
}

//echarts地图配置

function echarMap(geoName){
let  echartsMap = echarts.init(document.getElementById('echartsMap'));
  echarts.registerMap(geoName, map[geoName]);//获取对应的json数据,最主要的

  let  option = {
   geo: {

                                map: geoName,
                                left: myposition,
                                top: 30,
                                roam: true,
                                zoom: 1,
                                regions: regionsData[n],
                                label: {

                                    show: geoName == 'chongqing_bananqu' ? true : false,
                                    formatter: function (ad) {

                                        return ad.name.split("=")[0]
                                    },
                                    color: '#fff',


                                    emphasis: {

                                        show: true,
                                        color: "#fff",
                                        formatter: function (data) {
                                            if (data.name.indexOf('=') > 0) {

                                                let arr = data.name.split('=');


                                                return arr[0];
                                            }



                                        },
                                        position: ['0%', '50%'],

                                    },
                                },

                                itemStyle: {
                                    normal: {
                                        borderColor: 'rgba(147, 235, 248, 1)',
                                        borderWidth: 1,
                                        areaColor: {
                                            type: 'radial',
                                            x: 0.5,
                                            y: 0.5,
                                            r: 0.8,
                                            colorStops: [{
                                                offset: 0,
                                                color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色
                                            }, {
                                                offset: 1,
                                                color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色
                                            }],
                                            globalCoord: false // 缺省为 false
                                        },
                                        shadowColor: 'rgba(128, 217, 248, 1)',
                                        // shadowColor: 'rgba(255, 255, 255, 1)',
                                        shadowOffsetX: -2,
                                        shadowOffsetY: 2,
                                        shadowBlur: 10
                                    },
                                    emphasis: {
                                        areaColor: '#389BB7',
                                        borderWidth: 0
                                    }
                                }
                            },
                           
                        };
        

}
 

定义json数据的规则

json数据定义的规则如上图这样就可以动态设定下穿区域了

json数据也可以自定义画出你想要图图形,如室内图,片区图等这些都需要使用经纬度去画出来,需要全国省市区的json数据以及绘制工具的可以私信我哦

在这里插入图片描述

3D地图与平面地图下穿方式基本一样只是option定义的内容不一样,需要注意的是3D地图做下穿时,如果配置了3D柱状图以及气泡图,echarts监听不到地图板块点击事件,只能监听到series里面的数据,但是将map3D放到series里面如果有3Dbar等会报错,想要3D柱状图出现需要设置geo3D,将series里面的map3D移出去,option配置如下图

   let  option = {
                          
                            title: {
        
                                x: 'left',
                                top: "0",
                                textStyle: {
                                    color: '#000',
                                    fontSize: 14
                                }
                            },
                            
        
                          
                            series: [
                                {
                                    type: 'map3D', // 系列类型
                                    name: 'map3D', // 系列名称
                                   
                                        map: _this.mapJsonName,
                                        roam: true,
                                        itemStyle: {
                                            
                                            opacity: 1,
                                            borderWidth: 1,
                                            borderColor: '#4bb5ff', // 地图边配色
                                        },
                                       
                                        shading:'realistic',
                                        realisticMaterial:{
                                            detailTexture:'images/index/地图表皮2.png',
                                         
                                        },
                                        label: {
                                            show: true,
                                            formatter: function (data) {
                                                if (data.name.indexOf('=') > 0) {
                                                    let arr = data.name.split('=');
                                                 
                                                    if (_this.mapJsonName == 'chongqing_bananqu') {
                                                     
                                                        if (data.data.sl !=undefined ||data.data.sl !=null) {
                                                           
                                                            return arr[0]+":"+ data.data.slAl+'台';
                                                        }else{
                                                            return arr[0]
                                                        }
                                                        
                                                    }else{
                                                        return arr[0]
                                                    }
                                                  
                                                } else {
                                                    return data.name;
                                                }
                                            },
                                            textStyle: {
                                                color: '#fff', //地图初始化区域字体颜色
                                                fontSize: 12,
                                                borderColor:'transparent',
                                                backgroundColor: 'transparent'
                                            },
                                        },
                                       
                                        emphasis: { //当鼠标放上去  地区区域是否显示名称
                                            itemStyle: {
                                                color: '#34ffc8', // 鼠标移入地图配色
                                                areaColor: '#34ffc8',
                                            },
                                            label: {
                                                show: true,
                                                formatter: function (data) {
                                                    if (data.name.indexOf('=') > 0) {
                                                        let arr = data.name.split('=');
                                                     
                                                        if (_this.mapJsonName == 'chongqing_bananqu') {
                                                         
                                                            if (data.data.sl !=undefined ||data.data.sl !=null) {
                                                               
                                                                return arr[0]+":"+ data.data.slAl+'台';
                                                            }else{
                                                                return arr[0]
                                                            }
                                                            
                                                        }else{
                                                            return arr[0]
                                                        }
                                                      
                                                    } else {
                                                        return data.name;
                                                    }
                                                },
                                               
                                                textStyle: {
                                                    color: 'black',
                                                    fontSize: 12,
                                                    zIndex:9999,
                                                    padding:[2,7,0,7],
                                                    lineHeight:20,
                                                    backgroundColor:'#34ffc8'
                                                }
                                            }
                                        },
                                        viewControl: { // 用于鼠标的旋转,缩放等视角控制。
                                            projection: 'perspective', // 投影方式,默认为透视投影'perspective',也支持设置为正交投影'orthographic'。
                                            autoRotate: _this.mapAutoRotate, // 是否开启视角绕物体的自动旋转查看。[ default: false ] 
                                            //autoRotateDirection: 'cw', // 物体自传的方向。默认是 'cw' 也就是从上往下看是顺时针方向,也可以取 'ccw',既从上往下看为逆时针方向。
                                            autoRotateSpeed: 10, // 物体自传的速度。单位为角度 / 秒,默认为10 ,也就是36秒转一圈。
                                            autoRotateAfterStill: 3, // 在鼠标静止操作后恢复自动旋转的时间间隔。在开启 autoRotate 后有效。[ default: 3 ]
                                            //damping: 0, // 鼠标进行旋转,缩放等操作时的迟滞因子,在大于等于 1 的时候鼠标在停止操作后,视角仍会因为一定的惯性继续运动(旋转和缩放)。[ default: 0.8 ]
                                            rotateSensitivity: 1, // 旋转操作的灵敏度,值越大越灵敏。支持使用数组分别设置横向和纵向的旋转灵敏度。默认为1, 设置为0后无法旋转。	rotateSensitivity: [1, 0]——只能横向旋转; rotateSensitivity: [0, 1]——只能纵向旋转。
                                            zoomSensitivity: 1, // 缩放操作的灵敏度,值越大越灵敏。默认为1,设置为0后无法缩放。
                                            panSensitivity: 1, // 平移操作的灵敏度,值越大越灵敏。默认为1,设置为0后无法平移。支持使用数组分别设置横向和纵向的平移灵敏度
                                            panMouseButton: 'left', // 平移操作使用的鼠标按键,支持:'left' 鼠标左键(默认);'middle' 鼠标中键 ;'right' 鼠标右键(注意:如果设置为鼠标右键则会阻止默认的右键菜单。)
                                            rotateMouseButton: 'left', // 旋转操作使用的鼠标按键,支持:'left' 鼠标左键;'middle' 鼠标中键(默认);'right' 鼠标右键(注意:如果设置为鼠标右键则会阻止默认的右键菜单。)
                
                                            distance: mapPosition, // [ default: 100 ] 默认视角距离主体的距离,对于 grid3D 和 geo3D 等其它组件来说是距离中心原点的距离,对于 globe 来说是距离地球表面的距离。在 projection 为'perspective'的时候有效。
                                            minDistance: 40, // [ default: 40 ] 视角通过鼠标控制能拉近到主体的最小距离。在 projection 为'perspective'的时候有效。
                                            maxDistance: 400, // [ default: 400 ] 视角通过鼠标控制能拉远到主体的最大距离。在 projection 为'perspective'的时候有效。
                
                                            alpha: 35, // 视角绕 x 轴,即上下旋转的角度。配合 beta 可以控制视角的方向。[ default: 40 ]
                                            beta: 10, // 视角绕 y 轴,即左右旋转的角度。[ default: 0 ]
                                            //minAlpha: -360, // 上下旋转的最小 alpha 值。即视角能旋转到达最上面的角度。[ default: 5 ]
                                            //maxAlpha: 360, // 上下旋转的最大 alpha 值。即视角能旋转到达最下面的角度。[ default: 90 ]
                                            minBeta: -720, // 左右旋转的最小 beta 值。即视角能旋转到达最左的角度。[ default: -80 ]
                                            maxBeta: 720, // 左右旋转的最大 beta 值。即视角能旋转到达最右的角度。[ default: 80 ]
                
                                            center: [0, 0, 0], // 视角中心点,旋转也会围绕这个中心点旋转,默认为[0,0,0]。
                
                                            animation: true, // 是否开启动画。[ default: true ]
                                            animationDurationUpdate: 1000, // 过渡动画的时长。[ default: 1000 ]
                                            animationEasingUpdate: 'cubicInOut' // 过渡动画的缓动效果。[ default: cubicInOut ]
                                        },
                
                                        // light: { //光照阴影
                                        //     main: {
                                        //         color: '#fff', //光照颜色
                                        //         intensity: 1.2, //光照强度
                                        //         //shadowQuality: 'high', //阴影亮度
                                        //         shadow: true, //是否显示阴影
                                        //         alpha: 55,
                                        //         beta: 10
                
                                        //     },
                                        //     ambient: {
                                        //         intensity: 0.3
                                        //     }
                                        // },
                                        data: []
                                    },
                               ]
                        };

效果图3D地图

在这里插入图片描述

平面地图

在这里插入图片描述

以上内容仅供参考

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值