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标记地图点及点击地图点显示自定义弹出框 的相关文章

  • 数据表在按钮单击后初始化表(ajax,jquery)

    我在加载数据表对象时遇到问题 当我在页面加载时初始化并填充表时 它可以正常工作 下面的代码在页面重新加载时完美运行
  • AngularJS 选择元素设置所选索引

    所以我使用的是 Angular 这是我选择的 html
  • 强制 Flexbox 在特定项目之后换行(方向:列)

    我有导航 各个条目通过 Flexbox 一层一层地显示 方向 列 如果导航条目获得 分隔符 类 则导航应进入下一行 是否可以强制 Flexbox 执行 换行 nav display flex flex direction column na
  • Safari 6 (iOS 6) 弹性布局不会换行元素

    我需要将两个框放在列中 这在我测试过的其他浏览器中有效 但在 iOS 6 上的 Safari 6 中无效 例子 http jsfiddle net 5FESj 1 http jsfiddle net 5FESj 1 display webk
  • 向下滚动时如何使图像移动?

    这是我想要实现的目标的示例 https www flambette com en https www flambette com en 我尝试过更改图像的 css 属性 但效果不能满足我的需求 我尝试过以下代码 mydocument on
  • 如何在Python + Selenium中获取元素的值

    我在我的 Python 3 6 3 代码中得到了这个 HTML 元素 作为 Selenium网页元素当然 span class ocenaCzastkowa masterTooltip style color 000000 alt 5 sp
  • 调整 Twitter-Bootstrap 中按钮的大小

    我正在开发一个适合移动设备的网络应用程序 我希望它有一个非常简单的用户界面 包括大到连巨人安德烈都可以轻松点击的按钮 问题是 我没有看到通过将引导按钮的宽度或高度设置为百分比 像素数或简单地让它们填充其容器来显式调整引导按钮大小的简单方法
  • 使用 Vim 作为 HTML 编辑器

    您知道 Notepad 如何具有此功能 当您单击标签 例如 时 它也会自动突出显示结束标签 它叫什么 如何调整 Vim 使其也具有此功能 还有其他方法可以将 Vim 变成强大且高效的 HTML 编辑器吗 我在 vim 中完成所有 HTML
  • 如何用css3和html5制作不规则形状的div?

    我想知道是否有可能构建具有不规则形状的 div 类似于此 例如格陵兰岛 欧洲 非洲 我想使用 CSS3 和 HTML5 创建像这里这样的地图 以下是示例图像的链接 你所拥有的看起来像一个网格 你可以通过一个 div 上的许多渐变来获得它 也
  • 为什么响应式图像需要“高度:自动”?

    是否有必要定义height auto现在 原因是什么 img max width 100 height auto Thanks 在没有明确设置高度尺寸的图像上 它实际上默认为自动高度 所以如果你设置max width 100 高度将由浏览器
  • 如何防止在达到一定字符数后向文本区域输入内容?

    使用下面的代码 任何超过指定最大值的输入都将被删除 但这会产生一种效果 即键入字符后立即将其删除 我宁愿简单地阻止输入字符
  • 盒子大小是否可在电子邮件模板中使用

    我正在创建电子邮件模板 我发现了这个CSS 支持指南 https www campaignmonitor com css but box sizing不在那儿 我想知道是否支持该 CSS 属性 如果支持 哪些电子邮件客户端支持它 不 不支持
  • 使图像宽度为父 div 的 100%,但不大于其自身宽度

    我试图让图像 动态放置 对尺寸没有限制 与其父 div 一样宽 但前提是该宽度不比 100 时其自身宽度宽 我已经尝试过这个 但没有成功 img width 100 height auto max width 100 其中许多图像比它们的父
  • jQuery 面板滑块通过单击按钮打开但不会关闭

    我的页面上有一个按钮 可以使用 jquery 和 Modernizr 框架打开右侧面板 按钮位于屏幕最右侧 单击时 它会向左滑动并打开打开的面板 问题是 再次单击时它不会滑回到原来的位置 HTML div class cd panel fr
  • 自动调整元素 (div) 大小以适合水平内容

    我尝试谷歌搜索 但没有得到太多结果 我正在构建一个水平轮播 它在浮动的 LI 中显示图像 我想解决的问题是 每次我向轮播添加缩略图 我是延迟加载 时 我都需要重新计算轮播的宽度 以便所有浮动缩略图很好地并排排列 其一 我宁愿不必在 JS 中
  • jQuery AJAX post 收到 405 错误(不允许 HTTP 动词 POST)

    我有以下 jQuery 帖子到 ASP NET webmethod ajax type POST url AjaxWebMethods aspx UpdNote contentType application json charset ut
  • jQuery 显示/隐藏兄弟姐妹

    我有这段代码 旨在首先隐藏除第一个元素之外的所有相关元素 这个 做的不错啊接下来 它应该根据选择的项目显示 隐藏这些元素 但这部分不起作用 想法 jQuery accordion dl not first child hide hide a
  • 更改 CSS 样式表的选择器属性

    以下是我们传统上如何更改重复元素的样式 将样式应用到每个元素 function changeStyle selector prop val var elems document querySelectorAll selector Array
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • Ie11 不应用媒体查询样式

    IE11 忽略我的媒体查询并始终使用移动 CSS 奇怪的是 如果我改变浏览器宽度 即使只是 1 2 像素 浏览器也会自行渲染并显示媒体查询 我尝试了 css lint 我的 css 中没有错误 我的CSS没有什么特别的 只是简单的 css

随机推荐

  • 剑指 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