使用高德地图展示点位和信息窗体展示数据及播放视频

news2024/10/6 22:24:21

使用高德地图做了一个在地图展示点位,并通过点击,显示直播的功能,这个任务是为了之后大屏做准备。

这是一个能展示多个点标记,并在点击的时候弹出信息窗体,并在信息窗体中播放视频,且展示相关信息以及操作事件。

一、使用到的高德API介绍:

(一)、申请高德地图key

首先就是申请高德地图的key。

<script type="text/javascript"
        src="https://webapi.amap.com/maps?v=1.4.15&key=xxxxxxxxxxxxxxx"></script>

在html文件中,需要先准备一个“容器”,即添加

标签,然后给它一个id属性,方便后面定位地图容器进行操作。

<div id="container"></div> 

(二)、创建地图

创建的同时可以给地图设置中心点、级别、显示模式、自定义样式等属性,这里我使用的分别是:缩放级别、是否监控地图容器尺寸变化,默认值为false、地图中心点坐标值。

var map = new AMap.Map("container", {
    zoom: 8,
    resizeEnable: true,
    center: [116.397428, 39.90923],//中心点坐标
});

接着就是图层,默认是标准底图,但也可以添加其他图层,可以通过map.add方法添加图层:

这里使用的是卫星地图,通过放置在右上角的切换按钮,点击切换标准地图或者卫星地图。

var satelliteLayer = new AMap.TileLayer.Satellite();    // 卫星图

通过点击事件切换地图:

// 切换地图类型
$("#map_footer_div div").click(function (e) {
    e.preventDefault();
    // 如果为true,是标准图,赋值地图类型状态为false,通过map.remove()方法去除卫星图。
    if (mapFlag) {
        mapFlag = false;
        map.remove(satelliteLayer);
    } else {
        mapFlag = true;
        // 如果mapflag为false,说明 是卫星图
        map.add(satelliteLayer);
    }
})

官方地图 JS API 提供了标准、卫星、路网、路况、建筑等多个图层,还有其他更加高级的图层。尝试了几个图层,还是很有意思的。

(三)、点标记

官方提供了在地图之上绘制覆盖物的能力,比如点标记 Marker、文本标记 Text、圆点标记 CircleMarker。

使用起来还是很简单的,添加一个默认样式的点标记。

var marker = new AMap.Marker({
    position:[116.39, 39.9]//位置
})
map.add(marker);//添加到地图
map.remove(marker); // 移除的方法

(四)、事件功能和信息窗体

JS API 提供的Map、点标记、矢量图形的实例均支持事件,鼠标或者触摸操作均会触发相应的事件。我们通过给点标记绑定click事件来简单了解事件系统和信息窗体的基本使用:

var infoWindow = new AMap.InfoWindow({ //创建信息窗体
    isCustom: true,  //使用自定义窗体
    content:'<div>信息窗体</div>', //信息窗体的内容可以是任意html片段
    offset: new AMap.Pixel(16, -45)
});
var onMarkerClick  =  function(e) {
    infoWindow.open(map, e.target.getPosition());//打开信息窗体
    //e.target就是被点击的Marker
} 
var marker = new AMap.Marker({
    position: [116.481181, 39.989792]
})
map.add(marker);
marker.on('click',onMarkerClick);//绑定click事件

二、综合

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset=utf-8>
    <meta name="viewport" id="viewport"
        content="width=device-width,height=device-height,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="format-detection" content="telephone=no, email=no" />
    <script type='text/javascript' src="/gisapi/getscript"></script>
    <title></title>
    <style>
        ul li {
            list-style: none;
        }
        #map_footer {
            position: fixed;
            bottom: 0;
            right: 0;
        }
    </style>

<body>
    <div class="map_box" id="container"></div>

    <!-- 底部切换 地图类型 -->
    <footer id="map_footer">
        <div style="display:flex;justify-content: center;align-items: center;" id="map_footer_div">
            <div>
                <!-- 普通地图 -->
                <img id="map_nowx" style="display: inline-block; height:60px;" src="../images/map_nowx_active.png" alt=""></div>
            <div>
                <!-- 卫星地图 -->
                <img id="map_havewx" style="display: inline-block; height:60px;" src="../images/map_havewx.png" alt="">
            </div>
        </div>
    </footer>


    <script src="../script/jquery-1.12.2.min.js"></script>
    <script src="../script/flv.min.js"></script>
    <script src="../script/doT.min.js"></script>
    <script type="text/javascript" src="xxx"></script>

    <!-- 使用:前端渲染引擎doT.js -->
    <script id="dynamicDetailTemplate" type="text/x-dot-template">
        <div style="border-radius: 15px;width:375px;">
            <div id="monitorDiv">
                <!-- 直播视频 -->
                <video controls width="100%" height="210px" autoplay muted id="VideoObj" href="{{=it.url}}"></video>
            </div>
            
            <ul class="map_ul_right">
                ...    <!-- 底部信息 -->
            </ul>
        </div>
    </script>


    <script>
        var videoUrl;
        var mapFlag = true;     //为true则显示正常地图,false为卫星地图    
        var monitorList = [];   // 地图信息
        // 使用高德地图
        var infoWindow = new AMap.InfoWindow({
            offset: new AMap.Pixel(0, -30),
            anchor: 'bottom-center',
        });//信息窗口
        // 高德地图的open事件
        infoWindow.on('open', showVideo);
        var satelliteLayer = new AMap.TileLayer.Satellite();    // 卫星图
        var map = new AMap.Map("container", {
            resizeEnable: true,
            center: [119.47, 32.84],//中心点坐标
            zoom: 8
        });


        $(document).ready(function () {
            getMonitorList();
        });
        // 请求 点位数据的 接口
        function getMonitorList() {
            $.get("xxx",
                function (res) {
                    console.log('地图信息', res);

                    monitorList = res.resultTable;
                    for (var j = 0; j < monitorList.length; j++) {
                        var marker = new AMap.Marker({
                            position: [monitorList[j].lon, monitorList[j].lat],
                            mapId: monitorList[j].f_698,//	标识
                            map: map,
                            icon: new AMap.Icon({
                                image: '../images/xxx.png',   // 本地自定义图标位置
                                size: new AMap.Size(25, 25),  //图标大小  
                                imageSize: new AMap.Size(25, 25)
                            }),
                        });
                        // 给所有的点标注添加点击事件
                        AMap.event.addListener(marker, 'click', markerClick);
                    }
                }
            );
        }

        // 点击图标 触发事件
        function markerClick(e) {
            var windowInfo = {
                monitorId: e.target.De.monitorId,  //标识
            }

            // 请求 直播地址接口
            ajax.syncPost("xxx", { bindid: e.target.De.monitorId },
                function (ret) {
                    // 如果请求成功,说明有直播地址
                    if (ret.s) {
                        videoUrl = ret.o.flvUrl;

                        var dynamicDetailTemplate = $("#dynamicDetailTemplate").text();
                        var dynamicDetail = doT.template(dynamicDetailTemplate);

                        // 设置窗口内容和定位
                        infoWindow.setContent(dynamicDetail(windowInfo));
                        // 传入经纬度,信息窗体才会进行跟随
                        infoWindow.open(map, [e.target.De.position.lng, e.target.De.position.lat]);
                    }
                }
            );
        }

        // 定时器:不加定时器会导致视频的id找不到
        function showVideo() {
            setTimeout(function () {
                playFlv(videoUrl, '#VideoObj');
            }, 1000);
        };

        // 视频播放
        function playFlv(url, id) {
            if (flvjs.isSupported()) {
                this.flvPlayer = flvjs.createPlayer({
                    type: "flv",
                    url,
                });
                this.flvPlayer.attachMediaElement(document.querySelector("#VideoObj"));
                this.flvPlayer.load();
            }
        };

        // 点击其他地方,关闭信息窗体
        map.on('click', function () {
            infoWindow.close();
        });

        // 切换地图类型
        $("#map_footer_div div").click(function (e) {
            e.preventDefault();
            var map_id = $(this).find("img").attr("id");

            if (map_id == "map_nowx") {
                mapFlag = true;
                if (mapFlag) {
                    $("#map_nowx").attr("src", "../images/map_nowx_active.png");
                    $("#map_havewx").attr("src", "../images/map_havewx.png");
                    map.remove(satelliteLayer);
                }
            } else if (map_id == "map_havewx") {
                mapFlag = false;
                // 如果mapflat为false,说明 是卫星图
                if (!mapFlag) {
                    $("#map_havewx").attr("src", "../images/map_havewx_active.png");
                    $("#map_nowx").attr("src", "../images/map_nowx.png");
                    map.add(satelliteLayer);
                }
            }
        })
    </script>
</body>

</html>

在这里插入图片描述

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

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

相关文章

【Lilishop商城】No3-6.模块详细设计,商品模块-2(商品及强关联附属 商品sku、批发、图册等等)的详细设计

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代码…

队列的练习题

用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09; 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶int pop()移除并返回栈顶元素…

I2C总线式驱动开发

文章目录前言一、Linux内核对I2C总线的支持1.1、理解I2C设备驱动、I2C总线驱动以及I2C核心之间的关系1.2、i2c二级外设驱动开发涉及到核心结构体及其相关接口函数&#xff1a;二、I2C总线二级外设驱动开发方法-名称匹配2.1、i2c二级外设client框架&#xff1a;2.2、i2c二级外设…

[附源码]Nodejs计算机毕业设计基于java网上心理咨询系统数据分析Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Docker整体架构及底层通信原理简述

Docker 是一个 C/S 模式的架构&#xff0c;后端是一个松耦合架构&#xff0c;众多模块各司其职。 Docker运行的基本流程为&#xff1a; 1. 用户是使用Docker Client与Docker Deamon建立通信&#xff0c;并发送请求给后者&#xff1b; 2.Docker Deamon作为Docker架构中的主体…

复制项目配准信息,用于将超级大图贴到地图上

目录 1 前言 2 大图片另存为一个小图片&#xff0c;小图片文件名包含坐标参数 3 制作第二个普通配准项目&#xff0c;原来的大图不能用坐标信息命名 4 开始配准切图 1 前言 前面介绍过&#xff0c;如果已经知道一幅图片的任意2个角的坐标&#xff0c;可以用非常简单的方式…

Spring Bean的初始化过程 initializeBean

目录 1.定义对象 2.注册对象 3.DEBUG Aware处理 4.完整初始化流程概览 5. applyBeanPostProcessorsBeforeInitialization 5.1 this.beanPostProcessors 里面的处理顺序 5.1.1 ApplicationContextAwareProcessor 5.1.2 ApplicationListenerDetector 5.1.3 WebApplicatio…

水泥路面、桥梁基建、隧道裂痕裂缝检测数据集

在我之前的博文中已经写过几篇关于特定场景下的裂痕裂缝检测的模型实践文章&#xff0c;后面也有很项目应用都是基于此构建的&#xff0c;这里主要是对前面几篇博文的数据集进行介绍。 相应的系列文章如下&#xff0c;感兴趣的话可以自行移步阅读即可。 《基于yolov5sbifpn实…

Java基于springboot球员转会管理系统 +vue+elementUI

项目介绍 本球员转会管理系统是针对目前球员转会管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的球员转会管理系统存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信…

高精度加减乘除——C++实现

每日一句&#xff1a;每天早上醒来时&#xff0c;我们有两个简单的选择&#xff1a;回头去睡&#xff0c;继续做梦。或者起身去追逐梦想。 高精度加减乘除前言一、高精度加法1.基本思路2.分步讲解2.1输入字符数字2.2把字符数字转换为数字2.3实现add函数3.完整代码二、高精度减法…

[附源码]Python计算机毕业设计大学生网络安全题库系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Linux进程通信

写在前面 今天主要的任务就是知道什么是进程通信?进程通信是如何实现的?前面我们学习了基础IO,再往前看又学习进程的相关的概念,那么今天我们通过进程的通信来把他们用起来.这个话题挺重要的,但是没有前面的大. 进程通信 "通信"这个单词很好理解,就是两个或者多…

Codon

又搬来了一个框架 并没用过啊 说着比c还厉害~ 大伙谁 研究过呢? 希望不是和咱们的中药一样~~ 众所周知&#xff0c;Python 是一门简单易学、具有强大功能的编程语言&#xff0c;在各种用户使用统计榜单中总是名列前茅。相应地&#xff0c;围绕 Python&#xff0c;研究者开发了…

Vector-常用CAN工具 - CANoe入门到精通_05

CAPL Test Module 在“Vector-常用CAN工具 - CANoe入门到精通”的第4/4篇中介绍了作为Server端的Network Node节点以及相应的一些常用函数&#xff0c;今天我们来介绍下当前依然有很多人在用的自动化脚本开发编译器 - CAPL Test Module&#xff0c;这个基本能满足单个功能模块…

KingbaseES V8R6备份恢复案例之---sys_waldump解析wal日志PITR恢复

​案例说明&#xff1a; 复现用户删除表(drop table)误操作&#xff0c;通过wal日志解析找到误操作时间点&#xff0c;执行基于时间点的恢复(PITR)。适用版本&#xff1a; KingbaseES V8R6 一、模拟业务现场操作 1、查看当前对象信息 prod# \dList of relationsSchema | …

R语言逻辑回归预测分析付费用户

对于某企业新用户&#xff0c;会利用大数据来分析该用户的信息来确定是否为付费用户&#xff0c;弄清楚用户属性&#xff0c;从而针对性的进行营销&#xff0c;提高运营人员的办事效率。 相关视频&#xff1a;R语言逻辑回归&#xff08;Logistic回归&#xff09;模型分类预测病…

javaScript内存管理及监控

1.1 内存定义 内存由可读写单元组成&#xff0c;表示一片可操作空间&#xff0c;开发者主动申请空间、使用空间、释放空间。内存主要存储变量等数据&#xff0c;局部变量当程序执行结束&#xff0c;且没有引用的时候就会随着消失&#xff0c;全局对象会始终存活到程序运行结束。…

【简单项目实战】用C++实现学生成绩管理系统

目录 ●功能介绍 ●案例 ●代码展示 ●结果展示 ●功能介绍 用 C设计一个程序&#xff0c;能提供下列功能: 1. 录入学生成绩信息。按照学号&#xff0c;姓名&#xff0c;语文&#xff0c;数学&#xff0c;英语的格式录入学生的成绩。 2.展示目前录入学生的成绩信息。以…

MeterSphere使用mock基础

目录 一、添加mock数据 1、进入页面添加 2、 添加单个mock 3、添加多个mock数据 二、运行mock 1、选择设置接口的TEST 2、选择mock环境 3、设置定义的mock参数运行 一、添加mock数据 1、进入页面添加 在接口定义页面&#xff0c;按下图1-2-3顺序添加 2、 添加单个mock…

[附源码]Nodejs计算机毕业设计基于JAVA人事管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…