Vue3+ECharts+高德地图JS API

Vue3+ECharts+高德地图JS API

1.导包

npm i @amap/amap-jsapi-loader --save
npm install echarts --save

2.创建组件AMapECharts.vue

<template>
    <div ref="el" :style="{ width: width, height: height, position: 'relative' }"></div>
</template>

<script setup lang='ts'>
import * as echarts from 'echarts';
import 'echarts-extension-amap';
import AMapLoader from '@amap/amap-jsapi-loader';
import { onMounted, onUnmounted, ref, watch } from 'vue';

const props = defineProps({
    width: {
        type: String,
        default: '100%'
    },
    height: {
        type: String,
        default: '400px'
    },
    // 是否开启监听图表容器的大小并改变图表大小
    resize: {
        type: Boolean,
        default: true
    },
    echartsOption: {
        type: Object,
        default: () => ({
            // 加载 amap 组件
            amap: {
                // 3D模式,无论你使用的是1.x版本还是2.x版本,都建议开启此项以获得更好的渲染体验
                viewMode: '3D',
                // 高德地图支持的初始化地图配置
                // 高德地图初始中心经纬度
                center: [108.39, 39.9],
                // 高德地图初始缩放级别
                zoom: 4,
                // 是否开启resize
                resizeEnable: true,
                // 自定义地图样式主题
                mapStyle: 'amap://styles/dark',
                // 移动过程中实时渲染 默认为true 如数据量较大 建议置为false
                renderOnMoving: true,
                // ECharts 图层的 zIndex 默认 2000
                // 从 v1.9.0 起 此配置项已被弃用 请使用 `echartsLayerInteractive` 代替
                // echartsLayerZIndex: 2019,
                // 设置 ECharts 图层是否可交互 默认为 true
                // 设置为 false 可实现高德地图自身图层交互
                // 此配置项从 v1.9.0 起开始支持
                echartsLayerInteractive: true,
                // 是否启用大数据模式 默认为 false
                // 此配置项从 v1.9.0 起开始支持
                largeMode: false
                // 说明:如果想要添加卫星、路网等图层
                // 暂时先不要使用layers配置,因为存在Bug
                // 建议使用amap.add的方式,使用方式参见最下方代码
            },
            series: [
                {
                    type: 'scatter',
                    // 使用高德地图坐标系
                    coordinateSystem: 'amap',
                    // 数据格式跟在 geo 坐标系上一样,每一项都是 [经度,纬度,数值大小,其它维度...]
                    data: [[115, 35, 18], [120.1, 30.2, 20]],
                    encode: {
                        value: 2
                    }
                }
            ]
        })
    }
})

const el = ref(null);
let myChart: any;

// 防抖函数
function debounce(func: Function, duration: number = 500) {
    let timeoutID: number;
    return function (...args: any) {
        // console.log(args);
        clearTimeout(timeoutID)
        timeoutID = setTimeout(() => {
            func.apply(this, args);
        }, duration);
    }
}

let d_resize = debounce(() => {
    myChart.resize();
}, 500);

function openResize() {
    // 监听页面的resize事件,重新改变图表大小
    window.addEventListener('resize', d_resize);
}
// 初始化echarts
function echartsInit() {
    myChart = echarts.init(el.value);
}
// 设置option
function echartsSetOption(option: Object) {
    myChart.setOption(option);
}
// 摧毁echarts
function echartsDestroy() {
    myChart && myChart.dispose();
}

// 进行一系列操作,包括创建echarts实例,绑定事件,重新绘制等
function echartsRun() {
    // // onload后才能访问window对象上的AMap
    // window.onload = function () {
    // 初始化一个echarts实例
    echartsInit();
    AMapLoader.load({
        key: "*******************", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: ["AMap.Scale", "AMap.ToolBar", "AMap.ControlBar", "AMap.Geolocation", "AMap.MapType"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
    })
        .then((AMap) => {
            // 绘制图表
            echartsSetOption(props.echartsOption);
            // 监听图表容器的大小并改变图表大小
            props.resize && openResize();
            // 获取 ECharts 高德地图组件
            var amapComponent = myChart.getModel().getComponent('amap');
            // 获取高德地图实例,使用高德地图自带的控件(需要在高德地图js API script标签手动引入)
            var amap = amapComponent.getAMap();
            // 添加控件
            amap.addControl(new AMap.Scale());
            amap.addControl(new AMap.ToolBar({
                position: {
                    bottom: '110px',
                    right: '50px'
                }
            }));
            amap.addControl(new AMap.ControlBar());
            amap.addControl(new AMap.Geolocation());
            amap.addControl(new AMap.MapType());
            // 添加图层
            var satelliteLayer = new AMap.TileLayer.Satellite();
            var roadNetLayer = new AMap.TileLayer.RoadNet();
            const traffic = new AMap.TileLayer.Traffic({
                autoRefresh: true, //是否自动刷新,默认为false
                interval: 180, //刷新间隔,默认180s
            });
            // amap.add([satelliteLayer, roadNetLayer]);
            // amap.add([traffic]);
            //  添加一个 Marker
            amap.add(new AMap.Marker({
                position: [115, 35]
            }));
            // 禁用 ECharts 图层交互,从而使高德地图图层可以点击交互
            amapComponent.setEChartsLayerInteractive(false);
        })
        .catch((e) => {
            console.log(e);
        });

    // }
}

// 监听echartsOption,重新绘画
watch(props.echartsOption, () => {
    echartsSetOption(props.echartsOption);
});

onMounted(() => {
    echartsRun();
});
onUnmounted(() => {
    // 取消监听图表容器的大小,改变图表大小事件
    props.resize && window.removeEventListener('resize', d_resize);
    echartsDestroy();
});
</script>

<style></style>

以上组件的封装,请结合实际情况自行完善。

3.使用结果

在这里插入图片描述

参考文献

高德地图JS API结合Vue使用
Github Echarts高德地图扩展
Echarts地图示例

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3是一种流行的JavaScript框架,而Echarts5是一种强大的数据可视化库。结合Vue3和Echarts5,可以很容易地实现世界地图的可视化效果。 首先,你需要在Vue项目中安装Echarts5。可以通过npm或yarn来安装echarts: ``` npm install echarts ``` 或者 ``` yarn add echarts ``` 安装完成后,你可以在Vue组件中引入Echarts,并使用它来绘制世界地图。 在Vue组件中,你可以使用`<template>`标签来定义HTML模板,使用`<script>`标签来编写JavaScript代码,使用`<style>`标签来定义CSS样式。 下面是一个简单的示例代码,展示了如何在Vue3中使用Echarts5绘制世界地图: ```vue <template> <div id="world-map" style="width: 100%; height: 400px;"></div> </template> <script> import * as echarts from 'echarts'; export default { mounted() { this.drawWorldMap(); }, methods: { drawWorldMap() { const chartDom = document.getElementById('world-map'); const myChart = echarts.init(chartDom); // 定义地图数据 const mapData = [ { name: 'China', value: 100 }, { name: 'United States', value: 50 }, // 其他国家... ]; // 配置地图选项 const option = { tooltip: { trigger: 'item', formatter: '{b}: {c}', }, visualMap: { min: 0, max: 100, left: 'left', top: 'bottom', text: ['High', 'Low'], seriesIndex: [1], inRange: { color: ['#e0ffff', '#006edd'], }, }, series: [ { type: 'map', mapType: 'world', roam: true, label: { show: true, }, data: mapData, }, ], }; // 使用配置项绘制地图 myChart.setOption(option); }, }, }; </script> <style> #world-map { width: 100%; height: 400px; } </style> ``` 在上面的代码中,我们首先引入了Echarts库,然后在`mounted`生命周期钩子函数中调用`drawWorldMap`方法来绘制地图。`drawWorldMap`方法中,我们使用`echarts.init`方法初始化一个Echarts实例,并通过配置项`option`来定义地图的样式和数据。最后,使用`myChart.setOption(option)`方法将配置项应用到地图上。 这样,你就可以在Vue项目中使用Vue3和Echarts5来实现世界地图的可视化效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值