echarts地图加了飞线图 点位不能跟着地图缩放

echarts地图 散点图拖动和缩放的时候不跟着地图移动
请问啥问题呢?

 chartMap()
 //this.request(
  let myChart= echarts.init(document.getElementById("iframe"))
 //console.1og(myChart’,myChart)
 echarts.registerMap("santai",                             santai);
  letoption=   backgroundColor:                 "#Q30528"
   geo:
       map:"santai"
       aspectScale:
       zoom:0.65       silent:false,//暂不支持鼠标交互
       layoutCenter:"50%""50%"1
       layoutSize:            "128%"       show:true
       roam:true
       center:undefined
       1abel:f
         emphasis:
           show:true
           textStyle:
           co1or:RGBA(781321831       itemstyle:
         normal:{
           areaColor:          ‘RGBA(84,1381851),
           borderColor:             "#4ECEE6"
           borderwidth:1           shadouColor:"#4ECEE6"
           shadowoffsetY:0           shadowBlur:25
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7708579
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:关于echarts的地图的渲染,根据一个值去判断地图上的点是否该报警!
  • 除此之外, 这篇博客: 解决echarts中地图出现重叠问题在钻取的时候 或者写地图的时候中的 在使用Echarts开发项目时,经常会遇到地图组件的开发 遇到的问题也很多 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • geo: {
    	backgroundColor:'#232e67',
    	map: 'china',
    	roam: true,
    },
    series: [
    	 {
    		backgroundColor:'#232e67',
    		name: '用户分布',
    		type: 'map',
    		mapType: 'china',
    		data: []
    	 }
    ]
    

    比如说同时设置两个属性 一个是geo 一个是series
    两个都是map

    该写法会造成上图地图重叠现象,对于该问题,在echarts官方文档中找到了答案,可以通过 geoIndex属性指定geo组件

    官方叙述如下:

    默认情况下,map series会自己生成内部专用的geo组件。但是也可以用 geoIndex 指定一个geo组件。这样的话,map和其他 serise中的type=map可以共享一个geo组件。并且,Geo组件的颜色也可以被这个map serise控制。当设定 geoIndex后,series-map.map属性,以及series-map.itemStyle等样式配置不再起作用,而是采用geo中的相应属性。

    series: [
    	 {
    		backgroundColor:'#232e67',
    		name: '用户分布',
    		type: 'map',
    		mapType: 'china',
    		geoIndex: 0,
    		data: []
    	 }
    ]
    

    加上就好了
    好啦 小编要赶紧工作去了呢

  • 您还可以看一下 童金浩老师的跟风舞烟学大数据可视化-Echarts从入门到上手实战课程中的 【part03-Echarts十大常见组件详解】气泡图(bubble)详解小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于问题 "如何让echarts地图上的点位跟着地图缩放和拖动而移动?",可以采取如下步骤:

    1. 首先,在 echarts 地图基础上添加飞线图时,需要确保点位信息是以经纬度坐标的形式存储的,而不是直接使用了普通图形元素的坐标系。

    2. 接着,从官方文档中找到 echarts 对于缩放和拖动的处理机制,通常是通过 "geo" 组件中的 "silent" 属性来控制,建议将其设置为 false,这样在缩放和拖动时也可以触发点位的重绘。

    3. 最后,为了保证性能和流畅度,可以将点位信息和飞线图的绘制代码独立出来,使用 "setOption" 方法动态更新地图状态,而不是在缩放和拖动时一直重绘。

    实现代码参考如下:

    // 初始化地图和飞线图
    let myChart = echarts.init(document.getElementById('map'));
    let option = {
        geo: {
            show: true,
            map: 'world',
            roam: true,
            silent: false, // 设置为 false 来触发点位重绘
            zoom: 1,
            center: [120, 30], // 示例中心坐标
            label: {
                emphasis: {
                    show: false
                }
            },
            itemStyle: {
                normal: {
                    areaColor: '#323c48',
                    borderColor: '#111'
                }
            }
        },
        series: [
            // 绘制点位信息
            {
                type: 'scatter',
                coordinateSystem: 'geo',
                data: [
                    { name: 'Beijing', value: [116.46, 39.92] },
                    { name: 'Shanghai', value: [121.48, 31.22] },
                    { name: 'Guangzhou', value: [113.23, 23.16] }
                ],
                symbolSize: 10,
                itemStyle: {
                    normal: {
                        color: '#FFFF00'
                    }
                },
                tooltip: {
                    formatter: '{b}'
                }
            },
            // 绘制飞线图
            {
                type: 'lines',
                zlevel: 2,
                symbol: ['none', 'arrow'],
                symbolSize: 10,
                effect: {
                    show: true,
                    period: 6,
                    trailLength: 0.7,
                    symbol: 'arrow',
                    symbolSize: 10
                },
                lineStyle: {
                    normal: {
                        color: '#A6C84C',
                        width: 0,
                        curveness: 0.2
                    }
                },
                data: [
                    { fromName: 'Beijing', toName: 'Shanghai', coords: [[116.46, 39.92], [121.48, 31.22]] },
                    { fromName: 'Beijing', toName: 'Guangzhou', coords: [[116.46, 39.92], [113.23, 23.16]] }
                ]
            }
        ]
    };
    myChart.setOption(option);
    
    // 绑定地图缩放和拖动事件
    myChart.on('geoRoam', () => {
        myChart.setOption(option);
    });
    

    对于问题 "将雷达图数值放在类目值下并根据数值大小设置不同背景色标注",可以采取如下步骤:

    1. 首先,需要确保雷达图的 "indicator" 指标是按照从左到右、从上到下的顺序排列的,即可以使用示例中的 "let indicator" 定义。

    2. 接着,在雷达图的 "name" 属性中设置富文本格式,将类目名和数值分别展示,并且根据数值大小决定背景色标注的展示。

    3. 最后,为了控制多个类目名在同一行展示,可以通过判断奇偶性来分别使用换行符 '\n' 和空格符 ' ',从而达到期望的效果。

    实现代码参考如下:

    // 初始化雷达图
    let valueArr = [83,53,81,70,85,48,90,10,6]
    let myChart = echarts.init(document.getElementById('radar'));
    let option = {
        radar: {
            indicator: [
                { name: '数学', max: 100 },
                { name: '语文', max: 100 },
                { name: '英语', max: 100 },
                { name: '化学', max: 100 },
                { name: '物理', max: 100 },
                { name: '生物', max: 100 },
                { name: '体育', max: 100 },
                { name: '音乐', max: 100 },
                { name: '美术', max: 100 }
            ],
            // 其他配置项省略...
        },
        series: [
            {
                // 其他配置项省略...
                name: {
                    rich: {
                        a: {
                            color: '#000',
                            lineHeight: 16
                        },
                        b: {
                            color: '#fff',
                            align: 'center',
                            backgroundColor: '#F2821D',
                            padding: 2,
                            borderRadius: 4
                        },
                        c:{
                            color: '#fff',
                            align: 'center',
                            backgroundColor: '#F7C242',
                            padding: 2,
                            borderRadius: 4
                        },
                        d:{
                            color: '#fff',
                            align: 'center',
                            backgroundColor: '#B0DAAA',
                            padding: 2,
                            borderRadius: 4
                        },
                        e:{
                            color: '#fff',
                            align: 'center',
                            backgroundColor: '#CECECE',
                            padding: 2,
                            borderRadius: 4
                        }
                    },
                    // 判断数值大小,设置不同格式
                    formatter: (a,b) => {
                        let isOdd = (valueArr.length % 2 != 0)
                        let nosplitArr = isOdd?[0,parseInt(valueArr.length/2),parseInt(valueArr.length/2)+1]:[0,parseInt(valueArr.length/2)]
                        console.log('splitArr',nosplitArr);
                        i++
                        let splitStr = '\n'
                        if(nosplitArr.includes(i)){
                            splitStr = ' '
                        }
                        itemValue = parseInt(`${valueArr[i]}`)
                        if(itemValue > 80){
                            return `{a|${a}}${splitStr}{b|${valueArr[i]}}`
                        }else if(itemValue > 60){
                            return `{a|${a}}${splitStr}{c|${valueArr[i]}}`
                        }else if(itemValue > 50){
                            return `{a|${a}}${splitStr}{d|${valueArr[i]}}`
                        }else{
                            return `{a|${a}}${splitStr}{e|${valueArr[i]}}`
                        }    
                    }
                },
                // 其他配置项省略...
            }
        ]
    };
    myChart.setOption(option);