【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 ...
随机推荐
- TreeMap简介
在Map集合框架中,除了HashMap以外,TreeMap也是常用到的集合对象之一.与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序.其中,可以使用 ...
- python3多线程应用详解(第二卷:多线程到底是怎么工作的)
现在很多人都说用多线程工作快是因为多个不同任务可以同时执行,注意我说的是不同任务,要是重复做一件事达到相同效果就是画蛇添足了,其实这是个错误的说法,线程真正的本质是无法同时执行的.现在我们来看下多线程 ...
- [LC] 256. Paint House
There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ...
- Eclipse安装tomcat插件
安装插件:Pivotal tc Server Integration for Eclipse右击server可以定位到web项目部署的目录http://marketplace.eclipse.org/ ...
- 省A类竞赛二等奖--村先游项目VUE前端重构
村先游--省二竞赛项目VUE重构 源码地址: 重构前的(前端+后台):https://github.com/Archer-Fang/cunxianyou 重构前的(前端):https://github ...
- 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- win7图片只显示图标不显示预览图解决方案
问题描述: win7上图片只显示图标,不显示缩略图:不管是调节小图.中图还是大图或者其他均不显示:而且这种情况下使用截图工具截下来的图片都不自动带上扩展名:情况如下图: 解决方案: 打开计算机-> ...
- mybatis参数映射
转载地址:http://iyiguo.net/blog/2012/09/27/mybatis-param-mapping-rules/ 规则 非注解参数 当参数未使用@Param注解时,可以通过以下方 ...
- ES6中 const 关键字
const声明一个只读的常量.一旦声明,常量的值就不能改变. 定义后可以使用但不能修改 但是,const 定义的对象可能与我们想象的不太一样 定义了对象b ,我们可以在b上添加修改属性,再看一个列子 ...
- Pwnable.tw start
Let's start the CTF:和stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚: 调试了就很容易看出来在堆栈上是同一块地址.发生栈溢出是因为:r ...