vue - vue使用echarts实现中国地图和点击省份进行查看

news2024/11/23 2:46:51

文章目录

    • 1,实现的效果和功能
    • 2,安装ECharts
    • 3,main.js里面引入echarts
    • 4,实现如下
    • 5,遇到的问题
    • 6,用到的模拟数据

1,实现的效果和功能

vue使用echarts实现中国地图和点击省份进行查看;
下面是效果图:主要实现的功能如下:
1,第一张是实现中国地图,点击任意省份能够显示tooltip提示框 ;
2,第二张是点击详情能够在原来的位置显示此省的地图并可以查看详细;
3,第三张是点击第二张左上角的返回箭头 重新返回到 第一张中国地图
需要的保费模拟数据我会放到文章的最后面;
echarts官网:https://echarts.apache.org/examples/zh/index.html
map地图参考:https://echarts.apache.org/zh/option.html#series-map

效果图:
在这里插入图片描述

2,安装ECharts

npm install echarts --save // 最新版本
### 之前版本
npm install echarts@4.8.0 --save 
### 卸载echarts
npm uninstall echarts

注意:echarts5.0版本下会有地图的数据,5.0版本以上则没有地图的数据,需要自己下载;
或者安装低版本的echart把map文件夹的地图数据复制到高版本的对应文件下面也是可以的;

1.1 地图数据的位置

中国地图和各省的地图绘制信息需要放到依赖里面的echarts下面的map文件夹下面;如下图:

在这里插入图片描述
1.2 还可以自己下载这些地图数据

下载地址:https://datav.aliyun.com/portal/school/atlas/area_selector
在这里插入图片描述

3,main.js里面引入echarts

// 引入echarts
import * as echarts from 'echarts'
Vue.prototype.$echarts = echarts //挂载到原型上面 也可以选择不挂载 直接在页面上引入

4,实现如下

主要流程如下:

1,需要有一个容器 <div id="chinaMap" v-if="pyName === 'china'"></div> 且有唯一 id值
2,this.$echarts.init(document.getElementById('chinaMap')); 用来初始化节点 id和上面的相对应;
3,require('../../../node_modules/echarts/map/json/china.json');用来导入相对应的地图数据,echarts进行渲染
4,options配置项用来设置echarts图表的样式和展示数据相关;
5,this.myEchartsOfChina.setOption(options);设置图表实例的配置项以及数据,万能接口,所有参数和数据的修改都可以通过 setOption 完成,ECharts 会合并新的参数和数据,然后刷新图表;
6,optionsformatterhtml里面的点击事件需要在mounted里面先行注册一下,否则此方法会报错:undefined;

全部代码如下:

<template>
  <div>
    <h1>echarts可视化</h1>
    <hr />
    <div class="container">
      <!-- 全国地图 机构趋势模块 -->
      <div class="china">
        <!-- 点击返回全国-->
        <div @click="returnCh">
          <img v-if="pyName !== 'china'" class="returnImg" src="@/assets/img/return.png" />
        </div>
        <div id="chinaMap" v-if="pyName === 'china'"></div>
        <div id="provinceMap" v-if="pyName !== 'china'">111</div>
      </div>
    </div>
  </div>
</template>
<script>
import { cityArr, totalMap } from './data/mapData';
export default {
  components: {},
  data() {
    return {
      // 全省保费信息
      totalMap: null,
      // 各个城市的数据
      cityArr: null,
      myEchartsOfChina: null,
      // 默认选择的城市 这是拼音
      pyName: 'china',
      // 保留一份省名的中文
      pyNameOfChinese: '',
    };
  },

  created() {
    // 拿到数据
    this.totalMap = totalMap;
    this.cityArr = cityArr;
    // 页面进来注册tooltip上面的点击事件 否则会报此事件undefined
    window.lookVideoGo = this.lookVideoGo;
  },

  // 页面挂载完成后调用
  mounted() {
    this.chinaMapFun();
  },

  methods: {
    /*中国地图 参考文章:https://echarts.apache.org/zh/option.html#series-map*/
    chinaMapFun(cityName) {
      // 先处理数据 很重要
      let mapData = [];
      for (let i = 0; i < this.totalMap.length; i++) {
        let obj = { value: 0, datas: [] }; // 数组里面是多个对象
        obj.name = this.totalMap[i].comname2; // names属性时数据所对应的地图区域的名称,例如 '广东','浙江';参考文章: https://echarts.apache.org/zh/option.html#series-map.data
        obj.value = this.totalMap[i].achieveRate; // 该区域的数据值 number类型
        obj.datas[0] = this.totalMap[i].preium;
        obj.datas[1] = this.totalMap[i].target;

        //注意: 此行是模拟下面的省份用的 实际开发中每个省份的数据是后端返回的
        if (this.totalMap[i].children) {
          obj.children = this.totalMap[i].children;
        }
        mapData.push(obj);
      }

      // 这里进行筛选传进来的省份数据 模拟黑龙江省份下面的和黑河市
      if (this.pyNameOfChinese) {
        mapData = mapData.map((item) => {
          if (item.children) {
            return { name: item.children.comname2, value: item.children.achieveRate, datas: [item.children.preium, item.children.target] };
          }
        });
      }
      console.log('当前渲染的地图:', this.pyName);
      console.log('当前渲染的数据2:', mapData);

      // 1,初始化节点
      // 检测是否已经存在echarts实例,如果不存在,则不再去初始化
      if (this.pyName === 'china') {
        this.myEchartsOfChina = this.$echarts.init(document.getElementById('chinaMap'));
      } else {
        this.myEchartsOfChina = this.$echarts.init(document.getElementById('provinceMap'));
      }

      // 显示加载动画
      this.myEchartsOfChina.showLoading();
      if (this.pyName === 'china') {
        let province = require('../../../node_modules/echarts/map/json/china.json');
        // 注册地图数据
        this.$echarts.registerMap(this.pyName, province);
      } else {
        // 单独引入其他省份的地图  注意:registerMap方法的第一参数要和引入的省名相同
        let province = require('../../../node_modules/echarts/map/json/province/' + this.pyName + '.json');
        this.$echarts.registerMap(this.pyName, province);
      }

      this.myEchartsOfChina.hideLoading();
      /* 参考文档: https://echarts.apache.org/zh/option.html#series-map */
      // 设置整个中国地图的参数
      let options = {
        title: {
          show: false, // 是否显示标题组件
          text: '中国地图', // 主标题文本
          subtext: '注:展示当月和当年累计情况',
          left: '3%',
          top: '85%',
        },
        tooltip: {
          enterable: true, // 允许点击触发tooltip中的事件
          show: true, // 是否显示提示框组件,包括提示框浮层和 axisPointer。 [ default: true ]
          trigger: 'item', // 触发类型。 [ default: 'item' ]
          triggerOn: 'click', // 只有点击时才触发 不设置默认随鼠标移动并显示
          formatter: (array, returnData, callback) => {
            if (isNaN(array.value)) {
              if (this.cityArr.includes(array.name)) {
                return '保费: 暂无' + '<br/>' + '目标: 暂无' + '<br/>' + '保费达成率: 暂无';
              } else {
                return '保费: 暂无' + '<br/>';
              }
            } else {
              let result =
                '<div style="display: flex"><div style="float:left;">保费: ' +
                array.data.datas[0] +
                '万元  <br/>  目标: ' +
                array.data.datas[1] +
                '万元  <br/>  保费达成率: ' +
                array.data.value +
                '%</div>' +
                '<div style="float:left; margin-left: 0.1rem;width: 0.05rem;height: 1rem; background: #D8D8D8;"></div>' +
                '<div style="float:left; margin-left: 0.1rem; "οnclick="lookVideoGo(\'' +
                array.name +
                '\')"><p style="height:2rem; line-height:2rem;">详 情 >&nbsp</p></div></div>';
              return result;
            }
          },
          backgroundColor: 'rgba(50,50,50,0.7)', // tooltip 背景颜色 rgba
          // 文本设置
          textStyle: {
            color: 'rgb(255,255,255)', // 值域文字颜色
            fontSize: 12,
          },
        },

        // 底部小导航图标
        visualMap: {
          // text: ['注:展示当月和当年累计情况'],
          orient: 'horizontal',
          itemWidth: 15,
          textGap: 2,
          // calculable: false,
          show: true,
          left: 'center',
          y: 'bottom',
          splitList: [
            { end: 0, label: '无', color: '#DDDDDD' },
            { end: 30, color: 'rgb(255,248,220)' },
            { start: 30, end: 60, label: '30-60', color: 'rgb(252,235,207)' },
            { start: 60, end: 90, label: '60-90', color: '#FFDAB9' },
            { start: 90, end: 100, label: '90-100', color: 'rgb(245,158,131)' }, // 245 158  131
            { start: 100, label: '>=100', color: 'rgb(40,183,163)' }, // 40 183 163
          ],
        },
        backgroundColor: '#fff', // 图表背景色

        series: [
          {
            name: '省份',
            type: 'map', // 指定是地图类型
            map: this.pyName, // 和上面registerMap中的第一个参数值一致才可以正常加载地图
            zoom: 1.2,
            roam: true, // 是否开启平游或缩放
            // geoIndex: 0,
            // aspectScale: 0.75,
            // scaleLimit: { // 滚轮缩放的极限控制
            //   min: 1,
            //   max: 2
            // },
            selectedMode: 'single', // 选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串,字符串取值可选'single'表示单选,或者'multiple'表示多选。
            itemStyle: {
              areaColor: '#FFFFFF',
              borderColor: '#0f0f0f',
              normal: { label: { show: true }, areaColor: '#DDDDDD' },
              emphasis: { label: { show: true } },
            },
            emphasis: {
              // 强调的样式,也就是鼠标移入后的样式==高亮状态下的多边形和标签样式。
              itemStyle: {
                areaColor: '#000000',
              },
            },
            label: {
              normal: {
                show: true, // 是否显示标签,这里显示的就是省份的名字。默认就是false
                textStyle: {
                  fontWeight: 300,
                  color: '#000000', // 值域文字颜色
                  fontSize: 7, // 文字的字体大 小
                },
              },
              emphasis: {
                show: false, // 在鼠标移入时,是否显示,如果不写,默认是显示的
              },
            },
            data: mapData, // 各省地图数据导入
          },
        ],
      };

      // 设置各个省份地图的参数
      let options1 = {
        title: {
          show: false, // 是否显示标题组件
          subtext: '注:展示当月和当年累计情况',
          left: '3%',
          top: '85%',
        },
        tooltip: {
          enterable: true, // 允许点击触发tooltip中的事件
          show: true, // 是否显示提示框组件,包括提示框浮层和 axisPointer。 [ default: true ]
          trigger: 'item', // 触发类型。 [ default: 'item' ]
          backgroundColor: 'rgba(50,50,50,0.7)', // tooltip 背景颜色 rgba
          // 文本设置
          textStyle: {
            color: 'rgb(255,255,255)', // 值域文字颜色
            fontSize: 12,
          },
          formatter: (array, returnData, callback) => {
            console.log(array);
            if (isNaN(array.value)) {
              if (this.cityArr.includes(array.name)) {
                return '保费: 暂无' + '<br/>' + '目标: 暂无' + '<br/>' + '保费达成率: 暂无';
              } else {
                return '保费: 暂无' + '<br/>';
              }
            } else {
              let result =
                '<div style="display: flex"><div style="float:left;">保费: ' +
                array.data.datas[0] +
                '万元  <br/>  目标: ' +
                array.data.datas[1] +
                '万元  <br/>  保费达成率: ' +
                array.data.value +
                '%</div>' +
                '<div style="float:left; margin-left: 0.1rem;width: 0.05rem;height: 1rem; background: #D8D8D8;"></div>' +
                '<div style="float:left; margin-left: 0.1rem; "οnclick="lookVideoGo(\'' +
                array.name ;
              return result;
            }
          },
        },
        // 底部小导航图标
        visualMap: {
          // text: ['注:展示当月和当年累计情况'],
          orient: 'horizontal',
          itemWidth: 15,
          textGap: 2,
          // calculable: false,
          show: true,
          left: 'center',
          y: 'bottom',
          splitList: [
            { start: 6, label: '>=7', color: '#FFDAB9' },
            { start: 3, end: 6, label: '4-6', color: 'rgb(245,158,131)' }, // 245 158  131
            { start: 1, end: 3, label: '1-3', color: 'rgb(40,183,163)' }, // 40 183 163
            { end: 0, label: '无', color: '#DDDDDD' },
          ],
        },
        series: [
          {
            name: '省份', // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。见上:可以在tooltip中获取到
            type: 'map', // 指定是地图类型
            map: this.pyName, // 和上面registerMap中的一直
            zoom: 1.2,
            selectedMode: 'single', // 选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串,字符串取值可选'single'表示单选,或者'multiple'表示多选。
            itemStyle: {
              areaColor: '#FFFFFF',
              borderColor: '#0f0f0f',
              normal: { label: { show: true }, areaColor: '#DDDDDD' },
              emphasis: { label: { show: true } },
            },
            emphasis: {
              // 强调的样式,也就是鼠标移入后的样式==高亮状态下的多边形和标签样式。
              itemStyle: {
                areaColor: '#000000',
              },
            },
            label: {
              normal: {
                show: true, // 是否显示标签,这里显示的就是省份的名字。默认就是false
                textStyle: {
                  fontWeight: 300,
                  color: '#000000', // 值域文字颜色
                  fontSize: 7, // 文字的字体大 小
                },
              },
              emphasis: {
                show: false, // 在鼠标移入时,是否显示,如果不写,默认是显示的
              },
            },
            // 数据对不上 省下面的地区对不上
            data: mapData,
          },
        ],
      };
      // 判断是否是各个省份
      if (this.pyName === 'china') {
        this.myEchartsOfChina.setOption(options);
      } else {
        this.myEchartsOfChina.setOption(options1);
      }
    },

    /* 传过来的参数是省份名 */
    lookVideoGo(cityName) {
      // 保留一份中文
      this.pyNameOfChinese = cityName;
      // this.myEchartsOfChina.clear(); // 清空当前实例,会移除实例中所有的组件和图表。
      this.myEchartsOfChina.dispose(); // 销毁后实例无法在使用

      // 获取城市拼音
      for (var i = 0, len = this.cityArr[0].length; i < len; i++) {
        if (cityName === this.cityArr[0][i]) {
          // 获取得城市拼音
          this.pyName = this.cityArr[1][i];
          // 使用nextTick Api 防止echarts初始化时避免节点不存在的报错
          this.$nextTick(() => {
            this.chinaMapFun(this.pyName);
          });
          break;
        } else {
          console.warn('没有找到此城市的拼音');
        }
      }
    },
    /* 点击返回全国 */
    returnCh() {
      // this.myEchartsOfChina.clear(); // 清空当前实例,会移除实例中所有的组件和图表。
      this.myEchartsOfChina.dispose(); // 销毁后实例 这里使用dispose防止残留
      this.pyName = 'china';
      this.pyNameOfChinese = '';

      // 使用nextTick Api 防止echarts初始化时避免节点不存在的报错
      this.$nextTick(() => {
        this.chinaMapFun();
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.container {
  width: 90%;
  // margin: 0 auto;
  border: 1px solid balck;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  flex-direction: row;
  flex-wrap: wrap;
  #chinaMap,#provinceMap {
    width: 400px;
    height: 400px;
    margin-right: 30px;
    margin-top: 20px;
  }
  .china{
  }
  // 返回箭头
  .returnImg{
    cursor: pointer;
    display: block;
    width: 25px;
  }
}
</style>

5,遇到的问题

5,1 渲染中国地图时警告地图不存在:

在这里插入图片描述
原因:series里面的map属性没有和上面registerMap中的第一个参数值保持一致

正确写法:

在这里插入图片描述

5,2 点击tooltip提示框中的详情 生产省份地图失败,警告如下:

在这里插入图片描述
原因:没有拿到dom节点,需要在 this.$nextTick API里面获取dom节点

正确写法:

 		// 获取城市拼音
      for (var i = 0, len = this.cityArr[0].length; i < len; i++) {
        if (cityName === this.cityArr[0][i]) {
          // 获取得城市拼音
          this.pyName = this.cityArr[1][i];
          // 使用nextTick Api 防止echarts初始化时避免节点不存在的报错
          this.$nextTick(() => {
            this.chinaMapFun(this.pyName);
          });
          break;
        } else {
          console.warn('没有找到此城市的拼音');
        }
      }

6,用到的模拟数据

mapData.js

// 定义全国省份的数组
export const cityArr = [
  [
    '上海',
    '河北',
    '山西',
    '内蒙古',
    '辽宁',
    '吉林',
    '黑龙江',
    '江苏',
    '浙江',
    '安徽',
    '福建',
    '江西',
    '山东',
    '河南',
    '湖北',
    '湖南',
    '广东',
    '广西',
    '海南',
    '四川',
    '贵州',
    '云南',
    '西藏',
    '陕西',
    '甘肃',
    '青海',
    '宁夏',
    '新疆',
    '北京',
    '天津',
    '重庆',
    '香港',
    '澳门',
    '台湾',
  ],
  [
    'shanghai',
    'hebei',
    'shanxi',
    'neimenggu',
    'liaoning',
    'jilin',
    'heilongjiang',
    'jiangsu',
    'zhejiang',
    'anhui',
    'fujian',
    'jiangxi',
    'shandong',
    'henan',
    'hubei',
    'hunan',
    'guangdong',
    'guangxi',
    'hainan',
    'sichuan',
    'guizhou',
    'yunnan',
    'xizang',
    'shanxi1',
    'gansu',
    'qinghai',
    'ningxia',
    'xinjiang',
    'beijing',
    'tianjin',
    'chongqing',
    'xianggang',
    'aomen',
    'taiwan',
  ],
];

// 全省保费信息
export const totalMap = [
  {
    achieveRate: 104.1,
    comname2: '山东',
    preium: 22855,
    target: 21960,
  },
  {
    achieveRate: 154,
    comname2: '新疆',
    preium: 893,
    target: 580,
  },
  {
    achieveRate: 128.6,
    comname2: '青海',
    preium: 935,
    target: 727,
  },
  {
    achieveRate: 84.7,
    comname2: '四川',
    preium: 7357,
    target: 8687,
  },
  {
    achieveRate: 79.4,
    comname2: '陕西',
    preium: 5102,
    target: 6427,
  },
  {
    achieveRate: 84.6,
    comname2: '内蒙古',
    preium: 10448,
    target: 12357,
  },
  {
    achieveRate: 0,
    comname2: '无锡',
    preium: 21,
    target: 0,
  },
  {
    achieveRate: 74.8,
    comname2: '甘肃',
    preium: 5468,
    target: 7308,
  },
  {
    achieveRate: 93.4,
    comname2: '海南',
    preium: 3746,
    target: 4009,
  },
  {
    achieveRate: 71.4,
    comname2: '湖北',
    preium: 2870,
    target: 4017,
  },
  {
    achieveRate: 39.4,
    comname2: '厦门',
    preium: 188,
    target: 477,
  },
  {
    achieveRate: 63.3,
    comname2: '宁夏',
    preium: 1292,
    target: 2042,
  },
  {
    achieveRate: 135.2,
    comname2: '江西',
    preium: 5616,
    target: 4155,
  },
  {
    achieveRate: 0,
    comname2: '东莞',
    preium: 0,
    target: 0,
  },
  {
    achieveRate: 95,
    comname2: '贵州',
    preium: 6931,
    target: 7298,
  },
  {
    achieveRate: 39.1,
    comname2: '江苏',
    preium: 2303,
    target: 5893,
  },
  {
    achieveRate: 0,
    comname2: '上海',
    preium: 6,
    target: 0,
  },
  {
    achieveRate: 85.7,
    comname2: '天津',
    preium: 1672,
    target: 1950,
  },
  {
    achieveRate: 60.1,
    comname2: '广东',
    preium: 3260,
    target: 5428,
  },
  {
    achieveRate: 58.6,
    comname2: '青岛',
    preium: 1979,
    target: 3380,
  },
  {
    achieveRate: 67.7,
    comname2: '吉林',
    preium: 12375,
    target: 18288,
  },
  {
    achieveRate: 45.3,
    comname2: '湖南',
    preium: 4527,
    target: 9995,
  },
  {
    achieveRate: 52.2,
    comname2: '北京',
    preium: 6,
    target: 12,
  },
  {
    achieveRate: 86.1,
    comname2: '河南',
    preium: 5733,
    target: 6659,
  },
  {
    achieveRate: 71.6,
    comname2: '安徽',
    preium: 3201,
    target: 4471,
  },
  {
    achieveRate: 50.6,
    comname2: '黑龙江',
    preium: 3127,
    target: 6186,
    children:{
        comname2:'黑河市',
        preium: 3127,
        target: 6186,
        achieveRate: 50.6,
    }
  },
  {
    achieveRate: 0,
    comname2: '苏州',
    preium: 193,
    target: 0,
  },
  {
    achieveRate: 69.9,
    comname2: '山西',
    preium: 2051,
    target: 2935,
  },
  {
    achieveRate: 77.6,
    comname2: '福建',
    preium: 4371,
    target: 5632,
  },
  {
    achieveRate: 96.5,
    comname2: '浙江',
    preium: 9650,
    target: 10000,
  },
  {
    achieveRate: 73.5,
    comname2: '辽宁',
    preium: 8753,
    target: 11915,
  },
  {
    achieveRate: 78.1,
    comname2: '重庆',
    preium: 2587,
    target: 3313,
  },
  {
    achieveRate: -0.5,
    comname2: '深圳',
    preium: 0,
    target: 24,
  },
  {
    achieveRate: 112.5,
    comname2: '宁波',
    preium: 1233,
    target: 1096,
  },
  {
    achieveRate: 122.7,
    comname2: '云南',
    preium: 5477,
    target: 4462,
  },
  {
    achieveRate: 104.9,
    comname2: '河北',
    preium: 13750,
    target: 13107,
  },
  {
    achieveRate: 66.4,
    comname2: '广西',
    preium: 1134,
    target: 1707,
  },
];

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

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

相关文章

嵌入式开发--Altium技巧:原理图设置

Altium的默认设置&#xff0c;有一些是很不合理的选项&#xff0c;强烈建议大家修改。 在工程上点右键&#xff0c;并在弹出的菜单上选择最后一项&#xff1a;Project Options&#xff0c;即项目设置 弹出如下界面&#xff0c;如果操作不当&#xff0c;设置错了&#xff0c;可…

STM32 bit-band位带操作

在51单片机中&#xff0c;我们可以通过sbit命令来操作存储器中的位&#xff0c;在STM32中&#xff0c;我们同样可以操作存储器中特定的位。 1、为何使用位带操作&#xff1f; 总结来说&#xff0c;一个是因为访问速度快&#xff0c;另一个是因为安全。 如果在裸机开发中&…

【学习笔记69】函数的柯里化

一、认识函数的柯里化 将一个接受多个参数的函数&#xff0c;更改为需要调用多次, 每次只传一个参数的函数利用了闭包, 延长了 外部函数的参数使用时间&#xff08;一&#xff09;基础版 function sum (a, b) {console.log(a b)}sum(10, 20);sum(10, 30);sum(10, 40); &#x…

2022卡塔尔世界杯小组赛出线形势分析指南——德国队会被西班牙做掉吗?

早点关注我&#xff0c;精彩不错过&#xff01;&#xff08;德国队出现形势分析在文末&#xff0c;可直接跳转。&#xff09;北京时间今天晚上11点整&#xff0c;如火如荼的卡塔尔世界杯就将展开小组赛第三轮比赛的争夺&#xff0c;8个小组轮番同时进行最后一轮较量&#xff0c…

2022年全网最全AI绘画产品整理(一共23款,免费的绘画次数用到你手软)

1、飞链云版图 【免费】 扫码或搜索微信小程序&#xff1a;飞链云版图 注册即赠送100次AI绘画次数&#xff0c;每天分享可以免费获取到110次AI绘画次数&#xff1b; 完全够普通人到日常绘画需求&#xff1b;如果你有大量的绘画需求&#xff08;月绘画次数过万&#xff09;&am…

Win10升级Win11必备的5款免费软件

目前win7渐渐退出视野&#xff0c;大部分人都开始使用win10了&#xff0c;甚至win11都开始渐渐进入视野了。 1.文件预览工具——Seer 以前我们在预览文件的时候&#xff0c;需要通过双击打开才能查看内容&#xff0c;如果文件过多&#xff0c;一个个点开就太麻烦了。Seer以前…

Flutter 应用程序更新

Flutter 应用程序更新 原文 https://medium.com/flutter-community/in-app-update-the-flutter-way-2f25e4a02c02 前言 当您推出应用程序的新版本时&#xff0c;您希望您的用户了解它。无论是因为您修复了一个关键的 bug&#xff0c;添加了一个新特性&#xff0c;还是仅仅因为应…

Python基础(八):循环深入讲解

文章目录 循环深入讲解 一、循环简介 1、循环的作用 2、循环的分类 二、while的语法 1、快速体验 三、while的应用 1、应用一&#xff1a;计算1-100累加和 2、应用二&#xff1a;计算1-100偶数累加和 四、break和continue 1、理解 五、while循环嵌套 1、应用场景 …

YOLO V3 详解

YOLO V3 论文链接&#xff1a;YOLOv3: An Incremental Improvement 主要改进 Anchor: 9个大小的anchor&#xff0c;每个尺度分配3个anchor。Backbone改为Darknet-53, 引入了残差模块。引入了FPN&#xff0c;可以进行多个尺度的训练&#xff0c;同时对于小目标的检测有了一定…

【微服务】RestClient操作文档

为了与索引库操作分离&#xff0c;我们再增加一个测试类&#xff0c;做两件事情&#xff1a; 初始化RestHighLevelClient我们的酒店数据在数据库&#xff0c;需要利用IHotelService去查询&#xff0c;所以注入这个接口 package cn.itcast.hotel;import cn.itcast.hotel.pojo.…

【车载开发系列】UDS诊断---电控单元复位 ($0x11)

【车载开发系列】UDS诊断—电控单元复位&#xff08;$0x11&#xff09; UDS诊断---电控单元复位&#xff08;$0x11&#xff09;【车载开发系列】UDS诊断---电控单元复位&#xff08;$0x11&#xff09;一.概念定义二.应用场景三.报文格式1&#xff09;请求2&#xff09;肯定响应…

js文字提示层案例分析

前言 &#x1f496;js文字提示层在项目中比较常见&#xff0c;今天初次学习记录一下 功能介绍 在一段文本中鼠标触及红色字体&#xff0c;下方显示一个文字提示信息&#xff0c;鼠标离开红色字体区域&#xff0c;文字提示层消失。 知识点 onmouseover&#xff1a;鼠标指针移…

平衡搜索树——B-树小记

文章目录B- 树系列定义插入规则代码B-树结点定义查找key在结点哪个子树插入分裂B- 树系列 定义 B-树是一棵多叉 平衡 搜索树(不是二叉树&#xff0c;B-树中每个结点中可以有多个key&#xff0c;也有多个孩子) B-树中每个结点在实现时人为规定一个key的上限(KEY_LIMIT 4) B-…

Mysql语法五:idea连接数据库和jdbc

目录 1.连接数据库 1.1.下载驱动包 1.2&#xff1a;连接数据库 2.jdbc编程 2.1&#xff1a;何为jdbc 2.2&#xff1a;jdbc的使用。 2.2.1&#xff1a;直接插入操作 2.2.2&#xff1a;利用&#xff1f;进行插入 2.2.3&#xff1a;修改操作 2.2.4&#xff1a;删除操作 …

算法基础:动态规划

目录 动态规划之禅 多种纬度解决Fibonacci 数列 什么是Fibonacci数列 朴素递归方案 朴素递归的问题 Fib自上而下、备忘录方案 Fib自下而上法 动态规划之禅 动态规划是算法基础部分中最有趣的一个了&#xff0c;我想了很多天&#xff0c;怎么用很短的一些话把动态规划像之…

onnx删除无用属性

这里写自定义目录标题在推理onnx模型时&#xff0c;报了一个错&#xff0c;如下&#xff1a;InvalidGraph: [ONNXRuntimeError] : 10 : INVALID_GRAPH : This is an invalid model. In Node, ("Conv_0", Conv, "", -1) : ("x": tensor(float),&q…

DPVS时间轮移植

DPDK自带的定时器采用跳表实现&#xff0c;时间复杂度是O(logn)&#xff0c;当有大量事件要定时触发时&#xff0c;比如会话session老化&#xff0c;效率并不高。因此DPVS采用了O(1)复杂度的时间轮。0. 概述 a. 添加定时器事件的核心是 static int __dpvs_timer_sched(struct…

为何 SPARK 在应用 GPU 后表现更出色

什么是 APACHE SPARK&#xff1f; 伴随数据的巨量增长&#xff0c;Apache Spark 已成为分布式横向扩展数据处理的热门框架之一&#xff0c;可以在本地和云端数以百万计的服务器上运行。 Apache Spark 是应用于大型数据处理的快速通用分析引擎&#xff0c;可在 YARN、Apache Mes…

程序员还在为变量取名苦恼,那是因为你不知道,这个变量命名神器

作为程序员&#xff0c;变量命名应该是我们编程的开端&#xff0c;也是我们每天都必须需要做的事情。变量命名规范的重要性&#xff0c;相信大家都知道非常重要&#xff0c;良好的代码风格&#xff0c;带来好处有&#xff1a; 1、具有良好的可读性&#xff1b; 2、维护代码时…

【独立篇】React UI组件库

文章目录1、React UI组件库1.1、material-ui&#xff08;国外&#xff09;1.2、ant-design&#xff08;国内蚂蚁金服-antd&#xff09;2、AntD的简单使用2.1、CODE2.2、Result1、React UI组件库 1.1、material-ui&#xff08;国外&#xff09; 官网: http://www.material-ui.…