Openlayers实现区域多选与单选。Interaction.Select()属性详解。

1.简介

Select字如其名,主要用于选择矢量图层,做出相应的操作,比如突出高亮、改变渲染样式等

2.属性

filter:可实现过滤
layers:也可实现过滤
features:存放被选择的图层的集合
condition:设置选择方式,默认sigleClick
addCondition:配合removeCondition可实现使用不同的方法进行添加删除
removeCondition:配合addCondition可实现使用不同的方法进行添加删除
toggleCondition:可实现点击多选
multi:可实现点击穿透多选
style:被选中的图层的样式
hitTolerance:设置鼠标点击位置和被选中图层之间的距离

(1)filter 可实现过滤

后面接一个函数,函数有两个参数:feature和layer。以点击为例,参数代表当前点击的都有那些feature和layer。此函数若返回true,代表图层被选择,否则不选

//只有lineVectorLayer图层可被选择
this.select = new Select({ 
	filter:(feature, layer)=>{
		return layer === this.lineVectorLayer
	}
});
(2)layers 也可实现过滤

后面接一个数组,里面是一个个layer图层。设置都有哪些layer图层可以被选择

//只有lineVectorLayer图层可被选择
this.select = new Select({ layers:[this.lineVectorLayer] });
(3)features 存放被选择的图层的集合

存放被选择的图层,如果没有设置,会默认创建一个集合。可使用 “Select实例.getFeatures()” 获取到这个集合。

(4)condition 设置选择方式,默认sigleClick

一个从ol/events/condition中引入的函数,返回值为布尔,用于设置如何使用选择交互,默认sigleCilck,单击选择。可选:Click,shiftKeyOnly,always等。选择时不满足此条件那么其他配置都没用

(5)addCondition 配合removeCondition可实现使用不同的方法进行添加删除

一个从ol/events/condition中引入的函数,返回值为布尔,来决定是否触发此事件。默认是never(从不触发)。如果你想使用不同的方法进行选择和取消选择,而不是同一个方法进行选择和取消选择(toggle),可以使用此方法。
如:按住ctrl键+点击 进行选择,按住shift+点击 进行取消选择。可设置 addCondition为 “platformModifierKeyOnly” ,设置removeCondition为 shiftKeyOnly

(6)removeCondition 配合addCondition可实现使用不同的方法进行添加删除

一个从ol/events/condition中引入的函数,返回值为布尔,来决定是否触发此事件。默认是never(从不触发)。如果你想使用不同的方法进行选择和取消选择,而不是同一个方法进行选择和取消选择(toggle),可以使用此方法。
如:按住ctrl键+点击 进行选择,按住shift+点击 进行取消选择。可设置 addCondition为 “platformModifierKeyOnly” ,设置removeCondition为 shiftKeyOnly

(7)toggleCondition 可实现点击多选

一个从ol/events/condition中引入的函数,返回值为布尔,来决定是否触发此事件。用于设置辅助选择的方式,默认shiftKeyOnly,按住shift键。可选:Click,never,always等。当设置condition和toggleCondition属性时,两个都满足条件可以实现多选。详情看下面代码介绍

//vue写法,首先引入:
import { Select } from 'ol/interaction'
import { click,platformModifierKeyOnly } from "ol/events/condition";

//之后在methods中添加
addSelectInteraction(){
	//condition:设置此交互为点击选择,必须满足此条件
	//toggleCondition:设置当按住ctrl再点击时,可多选图层
	this.select = new Select({ condition: click, toggleCondition: platformModifierKeyOnly});
	this.selectedFeatures = this.select.getFeatures();
	this.map.addInteraction(this.select);
	this.select.on('select', function(e) {
	    e.target.getFeatures().getArray().forEach(item=>{
	        console.log(item.values_);
	    })
	});
},
remvoeSelectInteraction(){
	this.selectedFeatures.clear();
    this.map.removeInteraction(this.select);
}
/* 记得在data中定义那几个变量 */

不按ctrl键为单选
单选
按住ctrl键可实现多选
多选

(8)multi 可实现点击穿透多选

跟布尔值,默认false。设置是否支持穿透性多选。如:设为true,那么点击的时候将会选择所点位置的全部图层。设为false只会选择最上面那个。

//vue写法,首先引入:
import { Select } from 'ol/interaction'

//之后在methods中添加
addSelectInteraction(){
	this.select = new Select({ multi:true });
	this.selectedFeatures = this.select.getFeatures();
	this.map.addInteraction(this.select);
	this.select.on('select', function(e) {
	    e.target.getFeatures().getArray().forEach(item=>{
	        console.log(item.values_);
	    })
	});
},
remvoeSelectInteraction(){
	this.selectedFeatures.clear();
    this.map.removeInteraction(this.select);
}
/* 记得在data中定义那几个变量 */

设置multi为true,点击一次,会选择所点地方的所有图层
multi实例图

(9)style 被选中的图层的样式

可设置被选中的图层的样式。默认样式看上面的那张图:边框蓝色,填充白色透明。如果设置为 null或false时,被选中的图层将不会改变任何样式。

(10)hitTolerance 设置鼠标点击位置和被选中图层之间的距离

接收一个数值作为参数。意思是以鼠标点击位置为圆心,数值作为半径画圆,在圆内的图层将被选中。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 echarts 和 openlayers 分别实现热力图,下面分别介绍一下具体的方法: 1. echarts 实现热力图 使用 echarts 实现热力图需要使用 echarts 的插件 echarts-gl,通过 echarts-gl 可以使用 WebGL 技术绘制更加复杂的图表,包括热力图。 具体步骤如下: (1)安装 echarts-gl 插件: ``` npm install echarts-gl --save ``` (2)引入 echarts 和 echarts-gl: ```html <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js"></script> ``` (3)创建一个包含地图的 div 容器和一个 echarts 实例: ```html <div id="map" style="width: 100%; height: 600px;"></div> <script type="text/javascript"> var myChart = echarts.init(document.getElementById('map')); </script> ``` (4)配置 echarts 实例,包括地图类型、地图数据和热力图数据: ```javascript option = { tooltip: {}, visualMap: { min: 0, max: 500, calculable: true, inRange: { color: ['#50a3ba', '#eac736', '#d94e5d'] } }, geo: { map: 'world', roam: true }, series: [{ type: 'heatmap', coordinateSystem: 'geo', data: [ {name: 'Afghanistan', value: 283.54}, {name: 'Albania', value: 198.28}, {name: 'Algeria', value: 200.20}, // ... 省略部分数据 ] }] }; myChart.setOption(option); ``` 2. openlayers 实现热力图 使用 openlayers 实现热力图需要使用第三方库 ol-heatmap,ol-heatmap 是一个基于 openlayers 的热力图插件。 具体步骤如下: (1)安装 ol-heatmap: ``` npm install ol-heatmap --save ``` (2)引入 openlayers 和 ol-heatmap: ```html <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol/dist/ol.css" type="text/css"> <script src="https://cdn.jsdelivr.net/npm/ol/dist/ol.js"></script> <script src="https://cdn.jsdelivr.net/npm/ol-heatmap/ol-heatmap.js"></script> ``` (3)创建一个包含地图的 div 容器和一个 openlayers 实例: ```html <div id="map" style="width: 100%; height: 600px;"></div> <script type="text/javascript"> var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], view: new ol.View({ center: [0, 0], zoom: 2 }) }); </script> ``` (4)创建一个热力图层并添加到 openlayers 实例中: ```javascript var heatmapLayer = new ol.layer.Heatmap({ source: new ol.source.Vector({ url: 'data.json', format: new ol.format.GeoJSON() }), blur: 15, radius: 5, opacity: 0.8 }); map.addLayer(heatmapLayer); ``` 其中,data.json 是包含热力图数据的 GeoJSON 格式文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值