OpenLayers3实现对地图的基本操作


Posted in Javascript onSeptember 28, 2020

本文实例为大家分享了OpenLayers3实现对地图的基本操作代码,供大家参考,具体内容如下

1. 前言

对地图的基本操作就是对地图的放大、缩小、移动、复位和更新等,通过使用OpenLayers 3 框架中操作地图视图(View)的相应方法。

2. 实现思路

(1)新建一个网页,参照前面的文章加载OSM瓦片地图,通过视图设置地图的最大、最小缩放级别以及初试旋转角度,通过使用jQuery以及bootstrap来实现在缩放控件以及旋转控件鼠标悬停提示的效果。
(2)在地图容器中新建4个按钮(button),设置按钮的id,通过css控制按钮的样式
(3)为每个按钮添加 onclick 事件,在函数中调用 OpenLayer 3 中操作地图视图的相应方法,来实现单击放大、单击缩小、移动到某一位置以及复位功能。
(4)为缩放控件以及旋转控件添加tooltip提示信息,设置tooltip的冒泡位置。

3. 代码如下

html代码:

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

<head>
 <meta charset="UTF-8">
 <title>对地图的基本操作</title>
 <link rel="stylesheet" href="css/bootstrap.min.css" >
 <link rel="stylesheet" href="css/ol.css" >
 <link rel="stylesheet" href="css/ZoomSlider.css" >
 <script src="js/ol.js"></script>
 <script src="js/jquery-3.2.1.min.js"></script>
 <script src="js/bootstrap.min.js"></script>
 <script src="js/Operation.js"></script>
 <style>
 #map {
  width: 100%;
  height: 570px;
 }

 #menu {
  float: left;
  position: absolute;
  bottom: 10px;
  z-index: 2000;
 }

 .tooltip-inner {
  white-space: nowrap;
 }
 </style>
</head>

<body onload="init()">
 <div id="map">
 <div id="menu">
  <button id="zoom-out" class="btn btn-info">单击缩小</button>
  <button id="zoom-in" class="btn btn-info">单击放大</button>
  <button id="panto" class="btn btn-info">移动地图</button>
  <button id="restore" class="btn btn-info">复位地图</button>
 </div>
 </div>
</body>

</html>

js代码:

function init() {
 //实例化Map对象,用于加载地图
 var map = new ol.Map({
 target: 'map', //地图容器的div
 // 在地图容器中加载图层
 layers: [
  // 加载瓦片图层数据OSM
  new ol.layer.Tile({
  source: new ol.source.OSM()
  })
 ],
 // 地图视图设置
 view: new ol.View({
  center: [12950000, 4860000], //地图显示中心设置
  zoom: 8, //地图初始显示级别
  minZoom: 6, //最小级别
  maxZoom: 12, //最大级别
  rotation: Math.PI / 6 //设置旋转角度
 })
 });
 // 地图视图的初始参数
 var view = map.getView();
 var zoom = view.getZoom();
 var center = view.getCenter();
 var rotation = view.getRotation();
 // 实现单击缩小按钮的功能
 document.getElementById('zoom-out').onclick = function() {
  var view = map.getView(); //获取当前地图视图
  var zoom = view.getZoom(); //获得当前缩放级别
  view.setZoom(zoom - 1); //地图缩小一级
 }
 // 实现单击放大的功能按钮
 document.getElementById('zoom-in').onclick = function() {
  var view = map.getView(); //获取当前地图视图
  var zoom = view.getZoom(); //获得当前缩放级别
  view.setZoom(zoom + 1); //地图放大一级
 }
 // 平移功能
 document.getElementById('panto').onclick = function() {
  var view = map.getView(); //获取当前地图视图
  var lz = ol.proj.fromLonLat([103.73333, 36.03333]);
  view.setCenter(lz); //平移地图
 }
 // 复位功能(复位到初始复位)
 document.getElementById('restore').onclick = function() {
  view.setCenter(center); //初始中心点
  view.setRotation(rotation); //初始旋转角度
  view.setZoom(zoom); //平移地图
 }
 // 为内置的缩放控件与旋转控件添加tooltip提示信息
 $('.ol-zoom-in,.ol-zoom-out').tooltip({
 placement: 'right' //tooltip在右侧显示
 });
 $('.ol-rotate-reset,.ol-attribution button[title]').tooltip({
 placement: 'left' //tooltip在右侧显示
 });
}

显示效果如下:

OpenLayers3实现对地图的基本操作

4. 代码解析

对地图的缩放、平移、旋转等基本操作都是通过地图视图 View 进行控制,通过地图视图相应的 set 方法实现,首先需要通过Map的getView()获取当前地图时视图对象,然后根据视图对象调用其 get 方法来获取当前的缩放级别(Zoom)、中心点(center)、旋转角度(rotation)等参数。

(1)缩放地图

通过 View 的setZoom方法实现的,缩放级别由setZoom方法的参数进行设置。首先通过 view.getZoom() 获取当前地图的级别,然后调用 setZoom 方法进行缩放(view.setZoom(zoom - 1)),可将地图缩小一级,通过 view.setZoom(zoom +1); 可将地图放大一级。

(2)移动地图

移动地图就是通过改变地图当前地图的中心,通过地图视图的 setCenter 方法实现。首先通过Map对象获取地图的视图对象,然后调用 setCenter 方法进行设置。函数传的参数就是地图中心的坐标点。

(3)旋转地图

它是通过地图默认加载的旋转控件(ol.control.Rotate)来实现的,Rotate 控件的 autoHide 参数默认设置为 true,在旋转角度为0时自动隐藏旋转功能。在这个例子中,我们设置了地图的初始旋转角为60°( rotation: Math.PI / 6 //设置旋转角度),所以当我们点击旋转按钮时,旋转60°回到0°,按钮影藏。

(4)复位地图

它的功能就是将地图恢复当我们刚开始加载地图的状态,它涉及到 View 的设置,我们首先获取到地图加载时的缩放级别、中心点、旋转角度,然后通过 setZoom 、setCenter 、setRotation 方法进行设置,实现地图的复位功能。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
cookie在javascript中的使用技巧以及隐私在服务器端的设置
Dec 03 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
javascript计算渐变颜色的实例
Sep 22 Javascript
利用JS实现scroll自定义滚动效果详解
Oct 17 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
Jan 25 Javascript
Vue cli构建及项目打包以及出现的问题解决
Aug 27 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
Jul 29 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 28 Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 #Javascript
OpenLayers3加载常用控件使用方法详解
Sep 25 #Javascript
在webstorm中配置less的方法详解
Sep 25 #Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 #Javascript
Javascript confirm多种使用方法解析
Sep 25 #Javascript
OpenLayers3实现地图显示功能
Sep 25 #Javascript
openlayers实现图标拖动获取坐标
Sep 25 #Javascript
You might like
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
js 定位到某个锚点的方法
2016/11/19 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
原生js实现自定义滚动条
2021/01/20 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python处理CSV与List的转换方法
2018/04/19 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
python调用百度语音REST API
2018/08/30 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
建筑专业毕业生自荐信
2014/05/25 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers