前端html,vue使用第三方地图详细教程,以百度地图为例,实现地图标注,导航,定位,路线规划,坐标转换

news2024/12/15 7:34:30

目录

示例:

准备:

?编辑

开始:

1、新建页面,在script标签中引入百度地图的api数据,把自己在控制台创建的应用的ak替换上去

2、创建一个dom对象,设置宽高

3、在js中初始化地图

进阶:

1、地图标注

2、定位

3、导航

?编辑

4、公交路线规划

6、坐标转化

完整demo代码:


示例:

完整demo截图:

准备:

1、注册百度地图api账号,地址:百度地图开放平台

2、进入控制台 - 应用管理 - 我的应用 - 创建应用,填写相关信息

开始:

1、新建页面,在script标签中引入百度地图的api数据,把自己在控制台创建的应用的ak替换上去
    <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=这里替换成自己的ak">
    </script>
2、创建一个dom对象,设置宽高
<div id="map" class="mapBox"></div>
3、在js中初始化地图
// 初始化地图
initMap(){
    var map = new BMapGL.Map("map");//绑定创建的dom元素的id
    var point = new BMapGL.Point(116.404, 39.915);  // 创建点坐标 
    map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放
},

完成以上步骤就能看到基础的一张地图了

进阶:

1、地图标注

实现效果,点击地图弹出弹框,输入信息,添加一个标注点。

要实现该效果首先要监听点击事件

this.map.addEventListener('click', this.addLabel);

点击添加标注点

// 添加地图标点
addLabel(e) {
    let that = this
    var point =  new BMapGL.Point(e.latlng.lng, e.latlng.lat)
    var mk = new BMapGL.Marker(point);
    console.log(mk);
    this.$prompt('请输入内容', '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    }).then(({ value }) => {
        mk.id = Math.random()*100000000000000000
        mk.text = value?value:''
        console.log(mk);
        this.mkList.push({id:mk.id,text:mk.text,latLng:mk.latLng})
        this.map.addOverlay(mk);
        var opts = {
            width : 200,     // 信息窗口宽度
            height: 100,     // 信息窗口高度
            title : "" , // 信息窗口标题
            message:""
        }
        var infoWindow = new BMapGL.InfoWindow(value?value:'', opts);  // 创建信息窗口对象 
        mk.addEventListener("click", function(e){
            that.map.openInfoWindow(infoWindow, point); //开启信息窗口
        });
    }).catch(() => {
        
    });
},

删除标点(根据添加时生成的id去标点集合里匹配,删除对应id 的数据)

// 删除地图标点
deleteLabelById(id){
    var allOverlay = this.map.getOverlays();
    for (var i = 0; i < allOverlay.length ; i++){
        if(allOverlay[i].id&&allOverlay[i].id==id){
            this.map.removeOverlay(allOverlay[i]);
        }
    }
},
2、定位
// 获取定位
var geolocation = new BMapGL.Geolocation();
geolocation.getCurrentPosition(function(r){
    if(this.getStatus() == BMAP_STATUS_SUCCESS){
        map.centerAndZoom(r.point, 15); //r.point就是当前定位坐标,设置为地图中心点
        var mk = new BMapGL.Marker(r.point); 
        map.addOverlay(mk);//添加标点
        map.panTo(r.point);
        console.log('您的位置:' + r.point.lng + ',' + r.point.lat);
        that.city = r.address.city
        that.address = `${r.address.province}-${r.address.city}-${r.address.district}-${r.address.street}-${r.address.street_number}号` //中文 详细地址
    }
    else {
        alert('failed' + this.getStatus());
    } 
});
3、导航

(this.p1是终点坐标,this.p2是起点坐标)

if(this.type==1){
    // 行车导航路线规划
    var output = ''
    this.driving = new BMapGL.DrivingRoute(this.map, {
        renderOptions:{map: this.map, autoViewport: true},
        onSearchComplete: function(results){
            if (that.driving.getStatus() != BMAP_STATUS_SUCCESS){
                return ;
            }
            var plan = results.getPlan(0);
            output += '总时长:' + plan.getDuration(true);  //获取时间
            output += '总路程:' + plan.getDistance(true);  //获取距离
            that.output = output
            console.log(output)
        },
    });
    // p2,p1为起点和目标点的坐标
    this.driving.search(this.p2, this.p1);
}else if(this.type==2){
    // 公交路线规划
    var output = ''
    this.transit = new BMapGL.TransitRoute(this.map,{
    renderOptions: {map: this.map,panel:'panel'},
    onSearchComplete: function(results){
            if (that.transit.getStatus() != BMAP_STATUS_SUCCESS){
                return ;
            }
            var plan = results.getPlan(0);
            output += '总时长:' + plan.getDuration(true);  //获取时间
            output += '总路程:' + plan.getDistance(true);  //获取距离
            that.output = output
            console.log(output)
        },
    });
    this.transit.search(this.p2, this.p1);
}else{
    // 步行路线规划
    var output = ''
    this.walking = new BMapGL.WalkingRoute(this.map, {
        renderOptions:{map: this.map, autoViewport: true},
        onSearchComplete: function(results){
            if (that.walking.getStatus() != BMAP_STATUS_SUCCESS){
                return ;
            }
            var plan = results.getPlan(0);
            output += '总时长:' + plan.getDuration(true);  //获取时间
            output += '总路程:' + plan.getDistance(true);  //获取距离
            that.output = output
            console.log(output)
        },
    });
    this.walking.search(this.p2, this.p1);
}
4、公交路线规划

注意:公交车导航可以配置以下参数获取公交路线规划

<div id="panel"></div>

renderOptions: {map: this.map,panel:'panel'},

6、坐标转化

目前国内主要有以下三种坐标系:

WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。

GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。

BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。

非中国地区地图,服务坐标统一使用WGS84坐标。

百度地图需要用BD09坐标,如果是天地图坐标(WGS84),则需要作转化

WGS84 – 转–> BD09

var convertor = new BMapGL.Convertor();
let point = new BMapGL.Point(intitude,latitude) //intitude,latitude为天地图坐标
convertor.translate([point], COORDINATES_WGS84, COORDINATES_BD09, (data)=>{
    if(data.status === 0) {
        let point = data.points[0]
        if(point){
            // 此时得到的就是百度地图坐标
            console.log(point)
        }
    }
})

完整demo代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>百度地图功能demo</title>
    <link rel="stylesheet" href="/css/element.css">
    <script src="/js/vue.min.js"></script>
    <script src="/js/element.js"></script>
    <!-- 这里替换成自己的ak -->
    <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak='自己的ak'">
    </script>
    <style>
        body {
            margin: 0;
            box-sizing: border-box;
        }
        .mapBox {
            /* width: calc(100vw - 400px); */
            flex-grow: 1;
            height: 100vh;
        }
        .leftBox {
            width: 400px;
            height: 100vh;
            box-sizing: border-box;
            overflow-y: auto;
            overflow-x: hidden;
            transition: 0.6s;
        }
        .leftBoxHide {
            width: 0px;
            height: 100vh;
            box-sizing: border-box;
            overflow-y: auto;
            overflow-x: hidden;
            transition: 0.6s;
        }
        .tool {
            width: 400px;
            height: 270px;
            border-radius: 5px;
            font-size: 12px;
            padding: 10px;
            box-sizing: border-box;
        }
        .infoBox {
            padding: 0 5px;
        }
        .icon {
            position: fixed;
            bottom: 10px;
            left: 10px;
            width: 40px;
            height: 40px;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: #fff;
            z-index: 99;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app" style="display: flex;position: relative;">
        <div class="icon" @click="clickShowTool">
            <img src="./component.png" alt="" style="width: 30px;height: 30px;">
        </div>
        <div :class="toolStatus?'leftBox':'leftBoxHide'">
            <div class="tool">
                <div>
                    <span>当前位置:</span>
                    <span v-if="address">{{address}}</span>
                    <span v-else>暂无定位</span>
                </div>
                <div v-if="p2" style="padding-top: 10px;">地址坐标:({{p2.lng}},{{p2.lat}})</div>
                <div style="display: flex;align-items: center;padding-top: 10px;">
                    <div>目的地:</div>
                    <div>
                        <el-input v-model="keyWords" size="small"></el-input>
                    </div>
                    <div style="margin-left: 10px;">
                        <el-button type="primary" size="small" @click="searchArea">搜索</el-button>
                        <el-button type="primary" size="small" @click="searchArea('dh')">导航</el-button>
                    </div>
                </div>
                <div style="display: flex;align-items: center;padding-top: 10px;">
                    <div>规划导航路线:</div>
                    <div>
                        <el-select v-model="type" size="small" placeholder="请选择" @change="change">
                            <el-option
                                v-for="item in options"
                                :key="item.value"
                                :label="item.label"
                                :value="item.value">
                            </el-option>
                        </el-select>
                    </div>
                </div>
                <div style="display: flex;align-items: center;padding-top: 10px;">
                    <div>开启/关闭交通流量情况:</div>
                    <div>
                        <el-switch
                            v-model="switchVal"
                            size="small"
                            @change="changeSwitch"
                        />
                    </div>
                </div>
                <div style="display: flex;align-items: center;padding-top: 10px;">
                    <div>开启/关闭地图标注(
                        <font color="red">单击添加</font>
                        ):</div>
                    <div>
                        <el-switch
                            v-model="mapLabel"
                            size="small"
                            @change="changeSwitchLabel"
                        />
                    </div>
                </div>
                <div style="display: flex;align-items: center;padding-top: 10px;">
                    <div>显示/隐藏地图标注</div>
                    <div>
                        <el-switch
                            v-model="mapLabel2"
                            size="small"
                            @change="changeSwitchLabel2"
                        />
                    </div>
                </div>
                <div style="padding-top: 10px;" v-if="type==1||type==3">{{output}}</div>
            </div>
            <div class="infoBox">
                <div id="panel"></div>
            </div>
        </div>
        <div id="map" class="mapBox"></div>
    </div>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data () {
            return {
                mapLabel:false,
                mapLabel2:false,
                switchVal:false,
                toolStatus:false,
                map:null,
                type:1,
                p1:null,
                p2:null,
                address:'',
                options:[
                    {label:'行车',value:1},
                    {label:'公交',value:2},
                    {label:'步行',value:3},
                ],
                output:'',
                keyWords:'',
                city:'',
                driving:null,
                transit:null,
                walking:null,
                mkList:[],
            }
        },
        mounted () {
            this.initMap()
            this.mkList = window.localStorage.getItem('nkList')?JSON.parse(window.localStorage.getItem('nkList')):[]
            // console.log(JSON.parse(this.mkList));
            let that = this
            window.addEventListener("beforeunload", function(e) { 
                if(that.mkList.length){
                    window.localStorage.setItem('nkList',JSON.stringify(that.mkList))
                }
            });
        },
        methods: {
            // 开启关闭地图标注
            changeSwitchLabel(e){
                this.mapLabel = e
                if(e){
                    // 开启地图点击事件监听
                    this.map.addEventListener('click', this.addLabel);
                }else{
                    this.map.removeEventListener("click",this.addLabel);
                }
            },
            //显示隐藏地图标注 
            changeSwitchLabel2(e){
                this.mapLabel2 = e
                if(e){
                    // 回显标点
                    let that = this
                    this.mkList.forEach((item)=>{
                        var mk = new BMapGL.Marker(item.latLng);
                        mk.id = item.id
                        mk.text = item.text
                        console.log(mk);
                        that.map.addOverlay(mk);
                        var opts = {
                            width : 200,     // 信息窗口宽度
                            height: 100,     // 信息窗口高度
                            title : "" , // 信息窗口标题
                            message:""
                        }
                        var infoWindow = new BMapGL.InfoWindow(item.text, opts);  // 创建信息窗口对象 
                        mk.addEventListener("click", function(e){
                            that.map.openInfoWindow(infoWindow, item.latLng); //开启信息窗口
                        });
                        mk.addEventListener('dblclick',function(e){
                            that.p1 = new BMapGL.Point(item.latLng.lng,item.latLng.lat)
                            that.change()
                        })
                    })
                }else{
                    console.log(this.driving,this.transit,this.walking);
                    this.driving?.clearResults();
                    this.transit?.clearResults();
                    this.walking?.clearResults();
                    console.log(this.driving,this.transit,this.walking);
                    // 删除标点
                    this.mkList.forEach((item)=>{
                        this.deleteLabelById(item.id)
                    })
                }
            },
            // 开启关闭交流流量图
            changeSwitch(e){
                console.log(e);
                this.switchVal = e
                if(e){
                    this.map.setTrafficOn(); // 添加交通流量图层
                }else{
                    this.map.setTrafficOff(); // 移除交通流量图层
                }
            },
            // 切换出行路线规划方式
            change(){
                console.log(this.p1,this.p2);
                if(!(this.p1&&this.p2)){
                    return
                }
                this.driving?.clearResults();
                this.transit?.clearResults();
                this.walking?.clearResults();
                let that = this
                that.output = ''
                console.log(this.type);
                if(this.type==1){
                    // 行车导航路线规划
                    var output = ''
                    this.driving = new BMapGL.DrivingRoute(this.map, {
                        renderOptions:{map: this.map, autoViewport: true},
                        onSearchComplete: function(results){
                            if (that.driving.getStatus() != BMAP_STATUS_SUCCESS){
                                return ;
                            }
                            var plan = results.getPlan(0);
                            output += '总时长:' + plan.getDuration(true);  //获取时间
                            output += '总路程:' + plan.getDistance(true);  //获取距离
                            that.output = output
                            console.log(output)
                        },
                    });
                    // p2,p1为起点和目标点的坐标
                    that.driving.search(this.p2, this.p1);
                }else if(this.type==2){
                    // 公交路线规划
                    var output = ''
                    this.transit = new BMapGL.TransitRoute(this.map,{
                    renderOptions: {map: this.map,panel:'panel'},
                    onSearchComplete: function(results){
                            if (that.transit.getStatus() != BMAP_STATUS_SUCCESS){
                                return ;
                            }
                            var plan = results.getPlan(0);
                            output += '总时长:' + plan.getDuration(true);  //获取时间
                            output += '总路程:' + plan.getDistance(true);  //获取距离
                            that.output = output
                            console.log(output)
                        },
                    });
                    that.transit.search(this.p2, this.p1);
                }else{
                    // 步行路线规划
                    var output = ''
                    this.walking = new BMapGL.WalkingRoute(this.map, {
                        renderOptions:{map: this.map, autoViewport: true},
                        onSearchComplete: function(results){
                            if (that.walking.getStatus() != BMAP_STATUS_SUCCESS){
                                return ;
                            }
                            var plan = results.getPlan(0);
                            output += '总时长:' + plan.getDuration(true);  //获取时间
                            output += '总路程:' + plan.getDistance(true);  //获取距离
                            that.output = output
                            console.log(output)
                        },
                    });
                    that.walking.search(this.p2, this.p1);
                }
            },
            // 初始化地图
            initMap(){
                let that = this
                var map = new BMapGL.Map("map"); //绑定创建的dom元素的id
                that.map = map
                map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放
                // 获取定位
                var geolocation = new BMapGL.Geolocation();
                geolocation.getCurrentPosition(function(r){
                    if(this.getStatus() == BMAP_STATUS_SUCCESS){
                        console.log(r);
                        that.p2 = r.point
                        map.centerAndZoom(r.point, 15);
                        var mk = new BMapGL.Marker(r.point);
                        map.addOverlay(mk);
                        map.panTo(r.point);
                        console.log('您的位置:' + r.point.lng + ',' + r.point.lat);
                        that.city = r.address.city
                        that.address = `${r.address.province}-${r.address.city}-${r.address.district}-${r.address.street}-${r.address.street_number}号`
                    }
                    else {
                        alert('failed' + this.getStatus());
                    } 
                });

                console.log(11,map);
            },
            // 搜索地区
            searchArea(i){
                this.deleteLabelById('searchLabel')
                this.driving?.clearResults();
                this.transit?.clearResults();
                this.walking?.clearResults();
                if(!this.keyWords)return
                let that = this
                console.log(this.keyWords);
                //创建地址解析器实例
                var myGeo = new BMapGL.Geocoder();
                // 将地址解析结果显示在地图上,并调整地图视野
                myGeo.getPoint(this.keyWords, function(point){
                    if(point){
                        that.map.centerAndZoom(point, 16);
                         // //创建地址标注
                        var marker = new BMapGL.Marker(point);  // 创建标注
                        marker.id = 'searchLabel'
                        that.map.addOverlay(marker);
                        that.p1 = point
                        if(i=='dh'){
                            that.change()
                        }
                    }else{
                        alert('您选择的地址没有解析到结果!');
                    }
                }, that.city)
            },
            // 添加地图标点
            addLabel(e) {
                let that = this
                var point =  new BMapGL.Point(e.latlng.lng, e.latlng.lat)
                var mk = new BMapGL.Marker(point);
                console.log(mk);
                this.$prompt('请输入内容', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                }).then(({ value }) => {
                    mk.id = Math.random()*100000000000000000
                    mk.text = value?value:''
                    console.log(mk);
                    this.mkList.push({id:mk.id,text:mk.text,latLng:mk.latLng})
                    this.map.addOverlay(mk);
                    var opts = {
                        width : 200,     // 信息窗口宽度
                        height: 100,     // 信息窗口高度
                        title : "" , // 信息窗口标题
                        message:""
                    }
                    var infoWindow = new BMapGL.InfoWindow(value?value:'', opts);  // 创建信息窗口对象 
                    mk.addEventListener("click", function(e){
                        that.map.openInfoWindow(infoWindow, point); //开启信息窗口
                    });
                }).catch(() => {
                    
                });
            },
            // 删除地图标点
            deleteLabelById(id){
                var allOverlay = this.map.getOverlays();
                for (var i = 0; i < allOverlay.length ; i++){
                    if(allOverlay[i].id&&allOverlay[i].id==id){
                        this.map.removeOverlay(allOverlay[i]);
                    }
                }
            },
            // 点击显隐工具栏
            clickShowTool(){
                console.log('aaa');
                this.toolStatus = !this.toolStatus
            }
        },

    })
</script>
</html>

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

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

相关文章

pytest入门一:用例的执行范围

从一个或多个目录开始查找&#xff0c;可以在命令行指定文件名或目录名。如果未指定&#xff0c;则使用当前目录。 测试文件以 test_ 开头或以 _test 结尾 测试类以 Test 开头 &#xff0c;并且不能带有 init 方法 测试函数以 test_ 开头 断言使用基本的 assert 即可 所有的…

steel-browser - 专为AI应用构建的开源浏览器自动化 API

Steel是一个开源浏览器 API&#xff0c;可以轻松构建与 Web 交互的 AI 应用程序和代理。您无需从头开始构建自动化基础设施&#xff0c;而是可以专注于 AI 应用程序&#xff0c;而 Steel 会处理复杂性。 2300 Stars 99 Forks 4 Issues 5 贡献者 Apache-2.0 License TypeScript …

前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码

技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址&#xff1a; git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…

继电器控制与C++编程:实现安全开关控制的技术分享

在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…

Stable Diffusion Controlnet常用控制类型解析与实战课程 5

本节内容&#xff0c;是stable diffusion controlnet常用控制类型与实战的第5节课程。在前面几期课程中&#xff0c;我们已经陆续学习了controlnet的多种控制类型&#xff0c;本节课程&#xff0c;我们将继续讲解revision&#xff0c;instructp2p&#xff0c;ip-adapter&#x…

spark如何自定义函数

UDF&#xff1a;一对一的函数【User Defined Functions】 substr、split、concat、instr、length、from_unixtime UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 count、sum、max、min、avg、collect_set/list UDTF&#xff1a;一对多的函…

linux网络编程 | c | select实现多路IO转接服务器

poll实现多路IO转接服务器 基于该视频完成 04-poll函数实现服务器_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 要求&#xff1a;能看懂看&#xff0c;看不懂也没啥大事&#xff0c;现在基本都用epoll代替了 大家看视频思路吧&#xff0c;代码就是从讲义里面copy了一份…

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中&#xff0c;集合类&#xff08;Collections&#xff09;是构建高效程序的核心组件之一&#xff0c;而 List 接口作为集合框架中的重要一员&#xff0c;是一个有序、可重复的元素集合。与 Set 接口不同&#xff0c;List 保证了元素的顺序性&#xff0c;并允许存…

HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声&#xff0c;点个关注吧&#xff0c;代码如下&#xff0c;网页有移动端适配 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

内网穿透讲解

什么是内网穿透 内网穿透是一种网络技术&#xff0c;它允许外网或者其他局域网的用户来访问这个局域网的服务器资源&#xff0c;让资源的利用率更高&#xff0c;更加灵活&#xff0c;但是也要确保网络安全。 工作原理 如果你在公司&#xff0c;但是你需要使用到你家里的那台电…

Harmonyos之深浅模式适配

Harmonyos之换肤功能 概述实现原理颜色适配颜色资源配置工具类编写界面代码编写适配效果 概述 深色模式&#xff08;Dark Mode&#xff09;又称之为暗色模式&#xff0c;是与日常应用使用过程中的浅色模式&#xff08;Light Mode&#xff09;相对应的一种UI主题。 换肤功能应…

蓝桥杯刷题——day4

蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年&#xff0c;他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是&#xff1a;20,24,40,48,60,72,80,96,100,120。请问第2…

Git:常用命令

一、查看当前分支 git branch 二、查看所有分支 git branch -a 三、切换到远程分支 git checkout origin/分支名 示例&#xff1a;git checkout origin/dev 四、拉取远程分支代码 git pull origin 分支名 示例&#xff1a;git pull origin dev 五、常用指令 查看暂存区…

算法题(4):报数游戏

审题&#xff1a;首先这题本质上是数学题中的找规律问题&#xff0c;我们需要用到编程的地方也只是辅助计算 思路&#xff1a;首先先用枚举法多算几个数出来&#xff0c;然后观察规律 枚举之后我们发现从第一个位置开始每过十个数就会增加120&#xff0c;所以每十个数可以算一个…

短视频矩阵源码开发部署全流程解析

在当今的数字化时代&#xff0c;短视频已成为人们娱乐、学习和社交的重要方式。短视频矩阵系统的开发与部署&#xff0c;对于希望在这一领域脱颖而出的企业和个人而言&#xff0c;至关重要。本文将详细阐述短视频矩阵源码的开发与部署流程&#xff0c;并附上部分源代码示例&…

【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解

【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解 一、单片机概念 单片机&#xff1a;Single-Chip Microcomputer&#xff0c;单片微型计算机&#xff0c;是一种集成电路芯片 1.1RAM里的SRAM和DRAM SRAM&#xff08;Static Random Access Memory&…

STM32仿真——01创建工程

目录 1.需要用到的软件工具​编辑 2.第一步Proteus软件新建工程​编辑 3.第二步——stm32cubumx 4、MDK代码编写 #注意安装的过程或者使用过程使用英文&#xff0c;以防报错&#xff1b; 1.需要用到的软件工具 2.第一步Proteus软件新建工程 选中&#xff0c;默认 先布局&…

Spark3.2.0集群部署ON YARN

环境说明 准备三台服务器&#xff0c;分别为&#xff1a;bigdata141&#xff08;hadoop 主节点&#xff09;、bigdata142、bigdata143确保 hadoop 集群先启动好&#xff0c;我这边的 hadoop 版本为 3.2.0另准备一台服务器&#xff0c;bigdata144&#xff0c;作为 hadoop 客户端…

GLM-4-Plus初体验

引言&#xff1a;为什么高效的内容创作如此重要&#xff1f; 在当前竞争激烈的市场环境中&#xff0c;内容创作已成为品牌成功的重要支柱。无论是撰写营销文案、博客文章、社交媒体帖子&#xff0c;还是制作广告&#xff0c;优质的内容不仅能够帮助品牌吸引目标受众的注意力&a…

C++获取时间戳/计算运行时长

一、便于使用&#xff0c;使用chrono封装一个简单的类 #pragma once#include <chrono>using CTime_point std::chrono::high_resolution_clock::time_point;class CElapsedTime final { public:static CTime_point now() {return std::chrono::high_resolution_clock::…