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 二三维鼠标事件统一处理的更多相关文章

  1. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  2. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

  3. javaScript事件(二)事件处理程序

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...

  4. C#总结(二)事件Event 介绍总结

    最近在总结一些基础的东西,主要是学起来很难懂,但是在日常又有可能会经常用到的东西.前面介绍了 C# 的 AutoResetEvent的使用介绍, 这次介绍事件(event). 事件(event),对于 ...

  5. cesium清除选定事件

    cesium清除选定事件 此处的案例不一定适合你的项目,但可以给你一个思路.清除选定,就是还原你选中之前的状态.比如你点击一个面高亮,面的颜色发生改变:并且会弹出一个divPoint框.此时的清除选定 ...

  6. C#特性知识图谱-二、事件

    C#特性知识图谱-二.事件 二.事件 在事件驱动的软件系统中,符合某种预设条件的情形出现是,一个事件就会被触发. 2.1 事件三要素 事件源:激发事件的对象 事件信息:事件本身说携带的信息 事件响应者 ...

  7. 深入理解JS异步编程二(分布式事件)

    PubSub模式 从原生的js角度,我们要监听某事件的方法就是利用addEventListener方法,但是当我们的页面趋于复杂,比如要向某个元素添加多个处理事件,那么就要用一个封装函数汇集多个处理函 ...

  8. Nodejs学习笔记(二)—事件模块

    一.简介及资料  http://nodejs.org/api/events.html  http://www.infoq.com/cn/articles/tyq-nodejs-event events ...

  9. springboot-web进阶(二)——AOP统一处理请求

    一.AOP使用示例 AOP的概述在spring篇已经存在,这里不再赘述 1.准备 引入依赖 <dependency> <groupId>org.springframework. ...

  10. 八十八、SAP中ALV事件之二,事件的定义和事件子例程

    一.我们来到SE37,找到REUSE_ALV_EVENTS_GET相关的定义 二.我们需要用到下面这3个事件 三.我们添加一个第五步,并把显示ALV座位第六步.在第五步中定义三个事件 四.在末尾,添加 ...

随机推荐

  1. 行为型模式 - 解释器模式Interpreter

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 模式的定义与特点 解释器模式(Interperter Pattern),给定一个语言,定义它的文法表示,并定义一个解释器,这个解 ...

  2. 移动 WEB 开发布局方式 ---- rem 适配布局

    一.rem 基础 1. rem 单位 em : 相对于父元素的字体大小来说的 <div> <p></p> </div> div { font-size: ...

  3. Selenium 资源汇总

    created: 2022-8-4 驱动 资源名 网址 说明 chromedriver https://registry.npmmirror.com/binary.html?path=chromedr ...

  4. mysql15 sql优化-小表驱动大表 IN和EXITS

    转:https://blog.csdn.net/qq_27409289/article/details/85963089 1.IN查询分析 select * from a  where a.id in ...

  5. dotnet 8 preview 1 即将发布

    .Net 8 preview 1 即将到来,让我们来提前看看都要发布什么吧. .Net 8 preview 1 即将到来 .NET 8 的第一个预览版将在几周内发布,微软的 David Ortinau ...

  6. xshell连接时显示“服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法

    xshell连接时显示"服务器发送了一个意外的数据包.received:3,expected:20"问题的解决方法 解决方法:在/etc/ssh/sshd_config最后增加以下 ...

  7. 郁金香逆向 2.便利怪物对象数组 纯C写法

    读取基础地址 获取节点数量 打印怪物列表 进行遍历 环环相扣

  8. CF1367E Necklace Assembly

    题目传送门 思路 提供一种比现有的两篇题解都简单的方法. 我们枚举答案,发现最终的答案数组一定是由多个完全相同的块组成的,并且块长必定是 \(k\) 的因数. 然后我们考虑枚举答案 \(i\),那么此 ...

  9. 利用反射和代理简单模拟mybatis实现简单的CRUD

    利用反射接口做java数据库操作 今天突发奇想,好像一些基本的CRUD操作路数都是一样的,又想到mybatis中的操作,便想着简单的模拟一下.随便写写,就当练习反射了. Dao接口类: 这里使用泛型, ...

  10. forEach、for in 、 for of三者的区别

    1.for 原始的遍历: 其实除了这三种方法以外还有一种最原始的遍历,自Javascript诞生起就一直用的 就是for循环,它用来遍历数组 var arr = [1,2,3,4] for(var i ...