【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 ...
随机推荐
- 【Java集合】试读ArrayList源码
ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, ...
- [LC] 165. Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1; if version1 &l ...
- SpringMVC源码剖析2——处理器映射器
1.处理器映射器 HandlerMapping 一句话概括作用: 为 我 们 建 立 起 @RequestMapping 注 解 和 控 制 器 方 法 的 对 应 关 系 . 怎么去查看 第一步: ...
- openssl nodejs https+客户端证书+usbkey
mac sslconfig 文件路径 /System/Library/OpenSSL/openssl.cnf 一生成CA openssl req -new -x509 -keyout ca.key - ...
- openssl内存分配,查看内存泄露
openssl内存分配 用户在使用内存时,容易犯的错误就是内存泄露.当用户调用内存分配和释放函数时,查找内存泄露比较麻烦.openssl提供了内置的内存分配/释放函数.如果用户完全调用openssl的 ...
- IOUtils和FileUtils的学习笔记
pom文件导入依赖import org.apache.commons.io.FileUtils; <dependency> <groupId>commons-io</gr ...
- 接轨国际,碰撞更多科研火花——第八届ChinaSys大会专访微软亚洲研究院首席研究员张霖涛
作者:微软亚洲研究院实习生 徐祎雪 卢思奇 2015年6月5日至6日,由中国科学院深圳先进技术研究院先进计算与数字工程研究所主办的第八届中国计算机系统(ChinaSys)学术研讨会在厦门大学召开.来自 ...
- 360若真入股HTC 到底是谁来拯救谁
到底是谁来拯救谁" title="360若真入股HTC 到底是谁来拯救谁"> 我总是持有一种观点,那就是拯救是相互的.就像老师拯救"堕落"学生, ...
- 是AI就躲个飞机-纯Python实现人工智能
你要的答案或许都在这里:小鹏的博客目录 代码下载:Here. 很久以前微信流行过一个小游戏:打飞机,这个游戏简单又无聊.在2017年来临之际,我就实现一个超级弱智的人工智能(AI),这货可以躲避从屏幕 ...
- marquee上下无缝滚动
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name=&qu ...