OpenLayers3基础教程——OL3 介绍control

概述:

本文讲述的是Ol3中的control的介绍和应用。

OL2和OL3 control比较:

相比较Ol2的control,OL3显得特别少,下图分别为Ol2和Ol3的control:

Ol2的control

Ol3的control

相比较Ol2,OL3保留了mouseposition,scaleline,zoom,zoomslider,而将很多东西例如draw等转移到了interaction下面,下图为Ol3的interaction:

OL3中control的常用操作:

Ol3中control的常用操作包括获取control集,添加,删除。

获取control集

var controls = map.getControls();

添加

map.addControl(ctrl);

删除

map.removeControl(ctrl);

OL3添加control示例:

下面是一个比较完成的OL3的Control的示例,

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>control</title>
	<link rel="stylesheet" type="text/css" href="http://localhost/ol3/css/ol.css"/>
	<style type="text/css">
		body, #map {
			border: 0px;
			margin: 0px;
			padding: 0px;
			width: 100%;
			height: 100%;
			font-size: 13px;
		}
		#location{
			position: absolute;
			bottom: 10px;
			left: 45%;
			font-weight: bold;
			z-index: 99;
		}
		#switch{
			position:absolute;
			right:20pt;
			top:40pt;
			z-index:999;
		}
		#rotation{
			position: absolute;
			top: 10px;
			left: 45%;
			font-weight: bold;
			z-index: 99;
		}
		.ol-zoomslider{
			background: #d0e5f5;
			width: 20px;
		}
		.zoom-to-extent{
			position: absolute;
			top: 5pt;
			left: 28pt;
		}
		.map-rotate{
			position: absolute;
			top: 5pt;
			left: 45%;
		}
	</style>
	<script type="text/javascript" src="http://localhost/ol3/build/ol.js"></script>
	<script type="text/javascript" src="http://localhost/jquery/jquery-1.8.3.js"></script>
	<script type="text/javascript">
		function init(){
			var format = 'image/png';
			var bounds = [73.4510046356223, 18.1632471876417,
				134.976797646506, 53.5319431522236];
			var controls = new Array();
			//鼠标位置
			var mousePositionControl = new ol.control.MousePosition({
				className: 'custom-mouse-position',
				target: document.getElementById('location'),
				coordinateFormat: ol.coordinate.createStringXY(5),//保留5位小数
				undefinedHTML: ' '
			});
			controls.push(mousePositionControl);

			//缩放至范围
			var zoomToExtentControl = new ol.control.ZoomToExtent({
				extent: bounds,
				className: 'zoom-to-extent',
				tipLabel:"全图"
			});
			controls.push(zoomToExtentControl);

			//比例尺
			var scaleLineControl = new ol.control.ScaleLine({});
			controls.push(scaleLineControl);

			//全图
			var fullScreenControl = new ol.control.FullScreen({});
			controls.push(fullScreenControl);

			//缩放控件
			var zoomSliderControl = new ol.control.ZoomSlider({});
			controls.push(zoomSliderControl);

			var rotate = new ol.control.Rotate({
//				label:"↑",
				tipLabel:"重置",
				target:document.getElementById('rotation'),
				autoHide:false
			});
			controls.push(rotate);

			var untiled = new ol.layer.Image({
				source: new ol.source.ImageWMS({
					ratio: 1,
					url: 'http://localhost:8081/geoserver/lzugis/wms',
					params: {'FORMAT': format,
						'VERSION': '1.1.1',
						LAYERS: 'lzugis:province',
						STYLES: ''
					}
				})
			});
			var projection = new ol.proj.Projection({
				code: 'EPSG:4326',
				units: 'degrees'
			});
			var map = new ol.Map({
				controls: ol.control.defaults({
					attribution: false
				}).extend(controls),
				interactions: ol.interaction.defaults().extend([
					new ol.interaction.DragRotateAndZoom()
				]),
				target: 'map',
				layers: [
					untiled
				],
				view: new ol.View({
					projection: projection,
					rotation:-45
				})
			});
			map.getView().fitExtent(bounds, map.getSize());

			$("#setRotate").on("click",function(){
				var angle = $("#rotate").val();
				map.getView().setRotation(angle);
			});
		}
	</script>
</head>
<body onLoad="init()">
<div class="layer-change-switch" id="switch">
	<div id="slider">
		<input id="rotate" type="text" value="-45" maxlength="10" style="width: 50px;" /><button id="setRotate">旋转</button>
	</div>
</div>
<div id="map">
	<div id="rotation"></div>
	<div id="location"></div>
</div>
</body>
</html>

上述代码效果如下:

相关课程:

OpenLayers3基础教程——OL3基本概念

OpenLayers3基础教程——加载资源

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

浅谈ASP.NET的Postback

说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角...

19090
来自专栏Golang语言社区

GO语言的IO方法实例小结

Error(err error) error这个函数和read里边的CloseWithError是大同小异的,关闭管道,关闭时正在进行的Read操作将返回参数传...

367120
来自专栏hotqin888的专栏

bootstrap table x-editable select2——带图标的选择

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

1.5K10
来自专栏MasiMaro 的技术博文

MFC中属性表单和向导对话框的使用

每次在使用MFC创建一个框架时,需要一步步选择自己的程序的外观,基本功能等选项,最后MFC会生成一个基本的程序框架,这个就是向导对话框;而属性表单则是另外一种对...

13310
来自专栏GIS讲堂

Arcgis for Js实现graphiclayer的空间查询(续)

上文中,实现了简单的针对graphiclayer的空间查询工作,在本节,将更加详细的介绍针对graphiclayer的空间查询。首先,空间查询的方式:提供多种类...

12230
来自专栏用户2442861的专栏

Qt学习——分割窗口QSplitter类 .

1.建立项目时基类选择QMainWindow,取消Gernerate form复选框的选中状态。

14510
来自专栏小灰灰

Java 实现 markdown转Image

markdown 转 image 前段时间实现了长图文生成的基本功能,然后想了下能否有个进阶版,直接将markdown生成渲染后的图片呢? 思路 有不少的库...

36350
来自专栏前端儿

CSS布局 -- 左右定宽,中间自适应

左右设置绝对定位,定宽,中间设置margin-left  margin-right

23110
来自专栏WindCoder

Angular6自定义表单控件方式集成Editormd

曾经找到过“Editor.md”,看之心喜,一直想在Angular中集成下这款markdownpad编辑器玩,在网上也只找到一篇通过指令集成的,虽然可以实现,但...

58220
来自专栏進无尽的文章

编码篇-OC跨多层UI事件传递处理

在 iOS 中,对象间的交互模式大概有这几种:直接 property 传值、delegate、KVO、block、protocol、多态、Target-Acti...

18730

扫码关注云+社区

领取腾讯云代金券