
在 OpenLayers 应用中,有时我们需要在非 OpenLayers 地图容器(例如,一个普通的 HTML div 元素)上进行交互,并希望这些交互能够同步更新 OpenLayers 地图上的绘制,特别是使用 ol.interaction.Draw 进行测量时。直接在非 OpenLayers 容器上触发 OpenLayers 地图的 click 或 pointermove 事件是不可能的,因为 OpenLayers 的事件监听机制只作用于其自身的地图容器。但是,我们可以通过其他方式来模拟这些事件,从而实现跨容器的交互同步。
以下代码展示了如何通过自定义事件处理,以及调用 OpenLayers 内部方法来模拟 click 和 pointermove 事件,以实现跨容器的交互同步。
this.measureHandler.containers.forEach((container, nr) => {
$(container).on("click.ol", () => {
if (this.measureHandler.viewerClick === true) {
this.lastCoord = ol.proj.transform([this.measureHandler.clickCoords[0], this.measureHandler.clickCoords[1]], "EPSG:4326", "EPSG:3857")
if (measureType !== "Polygon") {
this.coords.push(this.lastCoord)
} else {
if (this.coords.length <= 1) {
this.coords.splice(0, 0, this.lastCoord)
this.coords.push(this.lastCoord)
} else {
this.coords.splice(this.coords.length - 1, 0, this.lastCoord)
}
}
if (measureType === "Circle") {
if (this.measureHandler.activePlugins[nr] !== "Ortofoto" && this.measureHandler.activePlugins[nr] !== "Ukosne" && this.measureHandler.activePlugins[nr] !== "OSMPlugin") {
if (this.clickCount === 0) {
this.draw.appendCoordinates([this.lastCoord])
this.clickCount++
} else {
this.draw.finishDrawing()
this.clickCount = 0;
}
}
} else {
this.draw.appendCoordinates([this.lastCoord])
this.clickCount++
}
}
})
$(container).on("mousemove.ol", (evt) => {
this.maps[nr].removeLayer(this.drawLayer)
if (nr === 0) {
this.map2.removeLayer(this.drawLayer)
this.map2.addLayer(this.drawLayer)
} else {
this.map.removeLayer(this.drawLayer)
this.map.addLayer(this.drawLayer)
}
this.maps[nr].addInteraction(this.draw)
this.lastCoord = ol.proj.transform([this.measureHandler.moveCoords[0], this.measureHandler.moveCoords[1]], "EPSG:4326", "EPSG:3857")
if (measureType !== "Polygon") {
this.coords.pop()
this.coords.push(this.lastCoord)
} else {
if (this.coords.length <= 1) {
this.coords.pop()
this.coords.push(this.lastCoord)
} else {
this.coords.splice(this.coords.length - 2, 1, this.lastCoord)
}
}
if (nr === 0) {
olEvt = {
map: this.map2,
pixel: this.measureHandler.pixelObj,
coordinate: this.lastCoord,
originalEvent: {
pointerType: "mouse"
},
frameState: this.map2.frameState
}
} else {
olEvt = {
map: this.map,
pixel: this.measureHandler.pixelObj,
coordinate: this.lastCoord,
originalEvent: {
pointerType: "mouse"
},
frameState: this.map.frameState
}
}
this.draw.handlePointerMove_(olEvt)
})
$(container).on("dblclick.ol", () => {
this.draw.removeLastPoint()
this.draw.finishDrawing()
this.clickCount = 0;
})
})代码解释:
click 事件处理:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
86
查看详情
pointermove 事件处理:
双击事件处理:
通过自定义事件处理和调用 OpenLayers 内部方法,我们可以实现在非 OpenLayers 地图容器上进行交互,并同步更新 OpenLayers 地图上的绘制。这种方法可以扩展 OpenLayers 的应用场景,使其能够与其他 J*aScript 库或框架更好地集成。但是,需要注意内部方法的使用风险,并及时关注 OpenLayers 的更新。
以上就是如何在其他事件处理程序中触发 OpenLayers 地图事件?的详细内容,更多请关注其它相关文章!
# 压缩解压
# 西安专业网站建设怎么收费
# 承德网站建设网站优化
# 天长网络推广新闻营销
# 苏州网站建设的保障体系
# 金融营销推广方案的收获
# 陇南抖音seo报价多少
# 山西网站建设东谷互联
# 娄底全网推广优化营销
# 机电推广网站大全
# 麦肯锡公司营销推广
# 我们可以
# 并及时
# 鼠标
# javascript
# 内存管理
# 同步更新
# 图上
# 运行机制
# 如何在
# 自定义
# 点击事件
# win
# ai
# app
# go
# html
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化
掌握产品代码正则表达式:避免常见陷阱与精确匹配
抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?
todesk如何添加信任设备_todesk信任设备设置教程
《漫蛙manwa2》防走失网页版链接2025
电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】
键盘保修需要什么_键盘售后维修流程
Teambition网盘如何共享文件
《七读免费小说》开通会员方法
Win10怎么设置快速启动 Win10开启快速启动设置方法
苹果手机手电筒无法开启
抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系
哔哩哔哩黑名单怎么查看
J*aScript模块加载器_RequireJS原理分析
国际经济与贸易就业方向解析
如何在Golang中处理表单文件上传_Golang 表单文件上传示例
利用Flexbox实现图片元素的二维布局:2x2网格排列指南
睡觉时心跳快是什么原因 夜间心悸如何应对
除了Copilot,还有哪些值得一试的VS Code AI插件?
如何查询个人病历记录
win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】
天天漫画2025最新入口 天天漫画永久有效登录入口
Go语言反射机制:如何访问被嵌入结构体遮蔽的方法
多闪电脑版下载_多闪PC端模拟器使用
cad怎么隐藏指定的图层_cad隐藏或冻结图层方法
《大学搜题酱》官网地址登录
PHP中动态类名访问的类实例类型提示与静态分析实践
苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】
智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析
Go Template中优雅处理循环最后一项:自定义函数实践
c++如何实现观察者设计模式_c++行为型设计模式实战
芒果TV官网登录入口 芒果TV官方网站登录入口
我的世界官方网址入口 我的世界游戏主页直达入口
视频转蓝光m2ts格式
Highcharts雷达图径向轴数值标签实现教程
Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法
b站网页版入口 哔哩哔哩官方网站直接进入
Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法
深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析
解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用
《火影忍者:木叶高手》快速升级攻略
Safari浏览器自动填表功能失效怎么办 Safari表单管理修复
植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南
b站如何管理订阅_b站订阅标签分类管理
苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法
房产|直播|视频号怎么认证开通?|直播|需要什么资质?
外卖小程序对接第三方配送
京东物流快递破损了怎么办_京东快递破损理赔流程
《桃源记2》资源采集攻略
追剧达人如何发弹幕
2025-10-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。