极致呈现系列之:Echarts地图的浩瀚视野(二)

news2024/11/25 11:49:53

今天我将基于上一个博客讲到的Echarts地图的相关知识,来实现一个三维地图的效果,我将通过两种方式来实现,一种是伪3D效果的中国地图效果,为什么说是伪3D效果呢,跟着做完你就明白了;一种是真正的三维效果中国地图;下面先看下最终的效果图
在这里插入图片描述

目录

  • 创建项目
  • 引入并注册地图
  • 伪3D效果的中国地图
  • 3D效果的中国地图

创建项目

首先创建项目,我这个项目是基于Vue3+Vite+Echarts5开发的,所以你需要先搭建好项目环境,具体创建vue3项目的步骤,我这里就不啰嗦了,还不知道怎么创建的,赶紧百度学习下吧。当然,你也可以基于HTML+CSS+JavaScript的原生环境创建项目,因为我这篇文章不涉及与后台的交互,所以,你用HTML+CSS+JavaScript的方式也是可以实现的,当然了,引入Echarts的方式就需要你借助 script 标签直接通过 CDN 来使用了。

  1. 项目创建完成后,需要先安装Echarts
npm install echarts --save
  1. 准备地图数据
    下载地图数据,并将其放到src目录下的assets文件夹
  2. 新建MapChart3D.vue组件
    在components文件夹新建MapChart3D.vue组件,所有有关地图的代码逻辑都放到这个组件下
  3. 新建一个div,作为Echarts地图的容器
<template>
  <div ref="chart" style="width: 100%;height: 100vh;"></div>
</template>
  1. 引入vue的组合式API
import { ref, onMounted } from 'vue' 
const chart = ref(null)

引入并注册地图

接下来我们使用import方式导入Echarts组件库和json格式的地图文件

import * as echarts from 'echarts'
import cmap from '../assets/china.json'

使用echarts.registerMap()方法注册地图

echarts.registerMap("china", cmap)

在vue的onMounted中调用 echarts.init方法将div组件作为容器绑定到Echarts实例

onMounted(async () => { 
  const myChart = echarts.init(chart.value)  
})

这样,我们就将前面的准备工作完成了,下面就是对Echarts地图配置项的配置操作了。

伪3D效果的中国地图

要配置Echarts的地图组件,其实非常简单,我们前面一个博客也讲过了,只需要将series系列中的配置对象的type属性设置为map,然后将map配置属性配置为我们前面注册的地图china,就可以了,配置完成后,通过myChart.setOption方法将配置项传入。

const option = {
    series: [{
      type: 'map',
      map: 'china'
    }]
  };
  myChart.setOption(option)

这样配置以后,我们得到的只是一个简单的灰色地图,如下图
在这里插入图片描述
下面我们来慢慢优化

  1. 首先,我想实现具有科技感的背景,所以,我们给Echarts添加一个背景色,选择科技蓝作为背景
const option = {
	//设置背景颜色
    backgroundColor: '#020933',
    series: [{
      type: 'map',
      map: 'china'
    }]
  };
  myChart.setOption(option)

配置完成后效果如下
在这里插入图片描述
2. 灰色的地图太难看了,我们来调整下,我们给series添加itemStyle配置项,在里面添加边线颜色。边线宽度和填充颜色

const option = {
	//设置背景颜色
    backgroundColor: '#020933',
    series: [{
      type: 'map',
      map: 'china',
      itemStyle: {
          borderColor: '#2ab8ff',
          borderWidth: 1.5,
          areaColor: '#12235c', 
      },
    }]
  };
  myChart.setOption(option)

修改后,刷新浏览器看下效果,这样就比较nice了。
在这里插入图片描述
3. 整体颜色我们已经调整好了,但是我们发现,地图上面没有各个省市的名字,下面我们通过配置series中的label配置项来显示文字,我们将label中的show设置为true,颜色color设置为白色

const option = {
	//设置背景颜色
    backgroundColor: '#020933',
    series: [{
      type: 'map',
      map: 'china',
      itemStyle: {
          borderColor: '#2ab8ff',
          borderWidth: 1.5,
          areaColor: '#12235c', 
      },
      label: {
          show: true,
          color: '#fff'
      },
    }]
  };
  myChart.setOption(option)

在这里插入图片描述
4. 现在我们已经实现了一个平面的二维地图,那我们如何来实现地图的三维效果呢?没错,你猜对了,我现在要在重新添加一个地图,让它稍微与上面的地图有一定的偏移量,这样就在视觉上形成了三维效果了,所以我在开始说是实现的伪3D效果,如果我们想要实现真正的三维地图,可以用Threejs将其拉伸为三维地图,这里就不多讲了,有兴趣的小伙伴可以看我关于Threejs相关的博客。

在Echarts中还提供了geo配置项,这个配置项用于配置地理坐标系组件。通过配置里面的map属性,指定我们前面引入的china,

geo: {
  map: 'china', 
},

上面配置添加以后,我们发现页面没有任何效果,这是因为我们两个地图现在是重叠在一起的,我们需要对它们的位置进行偏移,使其产生层次感。我们给geo配置项添加itemStyle属性,设置其区域颜色、阴影颜色,同时设置Y轴阴影的偏移量

geo: {
  map: 'china', 
  itemStyle: {
        areaColor: '#013C62',//地区颜色
        shadowColor: '#182f68',//阴影颜色
        shadowOffsetX: 0,//阴影偏移量
        shadowOffsetY: 15, //阴影偏移量
   }
},
设置完成后,刷新浏览器,看下效果,我们发现已经有了一点点三维的味道了
![在这里插入图片描述](https://img-blog.csdnimg.cn/5886d13a61994d25ab0b75e2e53bc8d7.png)
5. 到这里,我们地图的三维效果已经呈现出来了,只是有一个细节我们还要处理下,就是地图右下角的南海诸岛是一个方框框起来的,这样我们两个图层叠加后,就显得比较的假,所以,我们需要对它进行处理。
6. 我们上一个博客曾经介绍过,echarts.registerMap()方法有一个可选参数,我们可以通过它来处理上面的问题,代码如下:
```bash
echarts.registerMap("china", cmap, {
    '南海诸岛': {
      left: 114,
      top: 10,
      width: 0,
      height: 0, 
    }
  })

刷新浏览器,看下效果,这就比较完美了
在这里插入图片描述

3D效果的中国地图

要实现三维地图效果,我们需要引入Echarts提供的echarts-gl库,在代码中引入它

import 'echarts-gl'; // 引入 echarts-gl 库

然后在option配置项中配置geo3D,代码如下

const option = {
    backgroundColor: '#020933',
    geo3D: {
      map: 'china', // 设置地图类型为 map,并指定地图数据源  
      itemStyle: {
        color: '#12235c',
        opacity: 0.8,
        borderWidth: 1,
        borderColor: '#2ab8ff',
      },  
    },
}

上面代码中,我们在geo3D中配置map属性,设置地图类型为 map,并指定地图数据源。
itemStyle配置地图样式
刷新浏览器看效果
在这里插入图片描述
好了,关于Echarts地图三维效果的呈现就聊到这里,有问题的小伙伴评论区留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eclipse添加Spket插件实现ExtJs智能提示

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用步骤1.解压Spket插件2.重启 Eclipse3.配置 Spket4.添加 Library5.添加 File6.将 extjs 设置为 Default7.将 *.js 文件的默认编辑器设置为 Spket JavaSc…

本地连接服务器搭建的 Redis 集群

本地连接服务器搭建的 Redis 集群 在实际运行测试中&#xff0c;存在两个问题 安全组或防火墙开放端口 主要开放10000端口。如果要连接 Redis集群的应用服务不和 Redis集群在一个局域网下&#xff0c;会出现连接异常。 第一个问题检查防火墙或安全组就可以解决&#xff0c;第…

我为开放原子全球开源峰会助力

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Linux运维监控学习笔记1

1. 监控系统的概念&#xff1a; 监控系统&#xff0c;将所有需要监控的服务器及其各种各种需要的状态数据都实时地收集&#xff0c;并图形化地展示&#xff0c;并可以进行报警&#xff0c;让机器主动及时地与人沟通。 2. 为什么要监控&#xff1f; 答&#xff1a;实时地收集数…

练习:逻辑回归

练习2&#xff1a;逻辑回归 介绍 在本练习中&#xff0c;您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法&#xff0c;来提高算法的鲁棒性&#xff0c;并用更复杂的情形来测试模型算法。 在开始练习前&#xff0c;需要下载如下的文件进行数据上…

【开发细节】SpringBoot配置文件的spring.profiles下的active和include属性的区别和作用

目录 问题作用spring.profiles.activespring.profiles.include 总结 问题 我们经常在项目的application.yml中看到这样的配置&#xff0c;如下&#xff1a; 在 Spring Boot 中&#xff0c;spring.profiles.active 和 spring.profiles.include 属性都是用来配置 profile 的。 …

C++设计模式之单例模式(Singleton)

文章目录 定义前言1. 问题2. 解决方案 适用场景实现方式优点缺点与其他模式的关系懒汉单例模式代码1. 线程不安全的懒汉单例模式2. 线程安全的懒汉单例模式 饿汉单例模式代码Meyers Singleton优点&#xff1a;缺点&#xff1a; 定义 单例是一种创建型设计模式&#xff0c;让你…

从“五个女博士”事件,论品牌广告营销的正确姿势

【潮汐商业评论/原创】 “她经济”是一片浩浩荡荡又风云变幻的海&#xff0c;“美”则是其中贯穿女性一生的课题&#xff0c;如果说这两年这个课题有什么变化&#xff0c;那就是从“女为悦己者容”到“女为自己容”&#xff0c;女性追求美的出发点早就不再是取悦他人“服美役”…

从外资企业数字化趋势看MNC根植中国的新逻辑

导读&#xff1a;外企数字化发展&#xff0c;也要“在中国&#xff0c;为中国” 外资企业一直是中国经济发展的重要推动力量。根据商务部数据&#xff0c;2022年中国实际使用外商直接投资金额达到1891亿美元&#xff0c;创历史新高&#xff0c;同比增速为8%。中国经济强大的韧性…

linux下文件锁使用总结

linux锁存在强制锁&#xff08;mandatory lock&#xff09;和劝告锁&#xff08;advisory lock&#xff09;。所谓强制锁&#xff0c;就是一个进程获取了那把锁&#xff08;只有一把钥匙&#xff09;&#xff0c;只有一个进程可以操作&#xff0c;别的进程无能为力。所谓劝告锁…

【数据库】Mysql索引、事务与存储引擎

文章目录 一、索引介绍1. 索引的概念2. 索引的作用与副作用2.1 索引的作用2.2 索引的副作用2.3 如何实现索引 3. 创建索引的原则依据4. 索引的分类和创建4.1 普通索引直接创建索引修改表方式创建创建表的时指定索引 4.2 唯一索引直接创建唯一索引修改表方式创建创建表的时候指定…

实测Maven依赖包可通过域名抢注实现钓鱼攻击吗

先说结论&#xff1a;基本不可行 原理 Maven包中 groupId 字段是域名反写&#xff0c;比如你有一个 12345.com&#xff0c;就可以申请到 com.12345 的groupId。 很多开源项目都停止维护&#xff0c;但是很多人使用&#xff0c;这些团队可能忘记续费域名&#xff1b;同时目前…

keras运行debug解决protobuf版本冲突

# code 5.4 使用Keras实现异或网络 import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation from tensorflow.keras.optimizers import SGD x_train np.array([[0, 0],[0, 1],[1, 0],[1, 1] ]) y_train …

她98年的,我玩不过她...┭┮﹏┭┮

现在的小年轻真的卷得过分了。前段时间我们公司来了个98年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…

高级VLAN_vlan聚合(Super VLAN)实验

vlan聚合(Super_VLAN) 就是在一个物理网络里面用多个vlan来隔离广播域,将这个vlan聚合成一个逻辑vlan就有了Super vlan,这些多个vlan共用一个ip子网和网关, 目的就是为了节约ip地址资源 普通vlan示意图 普通vlan就存在很多网关,有的vlan可能会存在只有20个主机设备,但是需要划…

罗德FSH13手持式频谱分析仪RohdeSchwarz

FSH4和R&S?FSH8是罗德与施瓦茨公司全新推出面向未来应用的手持式频谱分析仪。它集频谱分 析、天馈线分析、全功能矢量网络分析、矢量电压表、功率计主机、宽带通信解调等多种测试功能 于一身&#xff0c;拥有媲美中高档台式频谱仪的指标。R&S?FSH4和R&S?FSH8完美…

023+limou+C语言的“可变参数列表”和“命令行参数”以及“递归调用”

0.前言 您好&#xff0c;这里是limou3434的一篇博文&#xff0c;感兴趣可以看看我的其他内容。本次我给您带来了C语言的“可变参数列表”&#xff0c;要明白这些内容&#xff0c;您可能需要重新复习下C语言视角的栈帧空间知识。最后我还给出两个小的C语言知识点&#xff1a;“…

Metasploit渗透测试框架

文章目录 Metasploit渗透测试框架基于TCP协议收集主机信息开放端口扫描db_nmap查询网段内在线存活的主机半连接的方式进行半连接扫描使用auxiliary/sniffer下的psunffle模块进行密码嗅探 基于SNMP协议收集主机信息基于SSH协议收集主机信息实战-制作Linux恶意病毒获取公司服务权…

JAVA开发(通过Apollo注入配置信息的几种方式)

前言 在springCloud中有一个重要的组件就是配置中心&#xff0c;config:server&#xff0c;用于配置springboot中需要注入的各种配置项。但是现在发现越来越多的企业使用Apollo进行集成。博主在开发中也是使用Apollo进行配置。本文总结Apollo的的使用&#xff0c;集成到spring…

大模型入门(四)—— 基于peft 微调 LLaMa模型

llama-7b模型大小大约27G&#xff0c;本文在单张/两张 16G V100上基于hugging face的peft库实现了llama-7b的微调。 1、模型和数据准备 使用的大模型&#xff1a;https://huggingface.co/decapoda-research/llama-7b-hf&#xff0c;已经是float16的模型。 微调数据集&#x…