智慧校园--webGIS--高德地图

news2024/11/26 20:39:37

实现地图点击打卡,驾车路线。

需要自己去高德开发平台注册新建自己的项目保存key和秘钥

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 引入资源 -->
    <!-- 1.高德地图基础css样式 -->
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
    <!-- 2.基础样式 -->
    <link rel="stylesheet" href="./css//a.css">
    <!-- 3.引入地图资源 -->
    <script type="text/javascript">
        window._AMapSecurityConfig = {
            securityJsCode: "自己的秘钥",
        }
    </script>
    <script src="https://webapi.amap.com/maps?v=2.0&key=自己的key"></script>
    <!-- <script src="./js/store.js"></script> -->
</head>

<body>
    <div id="container"></div>
    <!-- 添加类名info、input-item...,使用高德里面的样式 -->
    <div class="info">点击地图标注热门地点</div>
    <div class="input-card" style="width:13rem">
        <h4>推荐;浏览路线</h4>
        <div class="input-item">
            <button class="btn" onclick="startAnimation()">开始动画</button>
        </div>
    </div>
</body>
<script>
    function getData(){
    if(!localStorage.getItem('geojson')){
        localStorage.setItem('geojson','[]')
    }
    return JSON.parse(localStorage.getItem('geojson'))
}
function saveData(data){
    localStorage.setItem('geojson',JSON.stringify(data))
}
    var map = new AMap.Map('container', {
        center: [114.402672, 30.518987],
        zoom: 16,
        viewMode: '3D',
        pitch: 45
    })

    AMap.plugin(['AMap.ToolBar',
        'AMap.Scale',
        'AMap.HawkEye',
        'AMap.MapType',
        'AMap.Geolocation',
        'AMap.ControlBar',
        'AMap.GeoJSON',
        'AMap.MoveAnimation'
    ], function () {
        // 在图面添加工具条控件,工具条控件集成了缩放、平移、定位等功能按钮在内的组合控件
        map.addControl(new AMap.ToolBar({
            position: {
                top: '80px',
                right: '25px'
            }
        }));
        map.addControl(new AMap.Scale());
        map.addControl(new AMap.ControlBar());
    })
    // JSON数据

    var geojson = new AMap.GeoJSON({
        geoJSON: null
    })
    if (JSON.stringify(getData()) != '[]') {
        // 导入数据
        geojson.importData(getData())
        // 恢复旧数据点击事件
        geojson.eachOverlay(function (mak) {
            mak.on('click', function (e) {
                // console.log(e.lnglat, '点击了旧数据');
                var ext = mak.getExtData()
                var click = ++ext._geoJsonProperties.click
                console.log('旧数据点击了' + click + '次');
                // 1.使用信息提示框显示
                var infowin = new AMap.InfoWindow({
                    anchor: 'top-center',
                    content: `<div>打卡了${click}次</div>`
                })
                //2. 显示提示框的位置
                infowin.open(map, mak.getPosition())
                saveData(geojson.toGeoJSON())

            })

        })
    }
    map.add(geojson)

    // 地图点击事件添加标注
    function handler(e) {
        var marker = new AMap.Marker({
            position: e.lnglat,
            extData: {
                _geoJsonProperties: {
                    gid: geojson.getOverlays().length + 1,
                    click: 0
                }
            }
        })
        // map.add(marker)
        // 覆盖物的点击事件
        marker.on('click', function (e) {
            // console.log(e.lnglat, '点击了');
            var ext = marker.getExtData()
            var click = ++ext._geoJsonProperties.click
            console.log('点击了' + click + '次');
            saveData(geojson.toGeoJSON())
            // 1.使用信息提示框显示
            var infowin = new AMap.InfoWindow({
                anchor: 'top-center',
                content: `<div>打卡了${click}次</div>`
            })
            //2. 显示提示框的位置
            infowin.open(map, marker.getPosition())
        })
        // 通过geojson对象来管理覆盖物、显示点
        geojson.addOverlay(marker)
        // 保存数据(将geojson对象转换成标准的GeoJSON格式对象)
        saveData(geojson.toGeoJSON())
    }
    map.on('click', handler) //地图点击事件调用
    //开始动画
    function startAnimation() {
        AMap.plugin(["AMap.Driving"], function () {

            var driving = new AMap.Driving({
                map: map,
                //驾车策略,
                policy: AMap.DrivingPolicy.LEAST_TIME
            })
            // 设计始点终点
            var start = new AMap.LngLat(114.399282, 30.517028)
            var end = new AMap.LngLat(114.408448, 30.522259)
            // 通过eachOverlay获取途经点定位
            var opts = {
                waypoints: []
            }
            geojson.eachOverlay(function (item) {
                opts.waypoints.push(item.getPosition())
            })
            driving.search(start, end, opts, function (status, result) {
                if (status == 'complete') {
                    console.log('规划路线完成', result);
                    // 获取路径点数组
                    var lineArr = []
                    result.routes[0].steps.forEach((item) => {
                        lineArr.push(...item.path)
                    })

                    // 实现模拟轨迹
                    var marker = new AMap.Marker({
                        map,
                        position: start, //定位
                        icon: 'https://a.amap.com/jsapi_demos/static/demo-center-v2/car.png', //icon标注
                        offset: new AMap.Pixel(-25, -13), //偏移量
                        autoRotation: true, //自动转换角度,
                        angle: -160, //开始的车头方向

                    })

                    // 绘制线的设置
                    var passedPolyline = new AMap.Polyline({
                        map: map,
                        strokeColor: "#AF5", //线的颜色
                        strokrWeight: 6, //线宽
                    })
                    marker.on('moving', function (e) {
                        passedPolyline.setPath(e.passedPath)
                    })
                    map.setFitView();
                    marker.moveAlong(lineArr, {
                        duration: 500,
                        autoRotation: true
                    })

                } else {
                    console.log('错误');
                }
            })
        })
    }
</script>

</html>

css:

html,
body,
#container {
    width: 100%;
    height: 100%;
}

实现效果

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

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

相关文章

测试Hyperledger Fabric环境

首先进入fabric-samples目录中的first-networked 子目录 cd fabric-samples/first-network 在first-network目录下有一个自动化脚本byfn.sh,可以使用-help参数查看相应的可 用命令&#xff0c;在命令提示符中输入如下命令&#xff1a; ./byfn.sh --help命令执行成功后&#…

【运维工程师学习二】OS系统管理

【运维工程师学习二】OS系统管理 1、操作系统管理2、进程管理3、进程的启动4、进程信息的查看4.1、STAT 进程的状态&#xff1a;进程状态使用字符表示的&#xff08;STAT的状态码&#xff09;,其状态码对应的含义&#xff1a;4.2、ps命令常用用法&#xff08;方便查看系统进程&…

【数据库八】MySQL MHA高可用配置及故障切换

MHA高可用配置及故障切换 1.什么是MHA2.MHA组成3.MHA特点4.案例实施&#xff1a;搭建MySQL MHA高可用及故障切换4.1 主节点数据库&#xff08;CentOS 7-5&#xff09;4.2 从节点数据库&#xff08;CentOS 7-6&#xff09;4.3 从节点数据库&#xff08;CentOS 7-7&#xff09;4.…

9.3 多路复用poll函数

目录 poll和epoll poll函数和epoll函数族 poll函数 ​编辑 poll函数&#xff1a;事件类型 epoll函数族 epoll_event结构体 poll和epoll poll函数和epoll函数族 poll函数 poll函数&#xff1a;事件类型 events&#xff1a; POLLIN&#xff1a;有数据可读 POLLPRI&#x…

python读取CSV文件表头字段乱序作json文件(自己笔记)

有时候我们会将csv文件的某列对应某列(或这某几列)&#xff1b;如{A&#xff1a;[B,C,D,E]},说白了就是一个键对应的值是一个列表&#xff0c;但是有时候我们的值在表头中位置不一致&#xff0c;这时候我们就需要先获取每一个字段的索引值&#xff0c;这样程序就会通过索引值自…

[Flask] Flask的请求与响应

1.Flask的请求 如果以GET请求访问URL&#xff0c;例如URL是127.0.0.1:5000/?nameandy&age18&#xff0c;那么如何获取这个URL的参数?如果以POST请求提交一个表单&#xff0c;那么又如何获取表单中各个字段值呢? Flask提供的Request请求对象就可以实现上述功能 Reques…

uniapp开发的微信小程序之实现转发功能以及页面跳转传递、接收对象

效果图&#xff1a; 转发功能&#xff1a; <template><view class"container"><button class"share-btn" open-type"share">转发</button></view> </template><script> export default {data() {re…

规划电子类专业生涯:打造单片机/嵌入式技术专家之路

如果我是一个电子类专业的学生&#xff0c;打算将来从事单片机/嵌入式方向的职业&#xff0c;我可能会采取以下步骤来规划我的职业生涯&#xff1a; 学术准备&#xff1a;我将全面学习电子工程的基础知识&#xff0c;包括模拟电子、数字电子、信号处理等方面的知识。我会确保自…

page cache 在内核中的数据结构

page cache 在内核中的数据结构是一个叫做 address_space 的结构体&#xff1a;struct address_space。 struct address_space {struct inode *host; // 关联 page cache 对应文件的 inodestruct radix_tree_root page_tree; // 这里就是 page cache。里边缓存了文件的所有缓…

拼多多购物中的4个开关需尽快关闭,防止个人购买信息泄露

拼多多购物中的4个开关需尽快关闭&#xff0c;防止个人购买信息泄露 随着网络购物的普及&#xff0c;越来越多的人选择在拼多多等平台进行购物。然而&#xff0c;在享受便利的同时&#xff0c;我们也要警惕个人购买信息泄露的风险。在拼多多购物时&#xff0c;有些设置可能会影…

Hyperledger Fabric核心配置文件(1)

1、core.yaml core.yaml配置文件是Peer节点的示例配置文件&#xff0c;具体路径在fabric-samples/config目 录下。该core.yaml示例配置文件共指定了如下六大部分内容。 1.日志部分 日志记录级别有6种&#xff1a; CRITICAL、 ERROR、 WARNING、 NOTICE、 INFO、 DEBUG. …

CUDA矩阵乘法GEMM优化,从全局内存到共享内存优化的详细流程

在​未优化的矩阵乘法​CA*B中&#xff0c;a、b和c分别是指向矩阵 A、B 和 C 的全局内存的指针&#xff1b;blockDim.x、blockDim.y、 和TILE_DIM都等于 w。wxw-thread 块中的每个线程计算 C 的tile中的一个元素&#xff0c;row并且col是由特定线程计算的 C 中元素的行和列。该…

celery----异步任务、延时任务、定时任务

Celery 是一个强大的分布式任务队列&#xff0c;它可以让任务的执行完全脱离主程序&#xff0c;甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务&#xff08;async task&#xff09;和定时任务&#xff08;crontab&#xff09;。它的架构组成如下图 &#xff1a…

初学帆软踩得坑——数据填报_Excel数据导入

第一次做数据填报&#xff0c;按照教程做完在用excel导入工具本地数据报表的时候出现 1、整块空白合并单元格&#xff0c;数据无法填入的现象 2、表格重新导入一批&#xff0c;无法成功入库&#xff0c;导致只能导入一次&#xff0c;如下图&#xff1a; 说明&#xff1a;点击…

python网络编程(四),用面向对象方式实现文件上传下载

一&#xff1a;背景 在之前已经实现了文件的下载&#xff0c;现在再来完善上传功能&#xff0c;并且使用面向对象来封装&#xff0c;让代码看起来更加清楚明了。 二&#xff1a; 使用规则和运行结果 下载文件&#xff0c;下载格式 get 文件名 get空格后面直接接文件名称&…

MySQL-SQL InnoDB引擎 (下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

直播预约通道&#xff1a; 【直播预告】HarmonyOS极客松赋能直播第三期&#xff1a;一次开发多端部署与ArkTS卡片开发

朴素模式匹配算法(暴力寻找字串)

目录 0. 前言1. 算法简介2. 代码实现3. 运行结果 0. 前言 使用朴素模式匹配算法查找子串是否位于主串中 开发环境&#xff1a;Dev-Cpp 操作系统&#xff1a;Windows10 专业版 1. 算法简介 朴素模式匹配算法&#xff0c;也称为暴力模式匹配算法或穷举法&#xff0c;是一种简…

自己动手写C语言float浮点数转换字符串的函数

最近在项目中用到了holtek厂商的HT45F24A和BA45F5650两款单片机。 用的开发工具是HT-IDE3000&#xff0c;烧录软件是HOPE3000。 这两款单片机都是8位的单片机&#xff0c;支持寄存器位操作。 HT45F24A单片机不带UART串口&#xff0c;要想实现串口功能&#xff0c;只能自己用定时…

基于肺部图片与文本信息的多模态模型架构

文章题为 「A transformer-based representation learning model with unified processing of multimodal input for clinical diagnostics」 https://www.nature.com/articles/s41551-023-01045-x &#xff08;arXiv版链接: https://arxiv.org/abs/2306.00864&#xff09; htt…