OpenLayers学习笔记高级篇(二、地图控件)

openlayers+vue 仿百度罗盘功能(指北针) 阅读详情

在OpenLayers 3中,地图控件指的是下图标注的这些,包括缩放按钮,标尺,版权说明,指北针等等。

他们不会随着地图的移动而移动,一直处于一个固定的位置。 在实现上,并不是在画布上绘制的,而是使用传统的HTML元素来实现的,便于同地图分离,也便于界面实现。 在本章节中,将先概览OpenLayers 3中已有的地图控件,对其实现进行分析,在此基础上进一步修改其样式,从而定义自己的控件。

OpenLayers 3目前内置的地图控件类都在包ol.control下面,依次有:

  • ol.control.Attribution: 右下角的地图信息控件
  • ol.control.FullScreen: 全屏控件
  • ol.control.MousePosition: 鼠标位置控件
  • ol.control.OverviewMap: 鸟瞰图控件
  • ol.control.Rotate: 指北针控件
  • ol.control.ScaleLine: 比例尺控件
  • ol.control.Zoom: 缩放按钮控件
  • ol.control.ZoomSlider: 缩放滚动条控件
  • ol.control.ZoomToExtent: 放大到设定区域控件

每一个类都有一些设置参数,可对照官网API的文档来了解其对应的功能。

默认情况下,在地图上是不会显示这么多地图控件的,只会应用ol.control.defaults()这个函数返回的地图控件,默认包含了ol.control.Zoom,ol.control.Rotate和ol.control.Attribution这个控件。 其使用方式同ol.interaction.defaults()很像,同样可以设置一些参数来控制控件的一些功能,从而实现定制化需求。

1、下面我们来实现一个没有任何控件的地图:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>点线面圆的绘制</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
</head>

<body>
     <div id="map" style="width: 100%"></div>
<script type="text/javascript">
    var map = new ol.Map({
        // 设置地图控件,默认的三个控件都不显示
        controls: ol.control.defaults({
        	//右下角的地图信息控件
            attribution: false,
            //指北针控件
            rotate: false,
            //缩放按钮控件
            zoom: false
        }),
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
  
          })
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          zoom: 10
        })
    });
</script>
</body>

</html>


看一下效果:

地图已经没有了任何的控件信息!其实如果让地图控件都不显示有一个更简介的写法:controls: [],大家可以自行测试一下!

 2、我们再实现一个加载了所有基本控件的地图的展示:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>去除所有地图控件</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
</head>

<body>
     <div id="map" style="width: 100%"></div>
<script type="text/javascript">
    var map = new ol.Map({
         // 在默认控件的基础上,再加上其他内置的控件
        controls: ol.control.defaults().extend([
        	//全屏
            new ol.control.FullScreen(),
            //鼠标位置控件
            new ol.control.MousePosition(),
            //鸟瞰图控件
            new ol.control.OverviewMap(),
            //比例尺控件
            new ol.control.ScaleLine(),
            //缩放滚动条控件
            new ol.control.ZoomSlider(),
            // 放大到设定区域控件
            new ol.control.ZoomToExtent()
        ]),
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
  
          })
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          zoom: 10
        })
    });
</script>
</body>

</html>



看一下效果:

下图是一个界面控件和类的对照关系图: 

 

每一个控件都有相应的参数设置,如果具体到某一个控件使用时,不能满足需求,可以先参照官网API说明,进行相应使用。

3、如果我们想改变控件的UI,应该如何改变呢?其实也是非常简单的,我们先使用开发者调试工具获取到控件UI,然后直接使用css或者javascript修改即可!我们再来两个修改控件UI样式的demo:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>添加所有地图控件</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
    <style>
    	.ol-zoom .ol-zoom-in {
	    background-color: #0000ff;
	    color: #ff0000;
	    }
	    .ol-zoom .ol-zoom-out {
	    background-color: #0000ff;
	    color: black;
	    }
	    
    </style>
    
}
</head>

<body>
     <div id="map" style="width: 100%"></div>
<script type="text/javascript">
    var map = new ol.Map({
         // 在默认控件的基础上,再加上其他内置的控件
        controls: ol.control.defaults().extend([
        	//全屏
            new ol.control.FullScreen(),
            //鼠标位置控件
            new ol.control.MousePosition(),
            //鸟瞰图控件
            new ol.control.OverviewMap(),
            //比例尺控件
            new ol.control.ScaleLine(),
            //缩放滚动条控件
            new ol.control.ZoomSlider(),
            // 放大到设定区域控件
            new ol.control.ZoomToExtent()
        ]),
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
  
          })
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          zoom: 10
        })
    });
</script>
</body>

</html>



这一个我们是通过直接修改css样式改变控件UI的,可以看一下效果:

我们的地图放大缩小的控件UI已经发生了改变!

再来一个通过javascript修改控件UI的demo:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>添加所有地图控件</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/jquery.js" charset="utf-8"></script>
</head>

<body>
     <div id="map2" style="width: 100%"></div>
<script type="text/javascript">
    new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          })
        ],
        target: 'map2',
        view: new ol.View({
          center: ol.proj.transform(
              [104, 30], 'EPSG:4326', 'EPSG:3857'),
          zoom: 10
        })
    });

    // 设置放大按钮符号,下面这个代码需要引入jquery,或者zepto库
    $('#map2 .ol-zoom-in').html('<>');
</script>
</body>

</html>



这里我们引入了JQuery库使用js代码对控件样式进行了修改,看一下效果:

修改成功!既然我们可以通过css或者js修改控件的ui,那么我们可不可以在地图上自定义控件呢?显然是可以的,自定义控件就相对简单,共分为两个步骤,第一步是构建界面,第二步是用代码实现功能。 下面自定义了一个输出当前地图的功能的demo:

3、自定义输出当前地图的控件:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>                  
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
    <meta content=always name=referrer>
    <title>自定义地图输出控件</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/jquery.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/fileSave.js" charset="utf-8"></script>
    <style>
    	.share {
		    position: absolute;
		    top: 10px;
		    right: 10px;
		    border: 1px;
		    border-color: #333;
		    background-color: #339999;
		    color: #fff;
		    box-shadow: 0px 0px 2px #666;
		    cursor: pointer;
		    padding: 0 4px 0 4px;
		}
    </style>
</head>

<body>
     <div id="map" style="width: 100%"></div>
<script type="text/javascript">
    var map = new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          })
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [120.374798,36.07316], 'EPSG:4326', 'EPSG:3857'),
          zoom: 10
        })
    });

    // 在viewport节点下添加一个分享按钮
    var viewport = map.getViewport();
    $(viewport).append('<div id="share" class="share">地图输出</div>');

    // 监听按钮点击事件,执行相关操作
    document.getElementById('share').onclick = function() {
         	map.once('postcompose', function (event) {
            var canvas = event.context.canvas;
            canvas.toBlob(function (blob) {
                saveAs(blob, 'map.png');
            });
        });
        map.renderSync();
    }
</script>
</body>

</html>




这次先解释一下代码:首先在viewport节点下添加一个输出按钮,然后监听这个按钮,这里我们使用了一个saveAs方法,这是一个调用的封装好的保存文件的js文件,最后重新渲染了map,来看一下效果:

点击地图输出,会显示我们已经下载好的地图:

打开map.png:

 

当前地图输出成功!

关于地图控件的介绍我们就到这儿了! 下一节我们会介绍地图中动画的使用!大家加油!

OpenLayers学习笔记(四) OpenLayers学习笔记(四) 高级篇 绘制点线面 var map = new ol.Map({ //底图 layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], target: 'map', view: new ol.View({ center: ol.proj.transform( [120.3 阅读详情

相关推荐

WebGIS实战:Vue+Openlayers实现地图控件的加载与控件自定义位置

在上一节《WebGIS实战:Openlayers实现网络地图的加载与切换》中,我们已经用到了一个地图控件了——图层切换控件(由Openlayers-Extension实现),这一节将讲述我们可能还会用到什么控件,而且由于这些控件位置都是固定在地图的某一位置,有时不满足我们的布局需求,这就需要我们知道怎么调整这些控件的位置了。

Oruizn的博客 5359

OpenLayers自定义一个指北针控件

OpenLayers,指北针

m0_64380162的博客 505

OpenLayers 3 之 地图控件(control)详解

每一个地图应用都应该有一些工具方便用户控制地图的行为,比如缩放,全屏,坐标控件等等,在 OpenLayers 中怎么添加这些工具呢?下面我给大家介绍一下 OpenLayers 中包含的控件种类,并介绍其使用方法。对控件的定制化,和对 OpenLayers 增加控件和优化控件等超出了本文范围。

研究与专注 2万+

Vue3使用ol加载wms地图

vue3使用ol加载GeoServer发布的wms地图

sunwolfer的博客 1422

OpenLayers实战,OpenLayers调用手机陀螺仪方向实现指南针效果

本章讲解OpenLayers如何使用手机陀螺仪实现指南针,除了需要调用陀螺仪外,还需要获取手机的实时位置。通过获取到的实时位置显示箭头图标位置,通过获取陀螺仪水平方向来调整箭头指向。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 925

OpenLayers 6 学习笔记:地图控件前端

你可以在 OpenLayers 的官方网站上下载最新版本的库文件,并将其包含在你的项目中。在上述代码中,我们首先创建了一个地图对象,并指定了其目标元素、图层和视图配置。然后,我们创建了一个缩放控件对象和一个鼠标位置控件对象,并将它们添加到地图中。OpenLayers 提供了多种内置的控件类型,如旋转控件、全屏控件等,你可以根据需要添加和配置这些控件。上述代码中,我们引入了 OpenLayers 的 CSS 文件和 JavaScript 文件,并创建了一个具有指定宽度和高度的。元素,用于容纳地图。

IOWEL的博客 114

OpenLayers教程三:地图控件之缩放控件

目录 一、地图控件简介 二、普通缩放控件 三、滑块缩放控件 四、缩放至特定位置控件 五、修改控件样式 一、地图控件简介 OpenLayers封装了很多控件用于对地图进行操作、显示地图信息等。 具体来说,控件是一个地图上可见的小部件,其DOM元素位于屏幕上的固定位置。它们可以包含用户输入(以按钮的形式),也可以只提供信息。控件的位置是使用CSS来确定,当然也可以使用C...

不睡觉的怪叔叔的博客 1万+

Vue+OpenLayers6入门教程汇总目录,OpenLayers教程,Vue+OpenLayers中文文档,OpenLayers手册,OpenLayers6文档教程,OpenLayers中文手册

OpenLayers介绍,相比较其他地图引擎有什么优点四种流行地图引擎比较Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 1万+

OpenLayers基础教程——常规的地图控件

1、前言 熟悉GIS的同志对地图控件应该不会陌生,ArcMap中就有很多地图控件,比如放大、缩小、全图等。其实在OpenLayers中也有很多地图控件,它们都继承了ol.control.Control,下面就来一一介绍。 2、缩放——Zoom 缩放控件是OpenLayers默认就加载的,它对应的是ol.Control.Zoom,如下图所示: 3、属性——Attribution 属性控件也是OpenLayers默认就加载的,一般在地图右下角,主要是显示版权信息,它对应的是ol.Control.Attribu

HerryDong的博客 2625

专题图制作的源代码,包括指北针,图例,比例尺

比较齐全的专题图制作的源代码,主要包括指北针,比例尺,图例,以及输出为图片的源代码

在Vue中使用Compass的方法

本篇文章主要介绍了在Vue中使用Compass的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

openlayers [七] 地图控件controls详解

更多请见官网。

爱玩亚索的程序员 2076

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

vue3-openlayers地图控件大全:缩放、比例尺、全屏等15个实用控件使用技巧

vue3-openlayers是基于Vue 3.x和OpenLayers开发的Web地图组件库,提供了丰富的地图控件功能,帮助开发者快速构建交互式地图应用。本文将详细介绍15个实用地图控件的使用技巧,让你轻松掌握地图交互的核心功能。 ## 一、基础导航控件 ### 1. 缩放控件(Zoom Control) 缩放控件是地图最基础的导航工具,提供"+"和"-"按钮实现地图缩放。它通常位于地图的左

gitblog_00333的博客 1097

docker 安装oracle

本文介绍了使用Docker部署Oracle数据库的实践指南。主要内容包括:常用Oracle镜像的阿里云和华为云拉取地址,11g/12c/19c等不同版本的启动命令示例,以及连接数据库的基本信息。实战部分详细演示了Oracle 11g的安装过程,包括镜像拉取、容器启动、密码修改和数据库连接步骤,并通过Sql Developer和命令行两种方式创建用户。最后提到数据持久化的重要性,建议将数据库文件挂载到宿主机目录以防止容器删除导致数据丢失。文章提供了完整的操作命令和截图说明,适合需要快速部署Oracle测试环境

weixin_39766667的博客 373

ubuntu18.04安装xenomai3.1(百分百成功版)

ubuntu18.04安装xenomai3.1(百分百成功版),保姆级教学!!!

h542812556sdu的博客 2065

OpenLayers6学习笔记(二)—— 地图控件

一. 控件简介 归属控件(Attribution):展示地图资源的版权或归属,默认加入到地图中。 全屏控件(FullScreen):控制地图全屏展示。 坐标拾取控件(MousePosition):显示鼠标所在地图位置的坐标。 鹰眼控件(OverviewMap):地图的一个概览图。 比例尺控件(ScaleLine):地图比例尺。 旋转控件(Rotate):控制地图旋转,默认加入到地图中,alt+shift+左键旋转地图。 缩放控件(Zoom):控制地图缩放,默认加入到地图中。 滑块缩放控件(ZoomSlid

weixin_44030304的博客 2208

JS逆向实战:从宿务航空机票搜索到参数签名算法解析

在现代Web应用开发中,前端与后端的数据交互安全是核心技术环节。其原理通常涉及参数签名、令牌验证等机制,用于防止未授权访问和数据篡改。这些技术的核心价值在于保障接口调用的合法性与数据完整性,广泛应用于电商、金融、旅行预订等对数据安全要求较高的场景。以机票搜索为例,网站常通过动态生成的签名参数来验证请求来源。本文以宿务太平洋航空为案例,深入解析其搜索请求中关键参数(如signature)的生成逻辑,并演示如何通过浏览器开发者工具进行断点调试、变量追踪,最终使用Node.js与crypto-js库本地复现完整请

weixin_26642481的博客 752

OpenLayers基础教程——地图控件样式的扩展

1、前言 上一篇博客介绍了OpenLayers中的一些常规地图控件,而这些地图控件无一例外,使用的都是OpenLayers默认的控件样式。这篇博客就来介绍一下如何利用自定义的CSS样式对地图控件进行控制。 2、默认的控件样式 我们这里就以地图拾取控件——MousePosition为例进行介绍。首先我们添加一个地图拾取控件,不对其进行样式的修改,代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <h

HerryDong的博客 2199

交通规划仿真软件:TransCAD_(7).公交系统规划与分析

通过TransCAD进行公交系统规划与分析,可以有效地评估公交网络的性能,优化线路设计,提高服务质量。数据准备、模型建立、仿真运行和结果分析是公交系统规划与分析的关键步骤。在实际应用中,规划者和分析师可以根据仿真结果提出具体的优化建议,不断完善公交系统的运行效率和乘客体验。

kkchenjj的博客 956

服务器取证——服务器基础知识

服务器基础知识

记录并分享学习安全的知识点.. 2482

openlayers center_OpenLayers教程三:地图控件之缩放控件

一、地图控件简介 OpenLayers封装了很多控件用于对地图进行操作、显示地图信息等。 具体来说,控件是一个地图上可见的小部件,其DOM元素位于屏幕上的固定位置。它们可以包含用户输入(以按钮的形式),也可以只提供信息。控件的位置是使用CSS来确定,当然也可以使用CSS来调整。默认情况下,控件被放置在地图控件层(地图控件层在上一篇文章讲过),也就是CSS类名为ol-overlayCon...

weixin_39765339的博客 762

主题035:计算流体力学(CFD)

计算流体力学(Computational Fluid Dynamics, CFD)是利用数值方法求解流体流动、传热传质等问题的学科。CFD已成为化学反应工程中反应器设计和优化的重要工具。∂ρ∂t+∇⋅(ρu)=0 \frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{u}) = 0 ∂t∂ρ​+∇⋅(ρu)=0对于不可压缩流动:∇⋅u=0 \nabla \cdot \mathbf{u} = 0 ∇⋅u=0动量方程:∂(ρu)∂t+∇⋅(ρ

kkchenjj的博客 267

openlayers添加按钮_OpenLayers 3 之 地图控件(control)

OpenLayers 3 之 地图控件(control)地图控件(control)是指地图上比例尺,缩略图,拉近拉远的按钮,滚动控制条等控件,默认控件有三个,可以禁用。OpenLayers 3 之 地图控件(control)初始化与定制的代码如下:var map = new ol.Map({// 设置地图控件,默认的三个控件都不显示controls: ol.control.defaults({at...

weixin_39872872的博客 166

YOLOv改进 | YOLOv11更换主干Backbone之MobileNetV2(轻量化主干网络结构--高效轻量移动模型)

本文提出将YOLOv11的主干网络替换为轻量化的MobileNetV2,以提升模型在移动端设备的部署效率。MobileNetV2通过倒残差结构和线性瓶颈层,显著减少了计算量和参数量(降至1M~3M),同时保持多尺度特征提取能力。实验表明,改进后的模型在移动设备上可实现20-30 FPS的实时检测,适用于手机APP、无人机和工业监控等场景。核心代码展示了倒残差块的实现,通过深度可分离卷积和通道扩展/压缩实现高效特征提取。

走向CTO的路上... 1461

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OpenLayers 地图控件库推荐:提升开发效率的必备工具

地图控件是 WebGIS 应用中不可或缺的交互组件,它们帮助用户实现地图缩放、旋转、全屏切换等核心操作。OpenLayers 作为功能强大的开源地图库,提供了丰富的内置控件,同时支持开发者自定义扩展。本文将介绍几款提升开发效率的必备控件工具,包括基础控件使用指南、高级自定义技巧及实战案例。 ## 一、核心内置控件:开箱即用的基础工具 OpenLayers 内置了10余种基础控件,覆盖地图操作的...

gitblog_00101的博客 966

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: OpenLayers学习笔记高级篇(一、openlayers画点线面)
下一篇: OpenLayers学习笔记高级篇(三、地图动画)
MagicMHD
博客等级 码龄9年 503粉丝 78原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值