地图交互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. 吴裕雄--天生自然 PHP开发学习:在CenterOS 7 系统安装配置PHP 7

    执行命令"yum install httpd"进行安装,然后在选择处,我们输入y,等待软件安装完毕.安装完成后,Apache配置文件路径是:/etc/httpd/conf/http ...

  2. 专利|Pct||

    专利:有些专利写的尽量模糊,为了不让别人检出,让别人能轻易侵犯专利权 优先权:在本国申请后,在他国也是同一个专利人申请,并也是同一个申请日. 发明20年:实用新型外观设计:20年 Pct:专利合作条约 ...

  3. 利用Python进行图片发送与接收的两种方法---包含客户端和服务器端代码

    第一种方法 opencv.requests.flask 此方法比较耗费时间 600毫秒左右 客户端代码 #coding:utf-8 import cv2 import json import requ ...

  4. VSTO开发Excel 2013/2016工作簿项目

    范例下载:(下载后直接双击扩展名为.vsto的文件,或者双击扩展名为.xlsx的工作簿,按提示操作) ExcelWorkbook_Everything.rar

  5. [LC] 8. String to Integer (atoi)

    Implement atoi which converts a string to an integer. The function first discards as many whitespace ...

  6. Java子类和父类的初始化执行顺序

    要明白子类和父类的初始化执行顺序,只需要知晓以下三点,就不会再弄错了. 1.创建子类对象时,子类和父类的静态块和构造方法的执行顺序为:父类静态块->子类静态块->父类构造器->子类构 ...

  7. 64位WIN7 配置IIS遇到问题

    App_global.asax.sr8_llzl.dll' -- '拒绝访问. 设置c:windows\temp 目录访问权限 temp--> 属性-->安全-- > 添加IIS_I ...

  8. HDU-2802-F(N)

    看到这题讨论版里有说用公式的有说用循环节的,但是个人觉得这两种方法都不靠谱,比赛场上做这种题能直接推出公式需要很强数学功底,而循环节的方法如果循环节比较大就不太好发现了.这种已知通项公式的题还是用矩阵 ...

  9. java增强型for循环

    http://blog.csdn.net/itmyhome1990/article/details/8797005

  10. VBA 读取加密的Excel文件(VBA 加密Excel)

    实验成功的: ExcelApp.Workbooks.Open(文件路径,,,'密码') 这里很坑,搜了别人的博客,下面这个方法试了N次,都没用... ExcelApp.Workbooks.Open(文 ...