echarts map3D下钻及scatter3D的运用

本文介绍了如何使用Echarts3D实现地图不同区域填充不同颜色,并解决下钻打点后地图移动时定位点移位的问题。通过调整代码中的visualMap和series配置,实现了根据值范围映射不同颜色,并通过注册地图和设置scatter3D系列,确保了点的正确显示。同时,针对打点颜色默认为黑色的问题,提供了解决方案。

echarts 3d地图不同区域填充不同颜色以及下钻打点解决

中途出现了两个问题,一个是下钻打点之后,移动地图,定位点的位置跟地图出现移位,另一个是打点默认黑色,解决之后在代码里都有说明
在这里插入图片描述
在这里插入图片描述

<template>
  <div>
    <div id="map" ref="myEchart"></div>
  </div>
</template>

<script>
import * as echarts from 'echarts'
import 'echarts-gl'
import features from '../../../assets/js/index/shangyu'
let Echarts
export default {
  props: {
    addressName: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      isArea: true,
      areaName: '',
      pointData: []
    }
  },
  mounted () {
    this.map()
  },
  methods: {
    map () {
      let mapJson = features
      if (Echarts !== null && Echarts !== '' && Echarts !== undefined) {
        Echarts.dispose()
      }
      if (this.areaName) {
        mapJson = {
          features: features.features.filter((v) => {
            return v.properties.name === this.areaName
          })
        }
        if (this.areaName === '百官街道') {
          this.pointData = [
            {
              name: '文化社区',
              value: [120.890766, 30.04924],
              pointValue: '98',
              flag: true,
              img: `image://${require('../../../assets/img/hong.png')}`
            },
            {
              name: '文化新村',
              value: [120.878099, 30.028623],
              pointValue: '98',
              flag: true,
              img: `image://${require('../../../assets/img/hong.png')}`
            }
          ]
        } else if (this.areaName === '崧厦街道') {
          this.pointData = [
            {
              name: '蔡林村',
              value: [120.832713, 30.09329],
              pointValue: '98',
              flag: true,
              img: `image://${require('../../../assets/img/lv.png')}`
            },
            {
              name: '东凌湖村',
              value: [120.825199, 30.091851],
              pointValue: '93',
              flag: true,
              img: `image://${require('../../../assets/img/lv.png')}`
            }
          ]
          // echarts.registerMap('上虞', mapJson)
        } else {}
        // 不用定时器进入乡镇街道地图,村社区的点貌似显示不出来
        setTimeout(() => {
          echarts.registerMap('上虞', mapJson)
          this.ma
ECharts 中使用 `map3D` 组件时,若遇到选中状态 `selected` 无法正常生效的问题,通常与配置项的结构、数据绑定逻辑或状态更新机制有关。以下是一些可能的原因及解决方案,结合 ECharts 官方文档和实践经验进行说明: ### 1. 确保正确设置 `selectedMode` 和 `selected` 属性 `map3D` 中的选中状态需要通过 `series` 配置项下的 `select` 属性进行控制。需确保 `selectedMode` 设置为 `'single'` 或 `'multiple'`,并使用 `selected` 属性初始化选中状态。 ```javascript option = { xAxis3D: { type: 'value' }, yAxis3D: { type: 'value' }, zAxis3D: { type: 'value' }, grid3D: { viewControl: { projection: 'perspective' }, postEffect: { enable: true }, light: { ambient: { intensity: 0.5 }, main: { intensity: 1.0 } } }, series: [{ type: 'map3D', map: 'yourMapName', select: { mode: 'single', selected: { 'provinceA': true, 'provinceB': false } }, emphasisStyle: { areaColor: '#2a333d', borderColor: '#111' } }] }; ``` 此配置确保了初始化时某些区域被选中,并支持用户交互选择[^1]。 ### 2. 使用 `dispatchAction` 手动触发选中状态 如果通过数据绑定无法更新选中状态,可以尝试通过 `dispatchAction` 方法手动触发选中事件: ```javascript myChart.dispatchAction({ type: 'select', seriesIndex: 0, dataIndex: 3 // 假设要选中第四个区域 }); ``` 此方法适用于需要通过外部事件(如按钮点击)控制选中状态的场景[^1]。 ### 3. 检查数据索引与区域名称匹配 在使用 `selected` 属性时,需确保区域名称与地图数据中的名称一致。例如,若地图数据中省份名称为 `"Beijing"`,则应使用 `"Beijing": true` 来选中该区域。 ### 4. 更新图表状态 如果在运行时动态更改了选中状态,需调用 `setOption` 方法更新图表。建议使用 `notMerge` 参数为 `false`,以确保新状态与现有配置合并: ```javascript myChart.setOption({ series: [{ select: { selected: { 'provinceA': false, 'provinceC': true } } }] }); ``` ### 5. 检查 ECharts 版本与兼容性 确保使用的是最新版本的 ECharts,因为旧版本可能存在 `map3D` 组件的兼容性问题或 bug。可通过以下命令更新 ECharts: ```bash npm install echarts --save ``` 若使用的是 CDN 引入方式,应检查 `<script>` 标签是否指向最新版本。 ### 6. 监听选中事件并调试 可以通过监听 `selectchanged` 事件来调试选中状态是否正常触发: ```javascript myChart.on('selectchanged', function(params) { console.log('Selected regions:', params); }); ``` 此方法有助于确认用户交互是否成功触发选中逻辑。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值