OpenLayers3基础教程——OL3 介绍interaction

概述:

本节主要讲述OL3的交互操作interaction,重点介绍draw,select以及modify。


接口说明:

OL3的interaction继承自ol.interaction.defaults,下面实现了以下几中交互操作:


创建方式为:

var interaction = new ol.interaction.InteractionType({options});
添加和移除方式为:
map.addInteraction(draw);
map.removeInteraction(draw);
1、draw
ol.interaction.Draw
new ol.interaction.Draw(options)

NameTypeDescription
options

Options.

Fires: Extends Methods
on (type, listener, opt_this) {goog.events.Key}  inherited
NameTypeDescription
typestring | Array.<string>

The event type or array of event types.

listenerfunction

The listener function.

thisObject

The object to use as this in listener.

2、select
ol.interaction.Select
new ol.interaction.Select (opt_options)
NameTypeDescription
options

Options.

Extends Methods
getFeatures () {ol.Collection.<ol.Feature>}
3、modify
ol.interaction.Modify
new ol.interaction.Modify (options)
NameTypeDescription
options

Options.

Extends Methods
on (type, listener, opt_this) {goog.events.Key}  inherited
NameTypeDescription
typestring | Array.<string>

The event type or array of event types.

listenerfunction

The listener function.

thisObject

The object to use as this in listener.

实现实例:

1、draw

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Ol3 draw</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;
		}
		.form-inline{
			position: absolute;
			top: 10pt;
			right: 10pt;
			z-index: 99;
		}
	</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 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
				}),
				target: 'map',
				layers: [
					untiled
				],
				view: new ol.View({
					projection: projection
				})
			});
			map.getView().fitExtent(bounds, map.getSize());

			var source = new ol.source.Vector();
			var vector = new ol.layer.Vector({
				source: source,
				style: new ol.style.Style({
					fill: new ol.style.Fill({
						color: 'rgba(255, 0, 0, 0.2)'
					}),
					stroke: new ol.style.Stroke({
						color: '#ffcc33',
						width: 2
					}),
					image: new ol.style.Circle({
						radius: 7,
						fill: new ol.style.Fill({
							color: '#ffcc33'
						})
					})
				})
			});

			map.addLayer(vector);
			var typeSelect = document.getElementById('type');
			var draw; // global so we can remove it later
			function addInteraction() {
				var value = typeSelect.value;
				if (value !== 'None') {
					draw = new ol.interaction.Draw({
						source: source,
						type: /** @type {ol.geom.GeometryType} */ (value)
					});
					map.addInteraction(draw);
				}
			}


			/**
			 * Let user change the geometry type.
			 * @param {Event} e Change event.
			 */
			typeSelect.onchange = function(e) {
				map.removeInteraction(draw);
				addInteraction();
			};

			addInteraction();
		}
	</script>
</head>
<body onLoad="init()">
<div id="map">
	<form class="form-inline">
		<label>选择绘制类型:</label>
		<select id="type">
			<option value="None">None</option>
			<option value="Point">点</option>
			<option value="LineString">线</option>
			<option value="Polygon">多边形</option>
		</select>
	</form>
</div>
</body>
</html>

2、select

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Ol3 select</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;
		}
		.form-inline{
			position: absolute;
			top: 10pt;
			right: 10pt;
			z-index: 99;
		}
	</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">
		var point = "POINT(103.584297498027 36.119086450265)";
		var line = "MULTILINESTRING((106.519115206186 36.119086450265,108.967127809811 36.5936423859273))";
		var polygon = "MULTIPOLYGON(((106.519115206186 29.4789248520356,108.967127809811 34.2761116373967,113.226682886935 23.1830703234799)))";
		var wkts = [point, line, polygon];
		var wktformat = new ol.format.WKT();
		function init(){
			var format = 'image/png';
			var bounds = [73.4510046356223, 18.1632471876417,
				134.976797646506, 53.5319431522236];
			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 features = new Array();
			for(var i=0;i<wkts.length;i++){
				var feature = wktformat.readFeature(wkts[i]);
				feature.getGeometry().transform('EPSG:4326', 'EPSG:4326');
				features.push(feature);
			}

			var vector = new ol.layer.Vector({
				source: new ol.source.Vector({
					features: features
				}),
				style: new ol.style.Style({
					fill: new ol.style.Fill({
						color: 'rgba(255, 0, 0, 0.2)'
					}),
					stroke: new ol.style.Stroke({
						color: '#ffcc33',
						width: 2
					}),
					image: new ol.style.Circle({
						radius: 7,
						fill: new ol.style.Fill({
							color: '#ffcc33'
						})
					})
				})
			});
			var map = new ol.Map({
				controls: ol.control.defaults({
					attribution: false
				}),
				target: 'map',
				layers: [
					untiled, vector
				],
				view: new ol.View({
					projection: projection
				})
			});
			map.getView().fitExtent(bounds, map.getSize());

			//选择对象
			var select = null;  // ref to currently selected interaction
			// select interaction working on "singleclick"
			var selectSingleClick = new ol.interaction.Select();
			// select interaction working on "click"
			var selectClick = new ol.interaction.Select({
				condition: ol.events.condition.click
			});
			// select interaction working on "mousemove"
			var selectMouseMove = new ol.interaction.Select({
				condition: ol.events.condition.mouseMove
			});
			var selectElement = document.getElementById('selecttype');
			var changeInteraction = function() {
				if (select !== null) {
					map.removeInteraction(select);
				}
				var value = selectElement.value;
				if (value == 'singleclick') {
					select = selectSingleClick;
				} else if (value == 'click') {
					select = selectClick;
				} else if (value == 'mousemove') {
					select = selectMouseMove;
				} else {
					select = null;
				}
				if (select !== null) {
					map.addInteraction(select);
				}
			};
			/**
			 * onchange callback on the select element.
			 */
			selectElement.onchange = changeInteraction;
			changeInteraction();
		}
	</script>
</head>
<body onLoad="init()">
<div id="map">
	<form class="form-inline">
		<label>选择高亮方式:</label>
		<select id="selecttype">
			<option value="none" selected>None</option>
			<option value="singleclick">单击</option>
			<option value="click">点击</option>
			<option value="mousemove">鼠标经过</option>
		</select>
	</form>
</div>
</body>
</html>

3、modify

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Ol3 modify</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;
		}
	</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">
		var point = "POINT(103.584297498027 36.119086450265)";
		var line = "MULTILINESTRING((106.519115206186 36.119086450265,108.967127809811 36.5936423859273))";
		var polygon = "MULTIPOLYGON(((106.519115206186 29.4789248520356,108.967127809811 34.2761116373967,113.226682886935 23.1830703234799)))";
		var wkts = [point, line, polygon];
		var wktformat = new ol.format.WKT();
		function init(){
			var format = 'image/png';
			var bounds = [73.4510046356223, 18.1632471876417,
				134.976797646506, 53.5319431522236];
			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 features = new Array();
			for(var i=0;i<wkts.length;i++){
				var feature = wktformat.readFeature(wkts[i]);
				feature.getGeometry().transform('EPSG:4326', 'EPSG:4326');
				features.push(feature);
			}

			var vector = new ol.layer.Vector({
				source: new ol.source.Vector({
					features: features
				}),
				style: new ol.style.Style({
					fill: new ol.style.Fill({
						color: 'rgba(255, 0, 0, 0.2)'
					}),
					stroke: new ol.style.Stroke({
						color: '#ffcc33',
						width: 2
					}),
					image: new ol.style.Circle({
						radius: 7,
						fill: new ol.style.Fill({
							color: '#ffcc33'
						})
					})
				})
			});

			var select = new ol.interaction.Select();
			var modify = new ol.interaction.Modify({
				features: select.getFeatures()
			});
			vector.on("afterfeaturemodified",function(evt){
				console.log(evt);
			});
			var map = new ol.Map({
				interactions: ol.interaction.defaults().extend([select, modify]),
				controls: ol.control.defaults({
					attribution: false
				}),
				target: 'map',
				layers: [
					untiled, vector
				],
				view: new ol.View({
					projection: projection
				})
			});
			map.getView().fitExtent(bounds, map.getSize());
		}
	</script>
</head>
<body onLoad="init()">
<div id="map">
</div>
</body>
</html>

相关文章:

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

OpenLayers3基础教程——加载资源

OpenLayers3基础教程——OL3 介绍control

OpenLayers3基础教程——OL3之Popup




转载于:https://www.cnblogs.com/lzugis/p/6539815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenLayers 3(简称OL3)是一个强大且灵活的开源JavaScript库,用于在网页上创建交互式地图应用程序。它支持多种地图投影、矢量和栅格图层、地图控制器、地图交互、标注、地图导航等功能。 OpenLayers 3的入门教程可以从以下几个步骤开始。首先,你需要在网页中引入OpenLayers 3的JavaScript文件,你可以从官方网站上下载最新的版本。接下来,你可以创建一个HTML容器来显示地图,使用CSS样式来设置容器的大小和样式。 然后,你需要创建一个OpenLayers地图对象。你可以指定地图的目标容器、初始视图(包括中心坐标、缩放级别和旋转角度)以及地图图层。地图图层是地图的基础,你可以添加栅格图层(如OpenStreetMap、Google Maps)、矢量图层(如GeoJSON数据)或自定义图层。 接下来,你可以添加地图交互和控制器来增强用户体验。地图交互包括缩放、漫游、绘制和选择等功能,而控制器包括缩放滑块、鼠标位置显示和比例尺等工具。你可以根据实际需求选择添加哪些交互和控制器。 最后,你可以添加标注或其他地图元素来展示特定的信息。标注可以是点、线或面,你可以自定义它们的样式和弹出窗口内容。你还可以通过事件监听器来响应用户与地图的交互,例如点击标注后显示更多详细信息。 总之,OpenLayers 3的入门教程包括了从基础设置到高级功能的介绍。通过学习这些内容,你可以快速上手创建自己的交互式地图应用程序。你可以参考官方文档和在线教程,同时多练习、多实践,逐步提升你的OpenLayers 3技能。 ### 回答2: OpenLayers 3是一种基于JavaScript的开源地理信息系统(GIS)库,可以用于在Web上展示地理数据并与地图进行交互。以下是OpenLayers 3入门教程的完整内容: 1. 安装OpenLayers 3:首先,您需要从OpenLayers 3官方网站上下载最新版本的库文件。然后将其嵌入您的HTML页面中,可以通过在页面中添加script标签来实现。 2. 创建地图容器:在HTML页面中,创建一个具有特定ID的div元素,该元素将用于容纳地图。 3. 设置地图属性:使用OpenLayersJavaScript API,您可以设置地图的属性,例如: - 设置地图的中心点和放大级别。 - 添加图层(例如瓦片图层、矢量图层)到地图上。 - 设置地图的投影方式。 4. 添加交互功能:OpenLayers 3提供了多种交互功能,用于与地图进行交互,例如: - 添加缩放控件和导航控件,让用户可以放大缩小地图、平移地图等操作。 - 添加鼠标交互,允许用户点击地图获取坐标、选择要素等。 - 设置地图的交互方式,例如拖动地图、滚轮缩放等。 5. 显示地图:最后,您需要通过JavaScript代码,将地图显示在HTML页面中,在指定的地图容器中渲染地图。 通过以上步骤,您可以使用OpenLayers 3开始创建和展示地图。当然,这只是一个入门教程,您还可以进一步学习OpenLayers 3的高级功能,如添加自定义样式、使用WMS服务、进行地图引导等。OpenLayers 3官方网站提供了丰富的文档和示例,可以帮助您深入学习和应用该库。 ### 回答3: OpenLayers 3 是一个开源的JavaScript库,用于在Web页面上创建交互式地图应用程序。下面是一个适合初学者入门的完整版教程: 1. 环境设置:首先,确保你具备使用JavaScript的基本知识,并在计算机上安装了一种文本编辑器(如Sublime Text)以及一个现代的Web浏览器(如Chrome)。 2. 下载并引入OpenLayers 3:从OpenLayers官方网站下载OpenLayers 3库,并将其引入到你的HTML页面中。你可以通过在`<head>`标签中添加以下代码来实现: `<script src="path/to/openlayers.js"></script>` 3. 创建地图容器:在HTML页面的`<body>`标签中,创建一个`<div>`元素来容纳地图。例如: `<div id="map" style="width: 100%; height: 400px;"></div>` 4. 初始化地图:在JavaScript中,创建一个用于初始化地图的函数。在该函数中,创建一个`new ol.Map`实例,并将其绑定到前面创建的地图容器上。例如: ``` function initMap() { var map = new ol.Map({ target: 'map' }); } ``` 5. 添加图层:在地图中添加图层是非常重要的一步。你可以使用OpenLayers提供的各种图层类型,如Tile Layer、Vector Layer等。以下是向地图添加瓦片图层的示例代码: ``` function initMap() { var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], }); } ``` 6. 设置地图视图:通过设置地图的中心坐标和缩放级别来定义地图的初始视图。例如: ``` function initMap() { var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], view: new ol.View({ center: ol.proj.fromLonLat([0, 0]), zoom: 10 }) }); } ``` 7. 运行函数:在HTML页面中,使用以下代码运行初始化地图的函数: ``` <script> initMap(); </script> ``` 通过按照以上步骤,你将能够创建一个基本的OpenLayers 3地图应用程序并开始进一步学习和探索更多功能和高级用法。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值