使用echarts+echarts-gl绘制3d地图,实现地图轮播效果

news2024/11/26 21:19:59

记录一下大屏开发中使用到的echarts-gl
大屏的页面根据需求前前后后改了几个版本了,地图的样式也改了又改
这里记录一下,因为echarts属性用到的比较多也比较杂,防止以后需要用到忘记了

目录

初始效果

效果图:

适应大屏风格的发光地图效果,用了两个图层实现叠加背景图片实现:​编辑

安装命令

创建一个div用来挂载地图

完整代码:

总结


初始效果

效果图:
 

适应大屏风格的发光地图效果,用了两个图层实现叠加背景图片实现:

 

安装命令

首先在项目中安装echarts与echarts gl(echers gl用于3d)
安装命令

npm install echarts --save //echarts安装命令
npm install echarts-gl //echarts-gl安装命令

安装完成后在package.json中查看有没有安装成功
安装成功后在main.js中引入

import echartsGL from 'echarts-gl' // 引入echarts
Vue.prototype.$echartsGL = echartsGL // 引入组件(将echarts注册为全局)

使用 http://datav.aliyun.com/portal/school/atlas/area_selector这个工具获取要显示的地图数据
存放在放静态资源的地方,创建一个json文件
这些没问题后,就可以在组件中进行操作了

<template>
  <div id="hello">
  </div>
</template>

创建一个div用来挂载地图

在script中引入存放地图数据的json文件

import * as echarts from 'echarts';
import geoJson from "../assets/mapJSon/rkz.json"
import coordtransform from 'coordtransform'
export default {
  name: 'MapDemo',
  data() {
    return {
      dataIndex: 0,
      mTime:null
    }
  },
  props: {
    msg: String
  },
  methods: {
    convertCoord(coord) {
      const gcj02 = coordtransform.wgs84togcj02(coord[0], coord[1])
      const bd09 = coordtransform.gcj02tobd09(gcj02[0], gcj02[1])
      return bd09
    },


  },
  mounted() {
    // 基于准备好的dom,初始化echarts实例  




    var myChart = echarts.init(document.getElementById('hello'));

    var scatterData = [
      { name: "亚东县", value: "2945米" },
      { name: "仁布县", value: "3950米" },
      { name: "谢通门县", value: "4008米" },
      { name: "萨迦县", value: "4330米" },
      { name: "拉孜县", value: "4012米" },
      { name: "昂仁县", value: "4320米" },
      { name: "江孜县", value: "约4000米" },
      { name: "白朗县", value: "平均4200米" },
      { name: "聂拉木县", value: "4300米" },
      { name: "昂仁县", value: "4320米" },
      { name: "岗巴县", value: "4700米以上" },
      { name: "定结县", value: "2500-4700米" },
      { name: "定日县", value: "平均5000米。" },
      { name: "吉隆县", value: "4200米" },
      { name: "萨嘎县", value: "4487米" },
      { name: "仲巴县", value: "4772米" },
      { name: "南木林县", value: "3790米到4952米" },
      { name: "桑珠孜区", value: "3840米" },
      { name: "康马县", value: "4200-4600米" }

    ];

    // 绘制图表
    let option = {
      // backgroundColor: "#fff",
      tooltip: {
        // 鼠标是否可以进入悬浮框
        show: true,
        confine: true,
        enterable: true,
        // 触发方式 mousemove, click, none, mousemove|click
        triggerOn: 'mousemove',
        // item 图形触发, axis 坐标轴触发, none 不触发
        trigger: 'item',
        // 浮层隐藏的延迟
        hideDelay: 100,
        // 背景色
        backgroundColor: 'rgba(110, 110, 110,.5)',
        formatter: function (params) {
          const altitudeMap = {
            '亚东县': '2945米',
            '仁布县': '3950米',
            '谢通门县': '4008米',
            '萨迦县': '4330米',
            '拉孜县': '4012米',
            '昂仁县': '4320米',
            '江孜县': '约4000米',
            '白朗县': '平均4200米',
            '聂拉木县': '4300米',
            '岗巴县': '4700米以上',
            '定结县': '2500-4700米',
            '定日县': '平均5000米',
            '吉隆县': '4200米',
            '萨嘎县': '4487米',
            '仲巴县': '4772米',
            '南木林县': '3790米到4952米',
            '桑珠孜区': '3840米',
            '康马县': '4200-4600米',
          };

          return `
            <div style="background-color: #ffffff;box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);padding: 20px;border-radius: 5px;font-size: 36px;color: #333;z-index: 1000;border-color:#333">
              <div style="font-weight: bold;margin-bottom: 30px;">${params.name}</div>
              <div>海拔:${altitudeMap[params.name] ? altitudeMap[params.name] : '未知'}</div>
            </div>
          `
        }
      },
      geo3D: {
        show: true,
        map: "centerMap",
        left: "4%",   //偏移量调整
        top: "5%",  //偏移量调整
        roam: true,
        zoom: 10,
        regionHeight: 5,
        label: {
          show: true,
          distance: 200,
          borderRadius: 0,
          distanca: 0,
          fontSize: 30,
          color: "#ffffff", // 地图初始化区域字体颜色
          borderWidth: 0,
          borderColor: '#ffffff'
        },
        itemStyle: {
          // 三维地理坐标系组件 中三维图形的视觉属性,包括颜色,透明度,描边等。
          color: "#271f71", // 地图板块的颜色
          fontSize: 30,
          opacity: 1, // 图形的不透明度 [ default: 1 ]
          borderWidth: 10, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域   [ default: 0 ]
          borderColor: "#6a63f4", // 图形描边的颜色。[ default: #333 ]
        },
        emphasis: {
          label: {
            show: true,
            color: "#000000", //悬浮字体颜色
            fontSize: 38,
          },
          itemStyle: {
            color: "#e2e1e1",
            opacity: 1,
          },
        },
        // shading: "color",
        light: {
          // 光照阴影
          main: {
            color: "#FFFFFF", // 光照颜色
            intensity: 2, // 光照强度
            shadowQuality: "light", // 阴影亮度
            shadow: true, // 是否显示阴影
            alpha: 50,
            beta: 10,
          },
        },
        regions: [],
        viewControl: {
          "projection": "perspective",
          "autoRotate": false,
          "autoRotateAfterStill": 3,
          "distance": 100.1931248935421,  //默认比例
          "alpha": 83.592048936336816,
          "beta": 0.48683006219769,
          "minAlpha": 5,
          "maxAlpha": 40,
          "minBeta": -1036800,
          "maxBeta": 1036800,
          "animation": true,
          "animationDurationUpdate": 1000,
          "animationEasingUpdate": "cubicInOut",
          "orthographicSize": 60,
          "autoRotateDirection": "cw",
          "autoRotateSpeed": 10,
          "damping": 0.8,
          "rotateSensitivity": 1,
          "zoomSensitivity": 1,
          "panSensitivity": 1,
          "panMouseButton": "middle",
          "rotateMouseButton": "left",
          "minDistance": 40,
          "maxDistance": 400,
          "maxOrthographicSize": 400,
          "minOrthographicSize": 20,
          "center": [
            0,
            0,
            0, 0
          ]
        },
      },
      series: [
        {
          type: "map3D", // 加载series数据
          seriesIndex: 0, // 第一个系列

          map: "centerMap",
          regionHeight: 0,
          boxHeight: 500,
          // left: 0,
          left: "4%",   //偏移量调整
          top: "5%",  //偏移量调整
          itemStyle: {
            // 三维地理坐标系组件 中三维图形的视觉属性,包括颜色,透明度,描边等。
            color: "rgba(37, 37, 38,1)", // 地图板块的颜色
            opacity: 0, // 图形的不透明度 [ default: 1 ]
            borderWidth: 0, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域   [ default: 0 ]
            borderColor: "#69E8F5", // 图形描边的颜色。[ default: #333 ]
          },

          label: {
            show: true,
            color: "#FFFFFF",
          },
          regions: [],
          zlevel: 5,
          viewControl: {
            "projection": "perspective",
            "autoRotate": false,
            "autoRotateAfterStill": 3,
            "distance": 100.1931248935421,  //默认比例
            "alpha": 83.592048936336816,
            "beta": 0.48683006219769,
            "minAlpha": 5,
            "maxAlpha": 40,
            "minBeta": -1036800,
            "maxBeta": 1036800,
            "animation": true,
            "animationDurationUpdate": 1000,
            "animationEasingUpdate": "cubicInOut",
            "orthographicSize": 60,
            "autoRotateDirection": "cw",
            "autoRotateSpeed": 10,
            "damping": 0.8,
            "rotateSensitivity": 1,
            "zoomSensitivity": 1,
            "panSensitivity": 1,
            "panMouseButton": "middle",
            "rotateMouseButton": "left",
            "minDistance": 40,
            "maxDistance": 400,
            "maxOrthographicSize": 400,
            "minOrthographicSize": 20,
            "center": [
              0,
              -5,
              0,
            ]
          },
        },
        {
          type: "scatter3D",

          coordinateSystem: "geo3D",
          data: [],
          symbol: "pin",
          symbolSize: 20,
          animation: true,
          animationDurationUpdate: 500,
          geo3DIndex: 0,
          silent: false,
          itemStyle: {
            opacity: 1,
            width: 1,
          },
          shading: "lambert",
          label: {
            show: false,
            position: "right",
            distance: 200, // 距离图形元素的距离
            color: "#ff0000",
            backgroundColor: "rgba(255, 255, 255, 0)",
            rich: {
              get: {
                color: "#00E3FF",
                lineHeight: 12,
              },
              set: {
                color: "#FFF100",
                lineHeight: 12,
              },
              date11: {
                color: "#FFFFFF",
                lineHeight: 12,
              },
            },
            zlevel: 6,
          },
          emphasis: {
            itemStyle: {
              color: "#FFF200",
            },
            label: {
              show: false,
            },
          },
          zlevel: 6,
        },
      ],
    };
    // myChart.showLoading();

    echarts.registerMap('centerMap', geoJson);
    // myChart.hideLoading();

    var mapFeatures = echarts.getMap("centerMap").geoJson.features;
    var geoCoordMap = {};
    mapFeatures.forEach(function (v) {
      // v.properties.center = _this.convertCoord(v.properties.center)
      // 地区名称
      var name = v.properties.name;
      // 地区经纬度
      geoCoordMap[name] = v.properties.center;


    });
    let currentIdx = -1;
    function highlightNext() {
      if (currentIdx++ >= 0) {
        // 防止下标增加到超过区域数组长度
        currentIdx %= mapFeatures.length;
      }
      highlightRegion(currentIdx) // 此处的currentIdx经过if判断,已经+1了
      setTimeout(highlightNext, 5000);
    }

    function highlightRegion(index) { // 高亮地图区域,改变对应的散点样式
      let regionName = mapFeatures[index].properties.name; // 高亮的区名

      option.geo3D.regions = [ // 高亮3D地图对应的区块
        {
          name: regionName,
          label: {
            show: true,
            color: "##000000",
          },
          itemStyle: {
            color: "#ffffff",
            opacity: 1,
          }
        }
      ];

      // 当前高亮区域有散点,需删除stroke动效中的该条数据并在fill动效中增加该条数据
      option.series[0].data = scatterData.filter(item => item.name !== regionName); // stroke散点数据
      option.series[1].data = scatterData.filter(item => item.name === regionName); // fill散点数据

      myChart.setOption(option);
      myChart.dispatchAction({ // 触发散点高亮事件,改变标签样式
        type: 'showTip',
        seriesIndex: 1, // series中的第二个图层(fill散点图层)
        dataIndex: 0 // 高亮第一条数据,由于fill散点图层只有一条数据,这里可以不指定
      });
      myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: 0
      });
      // 显示弹框
      myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: 0
      });
      // myChart.on('mouseover', () => {
      //   console.log('mouseover')
      //   // 停止定时器,清除之前的高亮
      //   clearInterval(this.mTime)
      //   this.mTime = ''
      //   myChart.dispatchAction({
      //     type: 'downplay',
      //     seriesIndex: 0,
      //     dataIndex: this.dataIndex
      //   })
      // })
    }


    myChart.setOption(option);
    highlightNext()


    // this.mapActive(myChart)


  }
}

这样就生成了一个3d地图,地图轮播效果

 

完整代码:

<template>
  <div id="hello">
  </div>
</template>


<script>
import * as echarts from 'echarts';
import geoJson from "../assets/mapJSon/rkz.json"
import coordtransform from 'coordtransform'
export default {
  name: 'MapDemo',
  data() {
    return {
      dataIndex: 0,
      mTime:null
    }
  },
  props: {
    msg: String
  },
  methods: {
    convertCoord(coord) {
      const gcj02 = coordtransform.wgs84togcj02(coord[0], coord[1])
      const bd09 = coordtransform.gcj02tobd09(gcj02[0], gcj02[1])
      return bd09
    },


  },
  mounted() {
    // 基于准备好的dom,初始化echarts实例  




    var myChart = echarts.init(document.getElementById('hello'));

    var scatterData = [
      { name: "亚东县", value: "2945米" },
      { name: "仁布县", value: "3950米" },
      { name: "谢通门县", value: "4008米" },
      { name: "萨迦县", value: "4330米" },
      { name: "拉孜县", value: "4012米" },
      { name: "昂仁县", value: "4320米" },
      { name: "江孜县", value: "约4000米" },
      { name: "白朗县", value: "平均4200米" },
      { name: "聂拉木县", value: "4300米" },
      { name: "昂仁县", value: "4320米" },
      { name: "岗巴县", value: "4700米以上" },
      { name: "定结县", value: "2500-4700米" },
      { name: "定日县", value: "平均5000米。" },
      { name: "吉隆县", value: "4200米" },
      { name: "萨嘎县", value: "4487米" },
      { name: "仲巴县", value: "4772米" },
      { name: "南木林县", value: "3790米到4952米" },
      { name: "桑珠孜区", value: "3840米" },
      { name: "康马县", value: "4200-4600米" }

    ];

    // 绘制图表
    let option = {
      // backgroundColor: "#fff",
      tooltip: {
        // 鼠标是否可以进入悬浮框
        show: true,
        confine: true,
        enterable: true,
        // 触发方式 mousemove, click, none, mousemove|click
        triggerOn: 'mousemove',
        // item 图形触发, axis 坐标轴触发, none 不触发
        trigger: 'item',
        // 浮层隐藏的延迟
        hideDelay: 100,
        // 背景色
        backgroundColor: 'rgba(110, 110, 110,.5)',
        formatter: function (params) {
          const altitudeMap = {
            '亚东县': '2945米',
            '仁布县': '3950米',
            '谢通门县': '4008米',
            '萨迦县': '4330米',
            '拉孜县': '4012米',
            '昂仁县': '4320米',
            '江孜县': '约4000米',
            '白朗县': '平均4200米',
            '聂拉木县': '4300米',
            '岗巴县': '4700米以上',
            '定结县': '2500-4700米',
            '定日县': '平均5000米',
            '吉隆县': '4200米',
            '萨嘎县': '4487米',
            '仲巴县': '4772米',
            '南木林县': '3790米到4952米',
            '桑珠孜区': '3840米',
            '康马县': '4200-4600米',
          };

          return `
            <div style="background-color: #ffffff;box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);padding: 20px;border-radius: 5px;font-size: 36px;color: #333;z-index: 1000;border-color:#333">
              <div style="font-weight: bold;margin-bottom: 30px;">${params.name}</div>
              <div>海拔:${altitudeMap[params.name] ? altitudeMap[params.name] : '未知'}</div>
            </div>
          `
        }
      },
      geo3D: {
        show: true,
        map: "centerMap",
        left: "4%",   //偏移量调整
        top: "5%",  //偏移量调整
        roam: true,
        zoom: 10,
        regionHeight: 5,
        label: {
          show: true,
          distance: 200,
          borderRadius: 0,
          distanca: 0,
          fontSize: 30,
          color: "#ffffff", // 地图初始化区域字体颜色
          borderWidth: 0,
          borderColor: '#ffffff'
        },
        itemStyle: {
          // 三维地理坐标系组件 中三维图形的视觉属性,包括颜色,透明度,描边等。
          color: "#271f71", // 地图板块的颜色
          fontSize: 30,
          opacity: 1, // 图形的不透明度 [ default: 1 ]
          borderWidth: 10, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域   [ default: 0 ]
          borderColor: "#6a63f4", // 图形描边的颜色。[ default: #333 ]
        },
        emphasis: {
          label: {
            show: true,
            color: "#000000", //悬浮字体颜色
            fontSize: 38,
          },
          itemStyle: {
            color: "#e2e1e1",
            opacity: 1,
          },
        },
        // shading: "color",
        light: {
          // 光照阴影
          main: {
            color: "#FFFFFF", // 光照颜色
            intensity: 2, // 光照强度
            shadowQuality: "light", // 阴影亮度
            shadow: true, // 是否显示阴影
            alpha: 50,
            beta: 10,
          },
        },
        regions: [],
        viewControl: {
          "projection": "perspective",
          "autoRotate": false,
          "autoRotateAfterStill": 3,
          "distance": 100.1931248935421,  //默认比例
          "alpha": 83.592048936336816,
          "beta": 0.48683006219769,
          "minAlpha": 5,
          "maxAlpha": 40,
          "minBeta": -1036800,
          "maxBeta": 1036800,
          "animation": true,
          "animationDurationUpdate": 1000,
          "animationEasingUpdate": "cubicInOut",
          "orthographicSize": 60,
          "autoRotateDirection": "cw",
          "autoRotateSpeed": 10,
          "damping": 0.8,
          "rotateSensitivity": 1,
          "zoomSensitivity": 1,
          "panSensitivity": 1,
          "panMouseButton": "middle",
          "rotateMouseButton": "left",
          "minDistance": 40,
          "maxDistance": 400,
          "maxOrthographicSize": 400,
          "minOrthographicSize": 20,
          "center": [
            0,
            0,
            0, 0
          ]
        },
      },
      series: [
        {
          type: "map3D", // 加载series数据
          seriesIndex: 0, // 第一个系列

          map: "centerMap",
          regionHeight: 0,
          boxHeight: 500,
          // left: 0,
          left: "4%",   //偏移量调整
          top: "5%",  //偏移量调整
          itemStyle: {
            // 三维地理坐标系组件 中三维图形的视觉属性,包括颜色,透明度,描边等。
            color: "rgba(37, 37, 38,1)", // 地图板块的颜色
            opacity: 0, // 图形的不透明度 [ default: 1 ]
            borderWidth: 0, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域   [ default: 0 ]
            borderColor: "#69E8F5", // 图形描边的颜色。[ default: #333 ]
          },

          label: {
            show: true,
            color: "#FFFFFF",
          },
          regions: [],
          zlevel: 5,
          viewControl: {
            "projection": "perspective",
            "autoRotate": false,
            "autoRotateAfterStill": 3,
            "distance": 100.1931248935421,  //默认比例
            "alpha": 83.592048936336816,
            "beta": 0.48683006219769,
            "minAlpha": 5,
            "maxAlpha": 40,
            "minBeta": -1036800,
            "maxBeta": 1036800,
            "animation": true,
            "animationDurationUpdate": 1000,
            "animationEasingUpdate": "cubicInOut",
            "orthographicSize": 60,
            "autoRotateDirection": "cw",
            "autoRotateSpeed": 10,
            "damping": 0.8,
            "rotateSensitivity": 1,
            "zoomSensitivity": 1,
            "panSensitivity": 1,
            "panMouseButton": "middle",
            "rotateMouseButton": "left",
            "minDistance": 40,
            "maxDistance": 400,
            "maxOrthographicSize": 400,
            "minOrthographicSize": 20,
            "center": [
              0,
              -5,
              0,
            ]
          },
        },
        {
          type: "scatter3D",

          coordinateSystem: "geo3D",
          data: [],
          symbol: "pin",
          symbolSize: 20,
          animation: true,
          animationDurationUpdate: 500,
          geo3DIndex: 0,
          silent: false,
          itemStyle: {
            opacity: 1,
            width: 1,
          },
          shading: "lambert",
          label: {
            show: false,
            position: "right",
            distance: 200, // 距离图形元素的距离
            color: "#ff0000",
            backgroundColor: "rgba(255, 255, 255, 0)",
            rich: {
              get: {
                color: "#00E3FF",
                lineHeight: 12,
              },
              set: {
                color: "#FFF100",
                lineHeight: 12,
              },
              date11: {
                color: "#FFFFFF",
                lineHeight: 12,
              },
            },
            zlevel: 6,
          },
          emphasis: {
            itemStyle: {
              color: "#FFF200",
            },
            label: {
              show: false,
            },
          },
          zlevel: 6,
        },
      ],
    };
    // myChart.showLoading();

    echarts.registerMap('centerMap', geoJson);
    // myChart.hideLoading();

    var mapFeatures = echarts.getMap("centerMap").geoJson.features;
    var geoCoordMap = {};
    mapFeatures.forEach(function (v) {
      // v.properties.center = _this.convertCoord(v.properties.center)
      // 地区名称
      var name = v.properties.name;
      // 地区经纬度
      geoCoordMap[name] = v.properties.center;


    });
    let currentIdx = -1;
    function highlightNext() {
      if (currentIdx++ >= 0) {
        // 防止下标增加到超过区域数组长度
        currentIdx %= mapFeatures.length;
      }
      highlightRegion(currentIdx) // 此处的currentIdx经过if判断,已经+1了
      setTimeout(highlightNext, 5000);
    }

    function highlightRegion(index) { // 高亮地图区域,改变对应的散点样式
      let regionName = mapFeatures[index].properties.name; // 高亮的区名

      option.geo3D.regions = [ // 高亮3D地图对应的区块
        {
          name: regionName,
          label: {
            show: true,
            color: "##000000",
          },
          itemStyle: {
            color: "#ffffff",
            opacity: 1,
          }
        }
      ];

      // 当前高亮区域有散点,需删除stroke动效中的该条数据并在fill动效中增加该条数据
      option.series[0].data = scatterData.filter(item => item.name !== regionName); // stroke散点数据
      option.series[1].data = scatterData.filter(item => item.name === regionName); // fill散点数据

      myChart.setOption(option);
      myChart.dispatchAction({ // 触发散点高亮事件,改变标签样式
        type: 'showTip',
        seriesIndex: 1, // series中的第二个图层(fill散点图层)
        dataIndex: 0 // 高亮第一条数据,由于fill散点图层只有一条数据,这里可以不指定
      });
      myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        dataIndex: 0
      });
      // 显示弹框
      myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: 0
      });
      // myChart.on('mouseover', () => {
      //   console.log('mouseover')
      //   // 停止定时器,清除之前的高亮
      //   clearInterval(this.mTime)
      //   this.mTime = ''
      //   myChart.dispatchAction({
      //     type: 'downplay',
      //     seriesIndex: 0,
      //     dataIndex: this.dataIndex
      //   })
      // })
    }


    myChart.setOption(option);
    highlightNext()


    // this.mapActive(myChart)


  }
}
</script>

<style scoped>
#hello {
  position: absolute;
  top: 50%;
  left: 48%;
  width: 2604px;
  height: 1700px;
  z-index: 9999;
  /* border: 20px solid red;s */
  /* border-color: rgba(0, 0, 0, 0) !important; */
  transform: translate(-50%, -50%);
}
</style>

总结

在网上寻找适合自己的方案总是非常耗费精力和时间的。但是,我克服了这些困难,经过自己的研究和实践,最终终于做出来了自己想要的结果。

作为一名程序员,我觉得最重要的是保持不断探索、学习和尝试的精神。当我遇到问题时,我会尝试各种可能的解决方案,来找到最适合我自己的答案。这样不仅可以提升自己的技能水平,也可以增强自己的解决问题的能力。

通过自己的努力和研究,我创建了自己想要的效果,这让我非常自豪和满足。我希望我能够将这个过程记录下来,与其他人分享,让更多的人从中受益。

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

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

相关文章

SpringBoot项目模块间通信的两种方式

说明&#xff1a;在微服务架构开发中&#xff0c;一个请求是通过模块之间的互相通信来完成的&#xff0c;如下面这个场景&#xff1a; 创建两个子模块&#xff1a;订单模块&#xff08;端口8081&#xff09;、用户模块&#xff08;端口8082&#xff09;&#xff0c;两个模块之…

Vue周日历展示大学课程

最近在做日历展示课程&#xff0c;网上也寻找了一些控件 例如&#xff1a;在Vue中引入fullcalendar制作课程表 还有 课程表插件Timetables 感觉效果都不错&#xff0c;而且这个控件还是开源的&#xff0c;大家有需要的都可以去下载试用&#xff0c;我需要的控件可能大致和这个…

Node中http请求body参数解析

1.request 说明&#xff1a;request本质就是一个可读流&#xff0c;因此需要转码。 req.setEncoding("utf-8") 2.声明变量 let isLogin 说明&#xff1a;判断是否登录 3.读取 req.on("data",(data)>{ const loginInfoJSON.parse(data)console.log(JSO…

最细最全,Jmeter获取jdbc数据4种方法-超详细,看这篇足够...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 jmeter使用jdbc协…

【接口/性能测试】Jmeter引用 jar包的三种方式(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 实现对登录密码进…

2023-7-11-第十六式职责链模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

文件格式化读写

#include<stdio.h> #include<stdlib.h> int main() {FILE* fpfopen("D:/a.txt","r");if(!fp) return -1;char* p(char*)malloc(sizeof(char*)*1024);fscanf(fp,"%s",p);//读取文件中的内容&#xff0c;遇到换行和空格停止 printf(&q…

运行lumpyexpress时报错:can‘t open file ‘/opt/python27/lumpy_sv/scripts/bamkit/bam

在利用lumpyexpress进行SV鉴定时&#xff1a; lumpyexpress -P -B ../data/S1.sort.markdup.bam -S S1.splitters.bam -D S1.discordants.bam -o $sample.lumpy.vcf Sourcing executables from /data/home/hgzhong/home/software_set/python27/lumpy_sv/lumpy-sv/bin/lumpyex…

网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)

目录 Java网络编程中的常用类 TCP通信的实现和项目案例 TCP通信入门案例 TCP单向通信 TCP双向通信 创建点对点的聊天应用 一对多应用 一对多聊天服务器 Java网络编程中的常用类 Java为了跨平台&#xff0c;在网络应用通信时是不允许直接调用操作系统接 口的&#xff0…

GitKraken 6.5.1免费中文版安装

今天发现SmartGit上传不了代码了, 看了一下过期了, 我不想花钱买, 就找个替代工具, 方便写代码, 方便合并代码, 方便点击提交代码, 免得敲命令浪费时间. 安装 6.5.1 版本 下载版本,已上传到 CSDN :GitKraken 6.5.1免费中文版安装更换快捷方式 C:\Users\kentrl\AppData\Local\…

2、部署Git服务器-Windows环境部署Gitea

目录 1. 说明2. 环境准备3. 安装部署3.1 安装Git3.2 安装Gitea3.3 将 Gitea 注册为 Windows 服务&#xff08;可选&#xff09;3.4 启用 Gitea 内置的 SSH 服务器&#xff08;可选&#xff09;3.5 编辑 Windows 防火墙 Gitea是一个自托管的Git服务&#xff0c;类似于GitHub、Gi…

图形编辑器开发:参考线吸附功能,让图形自动对齐

最近我给图形编辑器增加了参照线吸附功能&#xff0c;讲讲我的实现思路。 我正在开发的图形设计工具&#xff1a; https://github.com/F-star/suika 线上体验&#xff1a; https://blog.fstars.wang/app/suika/ 效果是被移动的图形会参考周围图形&#xff0c;自动与它们进行吸附…

Linux配置静态IP

Linux配置静态IP 提示&#xff1a;本地虚拟机模拟服务器配置静态IP&#xff0c;大家如果有云服务器也是一样的&#xff0c;后期会出关于云服务器如何配置静态IP 文章目录 Linux配置静态IP一、IP地址的简单介绍二、查看虚拟机的中的网关IP地址三、编辑网络配置文件四、SSH连接五…

码中寻趣:低码专家与开发者的「神秘会议」 ——华为云Astro扫地僧出山

迅速推进的数字生态让软件开发门槛越来越高&#xff0c;新手们无疑面临艰巨挑战&#xff0c;而低代码技术显然是绝佳应对方案&#xff0c;让全民用较短的时间开发出工业级应用。 HDC.Cloud 2023扫地僧见面会汇聚华为云资深专家和充满好奇心的开发者。 当刺耳手机铃和颤动的讨论…

GitHub 集成 Murphysec 实现实时代码检测

1. GitHub 集成 Murphysec 效果 将 MurphySec 代码安全检测工具集成到 GitHub Action 中&#xff0c;可对每一次代码更新实时进行安全漏洞检测&#xff0c;并快速修复这些安全漏洞。 集成效果图 2. 操作步骤 提示&#xff1a;如果您使用过 GitHub Actions 请直接按照第3步开始…

Excel二级联动下拉列表(横向字典配置)

二级联动下拉列表 1. Excel内新建sheet用来存放二级联动列表 2. 新建省份名称引用 在省市字典下&#xff0c;单击A1单元格&#xff0c;选择公式->名称管理器->新建&#xff0c;名称为省份&#xff0c;引用位置为OFFSET(省市字典!$A$1,0,0,COUNTA(省市字典!$A:$A))&…

【 Python 全栈开发 - 人工智能篇 - 41 】线性回归算法

文章目录 一、简介1.1 什么是线性回归&#xff1f;1.2 线性回归在人工智能中的应用预测分析特征工程异常检测 1.3 Python 在人工智能中的角色数据处理和分析机器学习和深度学习自然语言处理 二、理解线性回归2.1 线性回归的基本原理2.2 线性回归模型的假设2.3 线性回归的评估指…

string——find(),rfind()

文章目录 find&#xff08;正向查找&#xff09; 正向查抄&#xff0c;会返回要找的子串中第一字符再父串中的下标值 rfind&#xff08;逆向查找&#xff09; std::string url "https://img.bizhizu.com/2015/1231/hskdkfl.jpg";int begin url.find(/); int end …

如何写一个springboot-starter

使用场景 在目前广泛的微服务治理环境下&#xff0c;我们所开发的代码模块&#xff0c;越来越关注于某一项功能而不是宽泛的整个系统的功能。 所以在我们进行服务拆分的时候&#xff0c;经常会遇到这么一个问题&#xff0c;某些会被不同的模块重复使用&#xff0c;为了避免代…

Vue 3 中使用 Chart.js

要在 Vue 3 中使用 Chart.js&#xff0c;您需要先安装和引入 Chart.js 库&#xff0c;并创建一个 Vue 组件来承载图表。 1. 安装库 shell cnpm i chart.js moment chartjs-adapter-moment 2. 代码示例 <template><div><canvas id"chartCanvas">…