【ECharts】从零实现echarts地图完整代码(纯前端,包含地图资源)

最终效果

在这里插入图片描述
在这里插入图片描述

标题环境搭建

这里忽略创建vue项目的操作过程,请自行搭建 vue2 项目less 环境

安装下载 echarts
这里我们选择npm下载

npm install echarts

安装成功后,在 main.js 中把echarts配置到this上

// 引入 echarts
import * as Echarts from 'echarts'
Vue.prototype.$echarts = Echarts

在这里插入图片描述
这里我建立了一个地图的组件,放在hnMap
在这里插入图片描述

静态地图核心代码

获取地图渲染json文件

这里我是通过下述的网址下载需要的地图 json 文件到本地 mapJson 目录下
地图数据下载地址:地图Json数据下载
另外,因为我这里需要下层的阴影(蓝色阴影部分不需要地图内部的轮廓所以需要两种地图格式)

// 获取地图渲染json文件
async registerMapJson () {
  try {
  	// 上层实际的地图轮廓
    const mapFullResources = require(`./mapJson/${this.mapAreaCode}_full.json`)
    // 下层阴影轮廓(不带内部轮廓信息)
    const mapResources = require(`./mapJson/${this.mapAreaCode}.json`)
    // 注册 map
    this.$echarts.registerMap("mapFullJson", mapFullResources);
    this.$echarts.registerMap("mapJson", mapResources);
  } catch (error) {
    throw new Error('地图加载失败,请刷新重试');
  }
},

地图样式核心代码

地图的样式就是通过下述的 option 对象配置的
更详细的文档可见官网echarts官网
主要是配置项、API、GL配置这三项,一般都可以找到详细的解释
在这里插入图片描述

// 设置初始化的地图样式
async setInitOption () {
  let option = {
    tooltip: {
      trigger: 'item',
      formatter: (params) => {
        return `
          <div style="
            line-height: 24px;
            padding: 13px 15px;
            border-top: 1px solid #16D0FE;
            border-bottom: 1px solid #16D0FE;
            background-color: rgba(6,79,124,0.92);
            box-shadow: inset 0 -10px 10px -10px #00B5FF, 0 10px 10px -10px #00B5FF,inset 0 10px 10px -10px #00B5FF, 0 -10px 10px -10px #00B5FF;
            letter-spacing: 0.2em;
            border-radius: 10%;
          ">
            <div>${params.name}</div>
            <div>这是一个tooltip</div>
          </div>
        `;
      },
      textStyle: {
        color: '#ffffff',
        fontSize: 14,
      },
      padding: 0,
      borderRadius: 20,
      borderColor: 'transparent',
      backgroundColor: 'transparent'
    },
    // 地图渲染层级通过 z 属性来控制
    geo: [
      { // 整个地图最外部轮廓的外阴影
        map: 'mapJson',
        z: 3,
        roam: false,
        aspectScale: 0.9, //长宽比
        zoom: 1.1,
        tooltip: {
          show: false,
        },
        label: {
          show: false, // 是否显示对应地名
        },
        layoutCenter: ['50%', '50%'],
        // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
        layoutSize: 650,
        emphasis: { // 对应的鼠标悬浮效果
          disabled: true,
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            areaColor: '#2f9fe7',
            shadowColor: 'rgba(9, 117, 185,0.7)',
            shadowBlur: 15,
            borderWidth: 0,
            shadowOffsetY: 25,
            shadowOffsetX: 5,
          },
          emphasis: {
            disabled: true, //是否可以被选中
          },
        },
      }, { // 中间部分的蓝色阴影-主体部分
        map: 'mapJson', // 表示中国地图
        roam: false,
        z: 2,
        aspectScale: 0.9, //长宽比
        zoom: 1.1,
        tooltip: {
          show: false,
        },
        label: {
          show: false, // 是否显示对应地名
        },
        layoutCenter: ['50%', '57%'],
        // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
        layoutSize: 650,
        emphasis: { // 对应的鼠标悬浮效果
          disabled: true,
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            areaColor: '#38b4fc',
            borderColor: '#6dceff',
            borderWidth: 5,
            // 内部阴影
            shadowColor: 'rgba(9, 117, 185,0.7)',
            shadowBlur: 10,
            shadowOffsetY: -5,
            shadowOffsetX: -5,
          },
          emphasis: {
            disabled: true, //是否可以被选中
          },
        },
      }, { // 最下层阴影
        map: 'mapJson', // 表示中国地图
        roam: false,
        z: 1,
        aspectScale: 0.9, //长宽比
        zoom: 1.3,
        tooltip: {
          show: false,
        },
        label: {
          show: false, // 是否显示对应地名
        },
        layoutCenter: ['51%', '60%'],
        // 如果宽高比大于 1 则宽度为 650,如果小于 1 则高度为 650,保证了不超过 650x650 的区域
        layoutSize: 650,
        emphasis: { // 对应的鼠标悬浮效果
          disabled: true,
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            areaColor: 'rgba(4, 29, 83,0.5)',
            borderWidth: 0,
          },
          emphasis: {
            disabled: true, //是否可以被选中
          },
        },
      }
    ],
    series: [
      {
        type: 'map',
        map: 'mapFullJson',
        // data: this.mapData,
        zoom: 1.1,
        z: 4,
        layoutCenter: ['50%', '50%'],
        // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
        layoutSize: 650,
        aspectScale: 0.9, //长宽比
        roam: false,
        label: {
          show: true,
          fontSize: 14,
          lineHeight: 16,
          padding: 0,
          borderRadius: 5,
          formatter: function (params) {
            // 这里模拟data里的数据
            var min = 40000;
            var max = 160000;
            const value = Math.floor(Math.random() * (max - min + 1)) + min;
            const areaname = params.name
            if (value >= 150000) {
              return `{red|${areaname}}`
            } else if (value >= 100000) {
              return `{orange|${areaname}}`
            } else if (value >= 50000) {
              return `{green|${areaname}}`
            } else {
              return `{blue|${areaname}}`
            }
          },
          rich: {
            // 四种标签样式
            red: {
              color: "#fff",
              padding: 10,
              borderRadius: 3,
              textBorderWidth: 10,
              textShadowBlur: 15,
              textBorderColor: 'rgba(41, 102, 155, 0.2)',
              textShadowColor: 'rgba(41, 102, 155, 1)',
              backgroundColor: 'rgba(255, 0, 0, 0.7)',
            },
            orange: {
              color: "#fff",
              padding: 10,
              borderRadius: 3,
              textBorderColor: 'rgba(3, 40, 103, 0.2)',
              textBorderWidth: 10,
              textShadowColor: 'rgba(3, 40, 103, 1)',
              textShadowBlur: 15,
              backgroundColor: 'rgba(236, 116, 9, 0.8)',
            },
            green: {
              color: "#fff",
              padding: 10,
              borderRadius: 3,
              textBorderColor: 'rgba(3, 40, 103, 0.2)',
              textBorderWidth: 10,
              textShadowColor: 'rgba(3, 40, 103, 1)',
              textShadowBlur: 15,
              backgroundColor: 'rgba(0, 215, 233, 0.8)',
            },
            blue: {
              color: "#fff",
              padding: 10,
              textBorderColor: 'rgba(3, 40, 103, 0.2)',
              textBorderWidth: 10,
              textShadowColor: 'rgba(3, 40, 103, 1)',
              textShadowBlur: 15,
              backgroundColor: 'rgba(8, 136, 255, 0.8)',
            },
          },
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            borderColor: {
              type: 'linear',
              x: 0,
              y: 0,
              x2: 0,
              y2: 1,
              colorStops: [{
                offset: 0, color: '#306ca1'
              }, {
                offset: 0.3, color: '#41b8ff'
              }],
            },
            borderWidth: 3,
            areaColor: {
              image: wlImg
            }
          },
          emphasis: {
            areaColor: {
              image: wlImg
            },
            borderColor: '#fff',
            borderWidth: 5,
          },
        },
      },
    ],
    animation: false,
  }
  this.option = option
  return option
},

初始化,渲染地图

// 初始化,渲染地图
renderMap () {
  if (this.myChart) {
    this.myChart.dispose(); // 销毁之前的 echarts 实例
    this.myChart.off('click'); // 解绑 click 事件监听器
  }
  // 保存新的 echarts 实例
  const myChart = this.$echarts.init(document.getElementById("mapEchart"));
  this.myChart = myChart
  myChart.clear()
  myChart.setOption(this.option);
},

根据地区名设置当前位置的定位图标

其实就是使用 scatter 图例,把 symbol 设置为本地的图片就好了

// 定位图标
const markImg = require('./images/mark.png')
setMarkSymbol (selectedAreaName) {
  this.option.series[1] = {
    type: 'scatter',
    coordinateSystem: 'geo',
    z: 12,
    data: [ // 描点数据
      {
        name: selectedAreaName,
        value: mapAddr[selectedAreaName],
      }
    ],
    symbol: `image://${markImg}`,
    symbolSize: [44, 33],
  }
  this.myChart.setOption(this.option);
},

单击下钻事件

其实地图下钻就只需要重新获取点击地址的地图 Json 文件,然后再重新渲染 echarts 即可

// 单击下钻事件
clickMapItem (e) {
  const selectedAreaName = e.name
  const selectedAreaCode = areaCode[selectedAreaName]
  if (selectedAreaCode) {
    // 点击的是市一级的话,下钻重新渲染地图
    this.mapAreaCode = selectedAreaCode
    this.initMapChart()
  } else {
    // 区县一级的话显示定位图标
    this.setMarkSymbol(selectedAreaName)
  }
},

返回省级地图

这里的返回我是直接偷懒做的返回省级地图,当然如果你要做上一级地图的话,只需要用一个数组保存你的地址路径,然后类似下钻功能重新渲染地图。

backToHome () {
  this.mapAreaCode = '430000'
  this.initMapChart()
}

完整 Vue 代码

如果需要源码可以进行资源下载
下载完成后npm install ,再 npm run dev 运行就好啦,如果有任何问题可以问我~

<template>
  <div style="position: relative;">
    <!-- 左上角返回按钮 -->
    <div class="back-box" @click="backToHome" v-show="mapAreaCode != 430000">
      <img src="./images/返回.png">
    </div>
    <!-- 建立一个div用于放地图 canvas -->
    <div style="height: 1000px;width: 1000px;" id="mapEchart"></div>
    <!-- 左下角图例 -->
    <div class="map-tips">
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #FF0000"></div>
        <span>大于 150,000人次 </span>
      </div>
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #FF7800FF"></div>
        <span>大于 100,000人次 </span>
      </div>
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #00D7E9FF"></div>
        <span>大于 50,000人次 </span>
      </div>
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #0888FFFF"></div>
        <span>小于 50,000人次 </span>
      </div>
    </div>
  </div>
</template>

<script>
import areaCode from "./config/areaCode";
import mapAddr from "./config/mapAddr";
// 地图纹理
const wlImg = require('./images/纹理.png')
// 定位图标
const markImg = require('./images/mark.png')
export default {
  name: 'hnMap',
  components: {},
  props: {},
  data () {
    return {
      mapAreaCode: '430000', //当前地图展示的行政区划代码(默认为湖南省)
      myChart: null, // echarts 实例
      mapData: [], // 地图上显示的项目申报数据
      debounceTimer: null, // 用于防抖的计时器
    }
  },
  mounted () {
    this.initMapChart()
  },
  methods: {
    async initMapChart () {
      // 获取地图渲染json文件
      await this.registerMapJson()
      // 设置初始化的地图样式
      await this.setInitOption()
      // 初始化,渲染地图
      this.renderMap()
      // 添加点击事件的监听事件
      this.setClickListener()
    },
    // 获取地图渲染json文件
    async registerMapJson () {
      try {
        const mapFullResources = require(`./mapJson/${this.mapAreaCode}_full.json`)
        const mapResources = require(`./mapJson/${this.mapAreaCode}.json`)
        this.$echarts.registerMap("mapFullJson", mapFullResources);
        this.$echarts.registerMap("mapJson", mapResources);
      } catch (error) {
        throw new Error('地图加载失败,请刷新重试');
      }
    },
    // 设置初始化的地图样式
    async setInitOption () {
      let option = {
        tooltip: {
          trigger: 'item',
          formatter: (params) => {
            return `
              <div style="
                line-height: 24px;
                padding: 13px 15px;
                border-top: 1px solid #16D0FE;
                border-bottom: 1px solid #16D0FE;
                background-color: rgba(6,79,124,0.92);
                box-shadow: inset 0 -10px 10px -10px #00B5FF, 0 10px 10px -10px #00B5FF,inset 0 10px 10px -10px #00B5FF, 0 -10px 10px -10px #00B5FF;
                letter-spacing: 0.2em;
                border-radius: 10%;
              ">
                <div>${params.name}</div>
                <div>这是一个tooltip</div>
              </div>
            `;
          },
          textStyle: {
            color: '#ffffff',
            fontSize: 14,
          },
          padding: 0,
          borderRadius: 20,
          borderColor: 'transparent',
          backgroundColor: 'transparent'
        },
        // 地图渲染层级通过 z 属性来控制
        geo: [
          { // 整个地图最外部轮廓的外阴影
            map: 'mapJson',
            z: 3,
            roam: false,
            aspectScale: 0.9, //长宽比
            zoom: 1.1,
            tooltip: {
              show: false,
            },
            label: {
              show: false, // 是否显示对应地名
            },
            layoutCenter: ['50%', '50%'],
            // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
            layoutSize: 650,
            emphasis: { // 对应的鼠标悬浮效果
              disabled: true,
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                areaColor: '#2f9fe7',
                shadowColor: 'rgba(9, 117, 185,0.7)',
                shadowBlur: 15,
                borderWidth: 0,
                shadowOffsetY: 25,
                shadowOffsetX: 5,
              },
              emphasis: {
                disabled: true, //是否可以被选中
              },
            },
          }, { // 中间部分的蓝色阴影-主体部分
            map: 'mapJson', // 表示中国地图
            roam: false,
            z: 2,
            aspectScale: 0.9, //长宽比
            zoom: 1.1,
            tooltip: {
              show: false,
            },
            label: {
              show: false, // 是否显示对应地名
            },
            layoutCenter: ['50%', '57%'],
            // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
            layoutSize: 650,
            emphasis: { // 对应的鼠标悬浮效果
              disabled: true,
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                areaColor: '#38b4fc',
                borderColor: '#6dceff',
                borderWidth: 5,
                // 内部阴影
                shadowColor: 'rgba(9, 117, 185,0.7)',
                shadowBlur: 10,
                shadowOffsetY: -5,
                shadowOffsetX: -5,
              },
              emphasis: {
                disabled: true, //是否可以被选中
              },
            },
          }, { // 最下层阴影
            map: 'mapJson', // 表示中国地图
            roam: false,
            z: 1,
            aspectScale: 0.9, //长宽比
            zoom: 1.3,
            tooltip: {
              show: false,
            },
            label: {
              show: false, // 是否显示对应地名
            },
            layoutCenter: ['51%', '60%'],
            // 如果宽高比大于 1 则宽度为 650,如果小于 1 则高度为 650,保证了不超过 650x650 的区域
            layoutSize: 650,
            emphasis: { // 对应的鼠标悬浮效果
              disabled: true,
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                areaColor: 'rgba(4, 29, 83,0.5)',
                borderWidth: 0,
              },
              emphasis: {
                disabled: true, //是否可以被选中
              },
            },
          }
        ],
        series: [
          {
            type: 'map',
            map: 'mapFullJson',
            // data: this.mapData,
            zoom: 1.1,
            z: 4,
            layoutCenter: ['50%', '50%'],
            // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
            layoutSize: 650,
            aspectScale: 0.9, //长宽比
            roam: false,
            label: {
              show: true,
              fontSize: 14,
              lineHeight: 16,
              padding: 0,
              borderRadius: 5,
              formatter: function (params) {
                // 这里模拟data里的数据
                var min = 40000;
                var max = 160000;
                const value = Math.floor(Math.random() * (max - min + 1)) + min;
                const areaname = params.name
                if (value >= 150000) {
                  return `{red|${areaname}}`
                } else if (value >= 100000) {
                  return `{orange|${areaname}}`
                } else if (value >= 50000) {
                  return `{green|${areaname}}`
                } else {
                  return `{blue|${areaname}}`
                }
              },
              rich: {
                // 四种标签样式
                red: {
                  color: "#fff",
                  padding: 10,
                  borderRadius: 3,
                  textBorderWidth: 10,
                  textShadowBlur: 15,
                  textBorderColor: 'rgba(41, 102, 155, 0.2)',
                  textShadowColor: 'rgba(41, 102, 155, 1)',
                  backgroundColor: 'rgba(255, 0, 0, 0.7)',
                },
                orange: {
                  color: "#fff",
                  padding: 10,
                  borderRadius: 3,
                  textBorderColor: 'rgba(3, 40, 103, 0.2)',
                  textBorderWidth: 10,
                  textShadowColor: 'rgba(3, 40, 103, 1)',
                  textShadowBlur: 15,
                  backgroundColor: 'rgba(236, 116, 9, 0.8)',
                },
                green: {
                  color: "#fff",
                  padding: 10,
                  borderRadius: 3,
                  textBorderColor: 'rgba(3, 40, 103, 0.2)',
                  textBorderWidth: 10,
                  textShadowColor: 'rgba(3, 40, 103, 1)',
                  textShadowBlur: 15,
                  backgroundColor: 'rgba(0, 215, 233, 0.8)',
                },
                blue: {
                  color: "#fff",
                  padding: 10,
                  textBorderColor: 'rgba(3, 40, 103, 0.2)',
                  textBorderWidth: 10,
                  textShadowColor: 'rgba(3, 40, 103, 1)',
                  textShadowBlur: 15,
                  backgroundColor: 'rgba(8, 136, 255, 0.8)',
                },
              },
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                borderColor: {
                  type: 'linear',
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  colorStops: [{
                    offset: 0, color: '#306ca1'
                  }, {
                    offset: 0.3, color: '#41b8ff'
                  }],
                },
                borderWidth: 3,
                areaColor: {
                  image: wlImg
                }
              },
              emphasis: {
                areaColor: {
                  image: wlImg
                },
                borderColor: '#fff',
                borderWidth: 5,
              },
            },
          },
        ],
        animation: false,
      }
      this.option = option
      return option
    },
    // 初始化,渲染地图
    renderMap () {
      if (this.myChart) {
        this.myChart.dispose(); // 销毁之前的 echarts 实例
        this.myChart.off('click'); // 解绑 click 事件监听器
      }
      // 保存新的 echarts 实例
      const myChart = this.$echarts.init(document.getElementById("mapEchart"));
      this.myChart = myChart
      myChart.clear()
      myChart.setOption(this.option);
    },
    // 添加点击事件监听(防抖)
    setClickListener () {
      this.myChart.on('click', (e) => {

        // 如果点击的是最下面的阴影层,不进行任何操作,因为geo层使用的是不带内部轮廓的json地图
        if (e.componentType === 'geo') {
          return
        }

        this.debounce(this.clickMapItem(e))

      });
    },
    // 防抖函数
    debounce (func, delay = 1000) {
      return (...args) => {
        clearTimeout(this.debounceTimer);
        this.debounceTimer = setTimeout(() => {
          func.call(this, ...args);
        }, delay);
      };
    },
    // 单击事件
    clickMapItem (e) {
      const selectedAreaName = e.name
      const selectedAreaCode = areaCode[selectedAreaName]
      if (selectedAreaCode) {
        // 点击的是市一级的话,下钻重新渲染地图
        this.mapAreaCode = selectedAreaCode
        this.initMapChart()
      } else {
        // 区县一级的话显示定位图标
        this.setMarkSymbol(selectedAreaName)
      }
    },
    /**
     * 根据地区名设置当前位置的定位图标
     * @param {String} selectedAreaName 需要显示定位图标的地区名
     */
    setMarkSymbol (selectedAreaName) {
      this.option.series[1] = {
        type: 'scatter',
        coordinateSystem: 'geo',
        z: 12,
        data: [ // 描点数据
          {
            name: selectedAreaName,
            value: mapAddr[selectedAreaName],
          }
        ],
        symbol: `image://${markImg}`,
        symbolSize: [44, 33],
      }
      this.myChart.setOption(this.option);
    },
    backToHome () {
      this.mapAreaCode = '430000'
      this.initMapChart()
    }
  },
}
</script>
<style lang="less" scoped>
.back-box {
  z-index: 999;
  position: absolute;
  top: 100px;
  cursor: pointer;
}
.map-tips-item {
  display: flex;
  margin-top: 10px;
}
.map-tips {
  position: absolute;
  bottom: 36px;
  left: 10%;
  z-index: 99;
  font-size: 14px;
  color: #9fd1ffff;
  height: 120px;
  width: 200px;
}
.map-bar {
  width: 44px;
  height: 17px;
  margin-right: 16px;
  border-radius: 8%;
}
</style>

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

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

相关文章

【每日一题】用邮票贴满网格图

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;二维前缀和二维差分 写在最后 Tag 【二维前缀和】【二维差分】【矩阵】【2023-12-14】 题目来源 2132. 用邮票贴满网格图 题目解读 在 01 矩阵中&#xff0c;判断是否可以用给定尺寸的邮票将所有 0 位置都覆盖住&…

JDK安装测试记录

jdk安装测试记录 1.下载JDK2.安装3.适配环境变量4.测试 1.下载JDK 写这篇主要是记录以后自己安装方便&#xff0c;做个记录 Oracle官网 本地下载 需要注然后才能下载: 2.安装 选择默认或者自定义的路径: 后面JRE也可重新定义到自定义的文件夹&#xff1a; 3.适配环境变量 …

Python接口测试环境搭建过程详解

环境搭建 python 安装&#xff1a;建议使用python3.7 pycharm安装 requests安装 &#xff1a;pip3 install requests requests 基本使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 usage: >>> import requests >>> r requests.get…

Python爬虫之Cookie 与 Session 的区别

文章目录 一、 含义二、有效时长&#xff1a;三、面试中可能会遇到的问题点四、在反爬技术中的应用关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库&#xff0c;必须有两个东西&#xff0c;一个PHP官方写的扩展&#xff0c;一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库&#xff0c;所以两个都不能少&#xff0c;而且版本必须…

ArcGIS导入excel中的经纬度信息,绘制矢量

1.首先整理坐标信息 2.其次转成2003格式的excel文件 3.导入arcgis&#xff0c;点击右键添加excel数据 4.显示xy数据 5.显示经度和纬度信息 6&#xff1a;点击【地理坐标系】->【World】->【WGS 1984】->【确定】 7.投影带的确定方式&#xff1a; 因为自己一直…

字节跳动面经题

字节跳动面经题 1、了解anchor-free? "Anchor-free"是一个指向一类目标检测方法的术语&#xff0c;与传统的"anchor-based"方法相对应。在传统的目标检测中&#xff0c;通常会使用一系列预定义的锚框&#xff08;anchors&#xff09;作为模型的基础。这些…

verilog基本语法-时序逻辑基础-记忆单元

概述: 组合逻辑虽然可以构造各种功能电路&#xff0c;但是他有一个缺点就是输入改变时&#xff0c;输出会立即发生改变。因此历史信息不能被保存下来。两个能够保存信息的存储单元被设计出来&#xff0c;用于保存历史信息。一个是锁存器&#xff0c;另外一个是触发器。锁存器是…

(基础篇)通过node增删改查连接mysql数据库

一定要会最基础的sql建表一定要会最基础的sql建表一定要会最基础的sql建表 首先说一下准备工作 一、准备工具 1.mysql数据库Navicat可视化工具&#xff08;数据库表单已经建好&#xff09; 我这里用的小皮工具直接开启的本地mysql 2.vscode (不用说基本上都有) 3.node.js …

仿牛客论坛的一些细节改进

私信列表的会话头像链接到个人主页 原来的不足 点击私信列表的会话头像应该要能跳转到该目标对象的个人主页。 原来的代码&#xff1a; <a href"profile.html"><img th:src"${map.target.headerUrl}" class"mr-4 rounded-circle user-he…

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.…

web前端实现LED功能、液晶显示时间、数字

MENU 效果演示html部分JavaScript部分css部分 效果演示 html部分 <div id"app"><!-- 页面 --><div class"time-box"><!-- 时 --><div class"house-box"><bit-component :num"houseTem"></bit…

【MODBUS】Modbus是什么?

Modbus协议&#xff0c;从字面理解它包括Mod和Bus两部分&#xff0c;首先它是一种bus&#xff0c;即总线协议&#xff0c;和12C、SP|类似&#xff0c;总线就意味着有主机&#xff0c;有从机&#xff0c;这些设备在同一条总线上。 Modbus支持单主机&#xff0c;多个从机&#xf…

Colorful Grid Codeforces Round 910 (Div. 2) C

Problem - C - Codeforces 题目大意&#xff1a;有一个n*m的网格&#xff0c;要求从(1,1)走到(n,m)&#xff0c;同时要求路径的长度必须为k1&#xff0c;然后给每个两点之间的路径染成红色或蓝色&#xff0c;要求任意两个相邻线段颜色不能相同&#xff0c;求涂色的方案 3<…

将程序注册为系统服务

cmd中执行命令&#xff1a; sc create Redis binpath "C:\guet_run1\Redis-x64-5.0.14.1\redis-server.exe" type own start auto displayname "Redis"注意&#xff0c;命令中所有的等号和值之间需要一个空格&#xff08;等号前不要空格&#xff0c;等号后…

Linux---查看命令帮助

1. 查看命令帮助方式 --help 使用说明: 命令 --helpman 使用说明: man 命令 查看命令帮助的目的说明: 查看命令帮助目的是查看命令选项信息的 --help效果图: man效果图: man命令的说明: 操作键说明空格显示下一屏信息回车显示下一行信息b显示上一屏信息f显示下一屏信息q退…

[c++] 意识需要转变的一个例子,全局变量的构造函数先于main执行

最近还遇到一个例子是关于&#xff1a;从C转C开发需要注意的一个意识问题。本人遇到的这个问题是&#xff0c;带着C的意识来看C的代码&#xff0c;然后根据代码看&#xff0c;有一个全局变量的值在main函数进入之后才会更改&#xff0c;所以百思不得其解&#xff0c;这个变量怎…

RK3568平台 OTA升级原理

一.前言 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样一经出售就不再变更。为了快速响应市场需求&#xff0c;一个技术变得极为重要&#xff0c;即OTA空中下载…

ES中根据主键_id查询记录

一、需求 es中_type&#xff1a;_doc&#xff0c;想要根据主键_id查询记录 二、实现 复合查询中使用语句查询http://192.168.1.1/_doc/1

智能分析/可视化安防监控系统EasyCVR风光互补远程视频监控方案

一、背景需求 在一些偏远地区&#xff0c;也具有视频监控的需求。但是这类场景中&#xff0c;一般无法就近获取市电&#xff0c;如果要长距离拉取市电&#xff0c;建设的成本非常高且长距离传输有安全隐患&#xff0c;因此风光互补远程视频监控方案的需求也较多。利用风光电转…