惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
罗磊的独立博客
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
The Register - Security
The Register - Security
J
Java Code Geeks
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
N
News and Events Feed by Topic
腾讯CDC
P
Proofpoint News Feed
N
News | PayPal Newsroom
www.infosecurity-magazine.com
www.infosecurity-magazine.com
爱范儿
爱范儿
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
D
Docker
Y
Y Combinator Blog
博客园 - 聂微东
G
Google Developers Blog
S
Security @ Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
阮一峰的网络日志
阮一峰的网络日志
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
CERT Recently Published Vulnerability Notes
I
Intezer
G
GRAHAM CLULEY
有赞技术团队
有赞技术团队
Attack and Defense Labs
Attack and Defense Labs
V
Visual Studio Blog
博客园 - Franky
博客园 - 三生石上(FineUI控件)
W
WeLiveSecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
Scott Helme
Scott Helme
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LINUX DO - 最新话题
C
Cybersecurity and Infrastructure Security Agency CISA

Sehnsucht

记一次博客换图床的过程 观《花束般的恋爱》 读《活过》 东京 旅行篇 亲人逝去 我为什么想养鱼 防止AI爬取你的博客 「monthly 」博客重构 游戏全成就 好看的小说 人生的每一步都不会是浪费-2024年终 「weekly」星期五综合征 「weekly」听播客 杂谈 读《美丽新世界》 「weekly」社交媒体 恶性事件 新世界 「weekly」认知觉醒 美丽新世界 follow 「weekly」独立博客9问题 双十一买书 读《惊呆了!原来这就是社会学》 一次聊天与自我建设 2024-09月记 补番《relife》 树状数组简单理解 lvm简单使用 博客自动发布方案 某公众号废案 fail2ban基本使用 Podman 环境使用 Nginx Proxy Manager 最佳实践 2024-07同学聚会 vps使用podman部署freshrss Gitlab CICD 实践,思考与记录 装备升级:新的PC gitlab局域网搭建流程 FastMail迁移至GMail+Cloudflare Email Routing 读《黑客与画家》 leetcode 第 391 场周赛 Astro添加过渡后DarkModeToggle按钮失效 人生刻度 又到凤凰花朵开放的时候 2023-05-10 实习结束 2023-04-26 广州博物馆游记 YOASOBI「たぶん」官方音乐视频 风灵玉秀-发如雪 带我的老哥离职了 从p10k转向Starship lunarvim国内安装踩坑记录 什么是对称加密非对称加密、密钥交换、数字签名、证书 强调体验的一种思考时间的方式 ArchLinux使用vscode编写latex报错The font "FontAwesome" cannot be found ArchLinux安装(移动硬盘)流程 yay一个或多个文件没有通过有效性检查! 2022年终 hugo建站伊始 clash设置relay前置代理(校园网破解改进记录) 群青 · YOASOBI · Ayase 华为 matepad pro 11使用体验 Nginx使用acme.sh免费安装ssl证书 永远属于你的安娜 在线 童年趣事 童心,是比野心更难得的梦想 2021年终总结 基于jeeSite的软件测试课程作业 流程记录 Linux不同用户安装不同版本jdk Wifi4更换Wifi6路由器的使用体验 Flask 上传图片并灰度显示 玩客云刷机debain个人记录 jython 简单入门 Jenkins 个人搭建流程记录 集成邮件系统(qq邮箱),gitlab服务器,freestyle风格 在Web项目中配置Log4j --指南-- Codeforces Round 753 (Div. 3) ABCDE 浅谈fork函数 JavaWeb servlet 使用Cookie记录用户访问次数 Codeforces Round Educational Codeforces Round 114 (Rated for Div. 2) ABC 2021牛客多校7 I xay loves or 2021牛客多校9 H Happy Number 2021牛客多校8 D OR 2021牛客多校5 B Boxes 2021牛客多校5 H Holding Two 2021牛客多校2 D Er Ba Game 2021牛客多校1 F Find 3-friendly Integers 2021牛客多校1 B Ball Dropping 记人生第一次投简历和笔试 原型模式 2021-2-20 雨时随记 关于一维差分数组的例子 halo个人建站 关于手机ping电脑和电脑ping手机 泛型类简单理解 CodeForces - 849C From Y to Y 2020牛客国庆集训派对day3 Leftbest 约瑟夫环问题---2020牛客国庆集训派对day2 AKU NEGARAKU mysql 5.7 忘记密码如何更改 CF 1099B Squares and Segments CF 998A Balloons CF 998B Cutting 链表应用之多项式相加 CF 1150A Stock Arbitraging CF 1199A City Day CF 1199B Water Lily CF 982A Row CF 934A A Compatible Pair CF 629B Far Relative’s Problem 651A Joysticks 651B Beautiful Paintings
nuxt3使用echarts5渲染中国地图
2024-02-23 · via Sehnsucht

nuxt是vue的全栈框架,需求是引入echart,并渲染中国地图

在nuxt3环境已经搭建的情况下,我使用了tailwindcss,配置过程省略

导入包

导入包echartsvue-echarts

npm install echarts vue-echarts

大部分情况只导入vue-echarts就可以了,如果有交互组件再导入echarts

修改nuxt配置文件

目的是将echarts代码转译成向后兼容的旧版本代码,确保代码可以在多种浏览器运行

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  ssr: false,
  devtools: { enabled: true },

  modules: ["@nuxtjs/tailwindcss", "nuxt-icons"],

  build: {
    transpile: [/echarts/],
  }
})

插件

插件的形式是为了方便全局引入echarts,当然,也可以不用插件导入import * as echarts from "echarts";,只是打包体积会异常的大罢了

import { use } from 'echarts/core';

// import ECharts modules manually to reduce bundle size
import { CanvasRenderer } from 'echarts/renderers';
import { BarChart } from 'echarts/charts';
import { GridComponent, TooltipComponent } from 'echarts/components';

export default defineNuxtPlugin(() => {
    use([CanvasRenderer, BarChart, GridComponent, TooltipComponent]);
});

或者可以全部引入

import * as echarts from 'echarts';

export default defineNuxtPlugin((nuxtApp) => {
    nuxtApp.vueApp.config.globalProperties.$echarts = echarts
});

nuxtApp.vueApp.config.globalProperties.$echarts = echarts意思是将 echarts 对象挂载到全局属性上,这样就可以在任何 Vue 组件中通过 this.$echarts 来访问 echarts 对象,而无需重复引入

通过这种方式,你可以在整个 Vue 应用中方便地使用 echarts 对象,而不必在每个组件中都导入和配置一次。

nuxtApp 是 Nuxt.js 应用的实例,nuxtApp.vueApp 是 Vue 应用的实例

config.globalProperties 是 Vue 3 中的属性,它允许我们定义在所有组件实例中可用的全局属性或方法。这样定义的属性或方法可以在任何组件中使用,而不需要单独导入或声明

China地图文件

在echarts4中内置,但是由于一些原因在echarts5中去除,所以需要下载

一般来说,直接用XXX.json就可以了,例如本文就只下载了china.json,按需下载即可

china.json放入assets文件夹中,通过import chinaJson from '@/assets/china.json'的方式引入

示例

<template>
    <div class="h-screen w-screen">
        <div class="h-full w-full" id="china-map"></div>
    </div>
</template>

<script>
import chinaJson from '@/assets/china.json'

export default {
    mounted() {
        this.initEcharts();
    },
    methods: {

        async initEcharts() {
            // 注册geojson
            this.$echarts.registerMap('china', chinaJson);

            const option = {
                title: {
                    text: 'aaa)',
                    subtext: 'ggg',
                    sublink: 'http://www.census.gov/popest/data/datasets.html',
                    left: 'right'
                },
                tooltip: {
                    trigger: 'item',
                    showDelay: 0,
                    transitionDuration: 0.2
                },
                visualMap: {
                    left: 'right',
                    min: 500000,
                    max: 38000000,
                    inRange: {
                        color: [
                            '#313695',
                            '#4575b4',
                            '#74add1',
                            '#abd9e9',
                            '#e0f3f8',
                            '#ffffbf',
                            '#fee090',
                            '#fdae61',
                            '#f46d43',
                            '#d73027',
                            '#a50026'
                        ]
                    },
                    text: ['High', 'Low'],
                    calculable: true
                },
                toolbox: {
                    show: true,
                    //orient: 'vertical',
                    left: 'left',
                    top: 'top',
                    feature: {
                        dataView: { readOnly: false },
                        restore: {},
                        saveAsImage: {}
                    }
                },
                series: [
                    {
                        name: '中国',
                        type: 'map',
                        roam: true,
                        map: 'china',
                        emphasis: {
                            label: {
                                show: true
                            }
                        },
                        data: [
                            { name: '山东', value: 4822023 },
                            { name: '山西', value: 731449 },
                            { name: '河南', value: 6553255 },
                            { name: '河北', value: 2949131 },
                            { name: '陕西', value: 38041430 },
                            { name: '广东', value: 5187582 },
                            { name: '福建', value: 3590347 },
                            { name: '浙江', value: 917092 },
                            { name: '甘肃', value: 632323 },
                            { name: '吉林', value: 19317568 },
                            { name: '新疆', value: 9919945 },
                            { name: '内蒙古', value: 1392313 },
                        ]
                    }
                ]
            };

            const myChart = this.$echarts.init(document.getElementById("china-map"));// 图标初始化
            myChart.setOption(option);
            window.addEventListener("resize", () => {
                myChart.resize();
            });
        },

    }
};
</script>

打包体积相差不大

实测用插件打包和直接import * as echarts from "echarts";打包都是3M多,差距不大,原因大致是现代的打包工具进行tree shaking(指在打包过程中通过静态代码分析的方式去除未被使用的代码)和代码分割,对于重复的模块尽可能只打包一次

GEOJSON画图原理

简单说就是一组json文件,里面可以指定很多的类型和坐标,和svg类似

例如:

{
    "type": "Point",
    "coordinates": [30, 10]
}

就是一个点,其他类型可能是多个点MultiPoint,多个线条MultiLineString,多个面MultiPolygon等等

地图主要是由MultiPolygon组成,一个一个省份或许就是一个面,多个面组成就是中国地图了


参考: