OpenLayers标记地图点及点击地图点显示自定义弹出框

2023-10-28

css代码(设置弹出框样式)

 

/*设置弹出框样式*/
        .ol-popup {
            position: absolute;
            background-color: #eeeeee;
            -webkit-filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
            filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
            padding: 15px;
            border-radius: 10px;
            border: 1px solid #cccccc;
            bottom: 12px;
            left: -50px;
            min-width: 280px;
        }
        .ol-popup:after, .ol-popup:before {
            top: 100%;
            border: solid transparent;
            content: " ";
            height: 0;
            width: 0;
            position: absolute;
            pointer-events: none;
        }
        .ol-popup:after {
            border-top-color: #eeeeee;
            border-width: 10px;
            left: 48px;
            margin-left: -10px;
        }
        .ol-popup:before {
            border-top-color: #cccccc;
            border-width: 11px;
            left: 48px;
            margin-left: -11px;
        }
        .ol-popup-closer {
            text-decoration: none;
            position: absolute;
            top: 2px;
            right: 8px;
        }
        .ol-popup-closer:after {
            content: "✖";
        }

弹出框主要html代码

<div id="popup" class="ol-popup">
    <div class="pophead" style="width:100%;height: 20px;">
        //弹出框标题
        <div id="popup-title" style="font:bold 15px sans-serif;align:left;position: absolute;top: 5px;left: 8px;color: #000000">设备信息</div>
        //弹出框右上角关闭效果
        <a href="#" id="popup-closer" class="ol-popup-closer" style="color:#8e908c;"></a>
    </div>
    //弹出框内容
    <div id="popup-content" style="padding: 10px"></div>
</div>

 地图上显示标记点(前提数据库已存有坐标值信息)

//创建地图
var map = new ol.Map({
        layers: [
            /*new ol.layer.Tile({
                source: new ol.source.OSM()
            })*/
            //加载高德地图数据源
            getTdtLayer("vec_w", '高德底图'),
            getTdtLayer("cva_w", '高德标注')

        ],
        //地图属性
        view: new ol.View({
            center: [113.927905, 22.578945],
            //初始地图缩放
            zoom: 15,
            //限制地图缩放最小级别
            minZoom: 4,
            //限制地图缩放最大级别
            maxZoom: 19,
            projection: 'EPSG:4326'
        }),
        target: 'map'
    });

//获取高德图层
    function getTdtLayer(lyr, name) {
        var urls = [];
        for (var i = 1; i < 5; i++) {
            //urls.push("http://t" + i + ".tianditu.com/DataServer?T=" + lyr + "&X={x}&Y={y}&L={z}&tk=a4c01359108c54c0c298e2e1c59c81c6")
            urls.push("http://wprd0" + i + ".is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}")
        }
        var layer = new ol.layer.Tile({
            source: new ol.source.XYZ({
                urls: urls
                //url: "http://webst0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}"
            }),
            name: name
        });
        return layer;
    };

//显示图标
var pumpingStation = new ol.style.Style({  /*icon样式*/
        image: new ol.style.Icon(/** @type {olx.style.IconOptions} */({
            opacity: 0.95,
            src: '${pageContext.request.contextPath}/images/pumpingStation.jpg'
        }))
    });


//ajax从数据库读取图标坐标信息
    $.get(
        "${pageContext.request.contextPath}/xxx.action?wType=pumpingStation",
        function (data) {
            addPumpingStationJson(data);
        },
        "json"
    );

    function addPumpingStationJson(data) {
        //查询所有图标信息
        for (i = 0; i < data.features.length; i++) {
            //创建容器
            var waterIntakeLayer = new ol.layer.Vector({
                source: new ol.source.Vector(),
                name: '图标'
            });
            //取坐标值
            var feature1 = data.features[i];
            var featurexx = new ol.Feature({
                geometry: new ol.geom.Point(feature1.geom.coordinates)
            });
            //添加点的时候赋值属性
            featurexx.setProperties({
                id: feature1.w_id,
                name: feature1.w_name,
                desc: feature1.w_desc,
                type: "device"
            });
            //添加图标图案
            featurexx.setStyle(pumpingStation);
            //将图标特性添加进容器中
            waterIntakeLayer.getSource().addFeature(featurexx);
            //添加到地图显示
            map.addLayer(waterIntakeLayer);
        }
    }

点击地图上标记点弹出自定义弹出框

//拿到弹出框元素
var container = document.getElementById("popup");
//拿到弹出框内容元素
var content = document.getElementById("popup-content");
//拿到弹出框关闭元素
var popupCloser = document.getElementById("popup-closer");

    //创建弹出框容器
    var overlay1 = new ol.Overlay({
        //设置弹出框的容器
        element: container,
        //是否自动平移,即假如标记在屏幕边缘,弹出时自动平移地图使弹出框完全可见
        autoPan: true,
        autoPanAnimation: {
            duration: 250
            //当Popup超出地图边界时,为了Popup全部可见,地图移动的速度.
        }
    });
    //点击图标显示自定义弹出框
    map.on('click',function(e){
        var pixel = map.getEventPixel(e.originalEvent);
        map.forEachFeatureAtPixel(pixel,function(feature){
            var attr = feature.getProperties();
            var coodinate = e.coordinate;
            content.innerHTML = "<ul>" +
                    '<li>设备名称: ' + attr.name +'</li>' +
                    '<li>设备描述:' + attr.desc + '</li>' +
                    "</ul>";
            overlay1.setPosition(coodinate);
            map.addOverlay(overlay1);
        });
    });

    //关闭弹出框操作
    popupCloser.addEventListener('click',function(){
        overlay1.setPosition(undefined);
    });

效果如图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenLayers标记地图点及点击地图点显示自定义弹出框 的相关文章

  • 使用其innerHTML查找元素

    请看一下这个 DOM 树 div div span Home1 span div span Home2 span span Home3 span div 现在假设我有一个场景 我以某种方式获得了第一个跨度的innerHTMLHome1 是否
  • 自动完成仅显示消息并且结果可用,使用向上和向下箭头键进行导航。而是显示列表

    我的问题很清楚 我正在使用 jquery 自动完成 我不知道为什么它只向我显示消息 9 results are available use up and down arrow keys to navigate 没有向我显示结果列表 这是我的
  • 理解 z-index:该元素如何出现在其父级同级元素的前面?

    为什么当我删除时红色 div 位于绿色 div 前面z index from wrapperRed 感觉像z index是沿着链条向上继承的 如果我改变z index将绿色 div 更改为 6 即使删除第一句中描述的行后 它仍保留在红色 d
  • 链接无效

    我正在尝试使用以下命令创建一组指向页面中特定部分的链接 a href 符号 但它似乎不起作用 点击链接似乎没有任何反应right click gt open in a new tab更改 url 但不会移动到页面的其他部分 我使用的是火狐浏
  • 如何使自定义 Web 组件可聚焦?

    我正在写一个自定义网络组件 https github com denilsonsa html5 knob这意味着是互动的 我如何告诉浏览器这个自定义组件应该获得焦点 我希望我的自定义元素 可以聚焦 通过选项卡导航 集中注意力时可以接收按键信
  • 返回重定向作为对 Ajax(fetch、XHR 等)请求的响应

    如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果服务器发送重定向 又名 302 响应加上 Location 标头 浏览器将自动遵循重定向 对此的回应second请求 假
  • 在 Angular html 模板中访问常量枚举

    假设我有一个常量枚举 export const enum MyConstEnum Value1 Value1 Value2 Value2 Value3 Value3 现在我想在我的 Angular 模板中使用它 span This has
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 使用本地存储在从另一个表保存的 HTML TABLE 中打印 JSON,以便我在另一个页面上打印我的表

    在我的作业中 我必须使用用户输入中的数据并将数据保存在本地存储中 我必须以水平表格式将这些数据从本地存储打印到其他页面 为此 我编写了用于用户输入并将数据保存在本地存储中的代码 div p p div
  • html 电子邮件内的背景图像 css - Gmail 不支持

    我想向我的用户发送如下所示的带有背景图像 css 的 html 正文电子邮件 div style width 500px height 1000px background color black background image none
  • Bootstrap:如何将按钮组对齐在中心(垂直)

    在下面的代码中
  • 防止垃圾邮件按钮呼叫功能

    如何防止调用函数时出现垃圾邮件按钮 就像用户只能在按钮上每 1 秒调用一次该函数 有办法做到吗 因为我尝试了 setTimeout 但没有成功 它仍然在发送垃圾邮件 顺便说一句 我使用 Jquery 这是我的代码
  • 转义 h 轮廓

    因此 我一直在尝试找出在被较低级别的标题吸引后添加内容的最佳方法是什么 section h1 Title of Section h1 h2 Related 1 h2 h2 Related 2 h2 p I NEED THIS TO BE P
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • CSS 到底如何计算相对尺寸

    我想更好地理解某些 CSS 行为 这与具体问题无关 我只是在调试网站时遇到的 让我们在固定位置的 div 中放置一个全宽图像 div img style width 100 src https via placeholder com 150
  • 如何在模态打开时防止主体滚动

    我在用着W3schools 模态脚本 https www w3schools com howto tryit asp filename tryhow css modal我想添加一个功能 防止模型打开时整个主体滚动 我根据我的需要对原始脚本做
  • 使用 CSS 的响应式图像

    我发现调整图像大小以使其具有响应能力很棘手 我正在开发一个 php 应用程序来自动将网站转换为响应式版本 我有点被图像困住了 我已经成功地为网站上的每个图像添加了一个包装类 并且可以很好地调整图像的大小 我的问题在于自然小于窗口的图像 例如
  • 使用 CSS 折叠和展开元素

    我正在尝试构建一个页面 加载时仅可见标题 并且 当用户单击标题时 每个标题下方的表格会在隐藏和显示状态之间切换 我的限制是只能在 CSS 中执行此操作 这是我到目前为止想到的 https jsfiddle net Argoron c1ypx

随机推荐

  • 剑指 Offer II 033. 变位词组&剑指 Offer II 035. 最小时间差 -做题总结和心得(剑指offer进阶-哈希表部分)

    剑指 Offer II 033 变位词组 该题解法是hash sort 答案是评论区大佬写的 大体思路 创建一个哈希表 再将每个字符串变成字符数组 排序后若哈希表里不存在排序后的字符串 则创建索引 然后将原字符串放进对应索引的数组里 cla
  • cartographer 代码思想解读(7)-位姿估计器PoseExtrapolator实现

    cartographer 代码思想解读 7 位姿估计器PoseExtrapolator实现 pose extrapolator类定义 插入IMU数据 AddImuData 插入里程计数据 AddOdometryData UpdateVelo
  • Plotly可视化:TypeError: box() got an unexpected keyword argument ‘box_color‘

    一 问题描述 我用Plotly库进行可视化 import plotly express as px category orders month stage month end month middle month start fig px
  • C++ 鼠标点击的获取

    C 鼠标点击 首先一个比较常用的宏定义如下 define KEY DOWN VK NONAME GetAsyncKeyState VK NONAME 0x8000 1 0 使用KEY DOWN 鼠标事件 可以方便获取很多鼠标的事件 鼠标各个
  • 设计模式-----工厂模式

    一 工厂模式简介 工厂模式分为简单工厂模式 工厂方法模式和抽象工厂模式 它们都属于设计模式中的创建型模式 其主要功能都是帮助我们把对象的实例化部分抽取了出来 目的是降低系统中代码耦合度 并且增强了系统的扩展性 二 简单工厂模式 简单工厂模式
  • 【最新】如何降低深度强化学习研究的计算成本(Reducing the Computational Cost of DeepRL)...

    深度强化学习实验室 官网 http www neurondance com 论坛 http deeprl neurondance com 人们普遍认为 将传统强化学习与深度神经网络相结合的深度强化学习研究的巨大增长始于开创性的DQN算法的发
  • C# 对西门子1200PLC 的优化过的DB块进行符号寻址

    最近一直在学习C 一直想利用C 对西门子的PLC的优化DB块进行数据读取 因为S7通讯只支持绝对地址 这样的话 对PLC端编程很不友好 后来发现atvise这个小软件 发现它能够符号寻址西门子PLC 然后通过OPC转发出去 这样的话 我就在
  • 《现代密码学教程》

    第一章 密码学概论 第二章 密码学基础 第三章 古典密码体制 第四章 分组密码 第五章 序列密码 第六章 Hash密码 第七章 公钥密码体制 第八章 数字密码签名 第九章 密码协议 第十章 密钥管理
  • 对象池的简单应用

    对象池呦 对象池里只有一个预制体 队列对象池 对象池里面有多个预制体 创建和销毁的伪代码 代码 测试功能 做个预制体吧 开始测试 对象池的概念 对象池是个什么东西呢 对象池是用来管理对象的一个池子 当一个物体需要大量的创建和删除时 由于函数
  • 2021年1月,DB-engines数据库排名

    2021年1月份 排行前10的数据库分别为 Oracle MySQL Microsoft SQL Server PostgreSQL MongoDB IBM Db2 Redis Elasticsearch SQLite Cassandra
  • 7.基于STM32C8T6的四旋翼无人机的飞控制作----实践操作2,AD电路板绘制-原理图库绘制

    原理图库和封装库准备 建立对应关系 Altium上绘制电路板有三种库 还有一种是集成库 不予以介绍 原理图库和封装库都可以直接用现成的库直接添加库 也可以完全自己绘制 也可以自己绘制其中一部分 另一部分直接拷贝别的库里面的元件 原理图库sc
  • Java里的包装类型

    Java里的包装类型 其实也就那么几个 基础数据类型 包装类型 和面向过程的编程不同 Java里 一切皆对象 但是就有那么一些例外 就是常见的int char boolean float double byte short long 八大基
  • 【专注力】如何打完游戏后只用15秒就进入学习状态

    教你如何打完游戏后只用15秒就进入学习状态
  • java基础语法

    Java基础语法 注释 单行注释 注释一行 多行注释 注释多行 文档注释 标识符 字母 数字 下划线 数字不能开头 数据类型扩展及面试题讲解 整数 二进制 0b开头 八进制 十进制 十六进制表示及计算问题 如 int a 10 十进制 10
  • Linux其实也是时间管理大师——掌握crontab

    引言 欸乃一声山水绿 回看天际下中流 岩上无心云相逐 勿埋我心 做网站的哥们都有一个共同的习惯 那就备份网站的数据 现在宝塔自带的备份也还可以 但是如果自己想要定时运行自定义脚本呢 那就需要用到Linux的时间管理大师了 crontab L
  • eigen常用操作

    基本操作 Eigen Matrix
  • TCP/IP协议栈模型分析

    一 TCP IP协议 标准TCP IP协议是用于计算机通信的一组协议 通常被称为TCP IP协议栈 以它为基础组建的互联网是目前国际上规模最大的计算机网络 正因为互联网的广泛应用 使得TCP IP成为了事实上的网络标准 TCP IP传输协议
  • 大数据——Java 知识点整理

    1 JDK 和 JRE 有什么区别 JDK Java Development Kit 的简称 java开发工具包 提供了java的开发环境和运行环境 JRE Java Runtime Environment 的简称 java运行环境 为ja
  • Java是未来的第一编程语言吗?

    点击上方 程序员小乐 关注 星标或置顶一起成长 每天凌晨00点00分 第一时间与你相约 每日英文 Thinking too much of others makes you nothing in their eyes 把别人看得太重 结果在
  • OpenLayers标记地图点及点击地图点显示自定义弹出框

    css代码 设置弹出框样式 设置弹出框样式 ol popup position absolute background color eeeeee webkit filter drop shadow 0 1px 4px rgba 0 0 0