地图交互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 地图交互的更多相关文章

  1. 大型情感类电视连续剧--Android高德之旅(3)地图交互

    总要说两句 前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置.地图的绘制分很多层,层级的显示需要根据不同的场景来设置.地图的触摸事件也很丰富,有单击.双击.单指拖拽.双指拖拽. ...

  2. Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换

    Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 上一篇我们说到了使用jquer ...

  3. 11.vue 数据交互

    vue new Vue({ el,选择器 string/obj 不能选择html/body data, methods, template string/obj //生命周期 -- 虚拟DOM 1.初 ...

  4. springMVC学习(11)-json数据交互和RESTful支持

    一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...

  5. Openlayers 地图定位到相应位置并缩放

    说明: 在地图操作中,有个功能,需要点击一个点,将视图定位到点击点的位置,并放大. 解决方案: 1.可以有openlayers中可以有ol.View来控制,但是在更改时,会将地图初始化时设置的maxZ ...

  6. 【AngularJS】—— 11 指令的交互

    前面基本了解了指令的相关内容: 1 如何自定义指令 2 指令的复用 本篇看一下指令之间如何交互.学习内容来自<慕课网 指令3> 背景介绍 这例子是视频中的例子,有一个动感超人,有三种能力, ...

  7. 11.TCP的交互数据流

          TCP报文段一般有两类,分别是成块数据和交互数据. 1.交互式输入     Rlogin连接上键入一个交互命令的数据流如下图所示.     每一个交互按键都会产生一个数据分组,每次从客户传 ...

  8. OpenLayers学习笔记(四)— QML显示html中openlayers地图的坐标

    GitHub:八至 作者:狐狸家的鱼 本文链接:实现QML中显示html中地图的坐标 如何QML与HTML通信已经在这篇文章 QML与HTML通信之画图 详细讲述了 1.HTML var coord; ...

  9. AO Identify地图交互

    转自supernever文章 Identify 1.框选要素高亮显示 private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS ...

随机推荐

  1. python——删除列表中的元素

    在python中,删除列表元素的方法有三种,分别为remove(),del(),pop()函数 (1)remove() >>> name = ['小明','小华','小红','小李' ...

  2. ZOJ-1167-Trees on the Level

    题解: 我的解法是用一个类似字典树结构的结构体来表示节点.看到另一种解法是用数组来映射二叉树的,开到14000就过了,但是我觉得是数据水了,因为题中说最多 256个节点,如果256个节点连成链型,除根 ...

  3. numpy和pandas的基础索引切片

    Numpy的索引切片 索引 In [72]: arr = np.array([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]]) In [73]: arr Out[73]: a ...

  4. makefile中的变量赋值

    在makefile中赋值方式有:'='.':='.'?='和'+='. A = a $(B) B = b all: echo $(A) #运行结果:echo a b a b 这种赋值方式是没有先后顺序 ...

  5. mysql5.7解压版安装

    环境:win 10 1.解压 新建my.ini [mysqld] port = 3306 basedir=解压路径 datadir=解压路径\data max_connections=200 char ...

  6. Spring 插件安装

    文件下载:https://pan.baidu.com/s/1jIBOggm 网站下载:http://dist.springsource.com/release/TOOLS/update/e4.5/

  7. 监控Linux系统节点和服务CPU内存性能

    1.获取信息 #!/bin/bash #描述: # 把top信息输入到一个文件内部 #作者:孤舟点点 #版本:1.0 #创建时间:-- :: PATH=/bin:/sbin:/usr/bin:/usr ...

  8. ConxtMenu高级用法

    ##背景我们经常在列表的页面中,点击列表中的行,一般进入详情页面,长按列表中一行,会弹出一个菜单,包含了对某一行的操作(编辑.删除等等),也知道通常的用法: 0x01. 在Activity中注册需要上 ...

  9. 吴裕雄--天生自然 python开发学习笔记:下载python离线安装whl文件链接

    https://www.lfd.uci.edu/~gohlke/pythonlibs/

  10. 重大改革!Python将被加入高考科目!

    未来大学生将分为两种:一种是编程好的人,另一种是编程超好的人. Python 将被纳入高考科目 近期,浙江省信息技术课程改革方案出台,Python 确定进入浙江省信息技术高考,从2018年起浙江省信息 ...