OL3-Cesium 二三维鼠标事件统一处理
like the github issue:
https://github.com/openlayers/ol3-cesium/issues/344#issuecomment-214098148
thanks jmgomezpoveda .
i find the way to deal with it.
key point is: brower events and pixel happened.
sucess click and move event.
code:
//二维三维的地图点击事件
// https://github.com/openlayers/ol3/blob/v3.19.0/src/ol/events/eventtype.js
define(['watermap'],function(watermap) {
var clickHandler; var layerNameFliter;
/**
* initMapEvents - 初始化地图事件 鼠标移动以及鼠标单击事件
*
*
* @return {type} Description
*/
var initMapEvents = function() { $('#' + watermap.config.target).on('mousemove touchmove', function(browserEvent) {
var pixel = watermap.map.getEventPixel(browserEvent.originalEvent);
HandleFeaturesAtPixelForMove(pixel);
});
$('#' + watermap.config.target).on('click touchstart', function(browserEvent) {
var pixel = watermap.map.getEventPixel(browserEvent.originalEvent);
var features = getFeaturesAtPixelForClick(pixel);
if (watermap.MapEvent.clickHandler) {
watermap.MapEvent.clickHandler(features);
}
});
};
/**
* setLayerFliters - 设置点击以及鼠标滑过去的图层过滤
*
* @param {type} layerNameArray Description
*
* @return {type} Description
*/
var setLayerFliters = function(layerNameArray) {
this.layerNameFliter = layerNameArray;
};
var addClickHandle = function(handler) {
if (handler && typeof(handler) == 'function') {
this.clickHandler = handler;
} else {
console.log("click handler you add is not a function");
}
};
/**
* HandleFeaturesAtPixelForMove - 依据pixel 获取对应的ol.features - Description
*
* @param {type} pixel Description
*
* @return {type} Description
*/
var HandleFeaturesAtPixelForMove = function(pixel) {
var features = [];
if (watermap.ol3d && watermap.ol3d.getEnabled()) {
var pickedObject = watermap.ol3d.getCesiumScene().pick(new Cesium.Cartesian2(pixel[0], pixel[1]));
watermap.ol3d.canvas_.style.cursor = 'auto';
if (typeof pickedObject !== "undefined") {
// features.push(pickedObject.primitive.olFeature);
watermap.ol3d.canvas_.style.cursor = 'pointer';
}
} else {
watermap.map.getViewport().style.cursor = 'auto';
watermap.map.forEachFeatureAtPixel(pixel, function(feature) {
watermap.map.getViewport().style.cursor = 'pointer';
},
undefined,
function(layer) { //标注图层过滤
var layerName = layer.get('name');
if (watermap.MapEvent.layerNameFliter && watermap.MapEvent.layerNameFliter.indexOf(layerName)>=0) {
return true;
}
return false;
});
}
return features;
};
/**
* getFeaturesAtPixelForClick - 依据pixel 获取对应的ol.features - Description
*
* @param {type} pixel Description
*
* @return {type} Description
*/
var getFeaturesAtPixelForClick = function(pixel) {
var features = [];
if (watermap.ol3d && watermap.ol3d.getEnabled()) {
var pickedObject = watermap.ol3d.getCesiumScene().pick(new Cesium.Cartesian2(pixel[0], pixel[1]));
if (typeof pickedObject !== "undefined") {
features.push(pickedObject.primitive.olFeature);
}
} else {
watermap.map.forEachFeatureAtPixel(pixel, function(feature) {
var featureShow;
features.push(feature);
},
undefined,
function(layer) { //标注图层过滤
var layerName = layer.get('name');
if (watermap.MapEvent.layerNameFliter && watermap.MapEvent.layerNameFliter.indexOf(layerName)>=0) {
return true;
}
return false;
});
}
return features;
}; return {
initMapEvents:initMapEvents,
clickHandler: clickHandler,
layerNameFliter: layerNameFliter,
setLayerFliters:setLayerFliters,
addClickHandle: addClickHandle,
};
});
OL3-Cesium 二三维鼠标事件统一处理的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...
- javaScript事件(二)事件处理程序
一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...
- C#总结(二)事件Event 介绍总结
最近在总结一些基础的东西,主要是学起来很难懂,但是在日常又有可能会经常用到的东西.前面介绍了 C# 的 AutoResetEvent的使用介绍, 这次介绍事件(event). 事件(event),对于 ...
- cesium清除选定事件
cesium清除选定事件 此处的案例不一定适合你的项目,但可以给你一个思路.清除选定,就是还原你选中之前的状态.比如你点击一个面高亮,面的颜色发生改变:并且会弹出一个divPoint框.此时的清除选定 ...
- C#特性知识图谱-二、事件
C#特性知识图谱-二.事件 二.事件 在事件驱动的软件系统中,符合某种预设条件的情形出现是,一个事件就会被触发. 2.1 事件三要素 事件源:激发事件的对象 事件信息:事件本身说携带的信息 事件响应者 ...
- 深入理解JS异步编程二(分布式事件)
PubSub模式 从原生的js角度,我们要监听某事件的方法就是利用addEventListener方法,但是当我们的页面趋于复杂,比如要向某个元素添加多个处理事件,那么就要用一个封装函数汇集多个处理函 ...
- Nodejs学习笔记(二)—事件模块
一.简介及资料 http://nodejs.org/api/events.html http://www.infoq.com/cn/articles/tyq-nodejs-event events ...
- springboot-web进阶(二)——AOP统一处理请求
一.AOP使用示例 AOP的概述在spring篇已经存在,这里不再赘述 1.准备 引入依赖 <dependency> <groupId>org.springframework. ...
- 八十八、SAP中ALV事件之二,事件的定义和事件子例程
一.我们来到SE37,找到REUSE_ALV_EVENTS_GET相关的定义 二.我们需要用到下面这3个事件 三.我们添加一个第五步,并把显示ALV座位第六步.在第五步中定义三个事件 四.在末尾,添加 ...
随机推荐
- 读Java8函数式编程笔记05_数据并行化
1. 并发 1.1. 两个任务共享时间段 1.2. 一个程序要运行两个任务,并且只有一个CPU给它们分配了不同的时间片,那么这就是并发,而不是并行 2. 并行 2.1. 两个任务在同一时间发生 2.2 ...
- VSCode一键接入Notebook体验算法套件快速完成水表读数
摘要:本示例围绕真实AI需求场景,介绍VSCode一键接入Notebook体验算法套件快速完成水表读数的使用流程. 本文分享自华为云社区<VSCode一键接入Notebook体验算法套件快速完成 ...
- drf-jwt、simplejwt的使用
1.接口文档 # 前后端分离 -我们做后端,写接口 -前端做前端,根据接口写app,pc,小程序 -作为后端来讲,我们很清楚,比如登录接口 /api/v1/login/---->post---- ...
- 祝 .NET 20周年生日快乐
活动官网:https://dotnet.microsoft.com/zh-cn/
- 【译】.NET 7 中的性能改进(一)
原文 | Stephen Toub 翻译 | 郑子铭 一年前,我发布了.NET 6 中的性能改进,紧接着是.NET 5..NET Core 3.0..NET Core 2.1和.NET Core 2. ...
- Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...
- Median String
You are given two strings ss and tt, both consisting of exactly kk lowercase Latin letters, ss is le ...
- Qt-FFmpeg开发-视频播放【软解码】(1)
Qt-FFmpeg开发-视频播放[软解码] 目录 Qt-FFmpeg开发-视频播放[软解码] 1.概述 2.实现效果 3.FFmpeg软解码流程 4.主要代码 6.完整源代码 更多精彩内容 个人内容分 ...
- 批量下载Landsat遥感影像的方法
本文介绍在USGS网站批量下载Landsat系列遥感影像的方法. 首先,打开EarthExplorer的官网,首先完成注册与登录. 接下来,点击左侧"Search Criteri ...
- 【linux系统安装】Anolis OS-龙蜥操作系统实机安装流程整理
[安装准备] 1.准备一个U盘,可储存空间不低于20G,U盘内资料移出去,待会儿要格式化做U盘启动盘 2.windows操作系统上下载"Rufus",官网:http://rufus ...