【11】openlayers 地图交互
地图交互interaction 关于map的方法:
//添加地图交互
map.addInteraction(interaction)
//删除地图交互
map.removeInteraction(interaction)
创建矢量图层并添加到地图容器中:
//创建矢量图层并添加到地图容器中
var source = new ol.source.Vector({
wrapX: false
});
var vector = new ol.layer.Vector({
source: source
});
map.addLayer(vector)
1、绘制交互功能:Draw
//绘制交互功能
draw = new ol.interaction.Draw({
source: source,//矢量资源
type: flg.ArrowLine.type,//绘制类型
geometryFunction:flg.ArrowLine.geometryFunction,//更新几何坐标时调用的函数
});
map.addInteraction(draw);
绘制类型:
//绘制类型
let flg = {
Point:{
type:'Point',
style:undefined,
geometryFunction:undefined,
},
LineString:{
type:'LineString',
style:undefined,
geometryFunction:undefined
},
ArrowLine:{
type:'LineString',
style:undefined,
geometryFunction:undefined,
style: function (feature) {
let geometry = feature.getGeometry();
let styles = [
new ol.style.Style({
stroke: new ol.style.Stroke({
color: '#ffcc33',
width: 2
})
})
];
geometry.forEachSegment(function (start, end) {
let dx = end[0] - start[0];
let dy = end[1] - start[1];
let rotation = Math.atan2(dy, dx);
styles.push(new ol.style.Style({
geometry: new ol.geom.Point(end),
image: new ol.style.Icon({
src: 'lib/arrow.png',
anchor: [0.75, 0.5],
rotateWithView: true,
rotation: -rotation
})
}));
});
return styles;
}
},
Polygon:{
type:'Polygon',
style:undefined,
geometryFunction:undefined
},
Circle:{
type:'Circle',
style:undefined,
geometryFunction:undefined
},
Square:{
type:'Circle',
style:undefined,
geometryFunction:ol.interaction.Draw.createRegularPolygon(4)
},
Box:{
type:'Circle',
style:undefined,
geometryFunction:ol.interaction.Draw.createBox()
},
Star:{
type:'Circle',
style:undefined,
geometryFunction:function (coordinates, geometry){
//中心点
var center = coordinates[0];
//鼠标点击的另一个点
var last = coordinates[1];
var dx = center[0] - last[0];
var dy = center[1] - last[1];
//半径
var radius = Math.sqrt(dx * dx + dy * dy);
//旋转的角度
var rotation = Math.atan2(dy, dx);
//用来记录顶点坐标的数组
var newCoordinates = [];
//顶点个数
var numPoints = 10;
for (var i = 0; i < numPoints; ++i) {
//顶点相对转过的角度
var angle = rotation + i * 2 * Math.PI / numPoints;
//确定凸顶点和凹顶点
var fraction = i % 2 === 0 ? 1 : 0.5;
//计算顶点的坐标
var offsetX = radius * fraction * Math.cos(angle);
var offsetY = radius * fraction * Math.sin(angle);
newCoordinates.push([center[0] + offsetX, center[1] + offsetY]);
}
newCoordinates.push(newCoordinates[0].slice());
if (!geometry) {
geometry = new ol.geom.Polygon([newCoordinates]);
} else {
geometry.setCoordinates([newCoordinates]);
}
return geometry;
}
}
}
2、捕捉交互——修改交互
//捕捉交互功能
let snap = new ol.interaction.Snap({ source: source });
map.addInteraction(snap); //修改交互功能
let modify = new ol.interaction.Modify({
source: source,//矢量资源
insertVertexCondition: function (){return true},//是否应将新顶点添加到草图特征
});
map.addInteraction(modify);
3、旋转缩放交互
//按住Shift并使用鼠标拖拽可以旋转、缩放地图
let dRZ = new ol.interaction.DragRotateAndZoom()
map.addInteraction(dRZ);
4、选择交互(矢量)
//添加一个geojson
let vectorGeojson = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'lib/lands.geojson',
format: new ol.format.GeoJSON()
})
})
map.addLayer(vectorGeojson)
//交互类型
let enents={
click:ol.events.condition.click,
singleclick:ol.events.condition.singleclick,
pointerMove:ol.events.condition.pointerMove
}
//创建交互
let selects = new ol.interaction.Select({
condition: enents.click,
layers:[vectorGeojson],//应当从中选择要素的图层列表,如未提供默认所有图层可选
style:new ol.style.Style({//选中的样式,未提供使用默认样式
//填充样式(面)
fill: new ol.style.Fill({
color: 'rgba(255, 255, 255, 0.2)'
}),
//描边样式(线)
stroke: new ol.style.Stroke({
color: '#ffcc33',
width: 2
})
})
})
map.addInteraction(selects);
//交互事件
selects.on('select',function(e){
console.log(e)
})
5、移动交互
//要素移动交互(需要用到选择交互selects)配合选择要素使用
let translate = new ol.interaction.Translate({
features: selects.getFeatures()
});
map.addInteraction(translate);
【11】openlayers 地图交互的更多相关文章
- 大型情感类电视连续剧--Android高德之旅(3)地图交互
总要说两句 前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置.地图的绘制分很多层,层级的显示需要根据不同的场景来设置.地图的触摸事件也很丰富,有单击.双击.单指拖拽.双指拖拽. ...
- Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换
Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 上一篇我们说到了使用jquer ...
- 11.vue 数据交互
vue new Vue({ el,选择器 string/obj 不能选择html/body data, methods, template string/obj //生命周期 -- 虚拟DOM 1.初 ...
- springMVC学习(11)-json数据交互和RESTful支持
一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...
- Openlayers 地图定位到相应位置并缩放
说明: 在地图操作中,有个功能,需要点击一个点,将视图定位到点击点的位置,并放大. 解决方案: 1.可以有openlayers中可以有ol.View来控制,但是在更改时,会将地图初始化时设置的maxZ ...
- 【AngularJS】—— 11 指令的交互
前面基本了解了指令的相关内容: 1 如何自定义指令 2 指令的复用 本篇看一下指令之间如何交互.学习内容来自<慕课网 指令3> 背景介绍 这例子是视频中的例子,有一个动感超人,有三种能力, ...
- 11.TCP的交互数据流
TCP报文段一般有两类,分别是成块数据和交互数据. 1.交互式输入 Rlogin连接上键入一个交互命令的数据流如下图所示. 每一个交互按键都会产生一个数据分组,每次从客户传 ...
- OpenLayers学习笔记(四)— QML显示html中openlayers地图的坐标
GitHub:八至 作者:狐狸家的鱼 本文链接:实现QML中显示html中地图的坐标 如何QML与HTML通信已经在这篇文章 QML与HTML通信之画图 详细讲述了 1.HTML var coord; ...
- AO Identify地图交互
转自supernever文章 Identify 1.框选要素高亮显示 private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS ...
随机推荐
- Nginx笔记总结九:Nginx日志配置
ngx_http_log_module用来定义请求日志格式1. access_log指令 语法: access_log path [format [buffer=size [flush=time] ...
- find_in_set 函数的语法
find_in_set 函数的语法: FIND_IN_SET(str,strList) str 要查询的字符串 strList 字段名,参数以“,”分隔,如(1,2,6,8) 查询字段(strList ...
- (为容器分配独立IP方法二)通过虚拟IP实现docker宿主机增加对外IP接口
虚拟IP.何为虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机,所有项目中数据库链接一项配 ...
- Mac系列萎靡 大棒能否敲醒苹果?
大棒能否敲醒苹果?" title="Mac系列萎靡 大棒能否敲醒苹果?"> iPhone在智能手机市场中的一骑绝尘,不断将苹果推向神坛位置.即使新品更新幅度 ...
- Machine-learning-DecisionTree
前言 决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成.结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶节点表示类别.从顶部根节点开始,所有样本聚在一起,经过根节 ...
- 深度视觉盛宴——CVPR 2016
小编按: 计算机视觉和模式识别领域顶级会议CVPR 2016于六月末在拉斯维加斯举行.微软亚洲研究院在此次大会上共有多达15篇论文入选,这背后也少不了微软亚洲研究院的实习生的贡献.大会结束之后,小编第 ...
- textarea 实现高度自动增长
有时候希望textarea 能够自动调整高度来适应输入的内容 网上看到了很多解决方案,比如动态创建一个隐藏的div,当用户输入的时候将textarea的内容绑定到div,由于div的高度会自动撑开,因 ...
- QIs for Spread
玩了好几天,看了好多剧,所以这几天的进度稍微有点慢,另外,<一起同过窗>真香! 延展特性涉及解集覆盖的区域.一个具有良好分布的解集应该包含来自PF每个部分的解集,而不遗漏任何区域.然而,大 ...
- Python爬虫-百度模拟登录(二)
上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...
- 【基础篇】hexo博客搭建教程
[基础篇]搭建hexo博客(一) 作者:Huanhao bilibili:Mrhuanhao 前言 你是否想拥有属于自己的博客?你是否无奈与自己不会写网站而烦恼? 不要担心,本系列教程将会实现你白嫖的 ...