
本文将围绕如何在 OpenLayers 中,当需要在非 OpenLayers 地图容器上进行测量时,触发或模拟地图的 "click" 和 "pointermove" 事件展开讨论。
在使用 OpenLayers 开发测量工具时,通常会使用 ol.interaction.Draw 交互来实现绘制功能。 然而,当测量操作发生在非 OpenLayers 地图的容器上时,OpenLayers 地图上的测量更新可能会出现延迟,直到触发 "dblclick" 事件才会完成绘制。 为了解决这个问题,我们需要找到一种方法,在自定义事件处理程序中模拟或触发 OpenLayers 地图的 "click" 和 "pointermove" 事件,从而实现多个地图之间的实时同步测量。
以下代码展示了如何在自定义事件处理程序中,通过 appendCoordinates() 方法处理点击事件,并通过模拟 ol.MapBrowserEvent 对象来触发 "pointermove" 事件。
CA.LA
第一款时尚产品在线设计平台,服装设计系统
86
查看详情
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;
});
});代码解释:
通过使用 appendCoordinates() 方法和模拟 ol.MapBrowserEvent 对象,可以在自定义事件处理程序中触发 OpenLayers 地图的 "click" 和 "pointermove" 事件,从而实现多个地图之间的实时同步测量。 在实际应用中,需要根据具体情况进行调整和优化,并注意 OpenLayers API 的变化。
以上就是使用 OpenLayers 在自定义事件处理程序中触发地图事件的详细内容,更多请关注其它相关文章!
# 尤其是
# 南宁科技网站建设
# 渭南seo公司到1火星
# 浙江营销推广效果如何
# 中山定制型网站建设设计
# 开封网络营销推广获客
# seo错误说法
# 目前seo怎么优化
# ska和seo
# 坪山营销型网站推广
# 东台网站优化推广工作室
# 才会
# 如何在
# go
# 构建一个
# 后端
# 的是
# 无法正常
# 多个
# 鼠标
# 自定义
# 点击事件
# win
# ai
# 工具
# app
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
空腹吃苹果好吗 苹果空腹摄入指南
广州地铁app准妈咪徽章领取方法
《领英》查看屏蔽名单方法
QQ邮箱手机版网页版 QQ邮箱登录入口地址
FotoBalloon图片左右镜像教程
c++类和对象到底是什么_c++面向对象编程基础
Word 2003字体大小设置方法
Win11如何分屏操作_Win11多窗口分屏技巧
阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口
百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析
QQ邮箱PC端登录页面_QQ邮箱网页版登录界面
如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】
12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧
动漫岛汉化官网网 动漫岛官方动漫汉化地址
Pydantic 中“schema”字段命名冲突的解决方案
汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口
Lar*el Socialite单设备登录策略:实现用户唯一会话管理
《土豆雅思》修改密码方法
如何查询个人病历记录
VS Code快捷键when上下文子句的妙用
使用jQuery精确检测除指定元素外任意位置的点击事件
CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化
Golang如何初始化module项目_Golang module init使用说明
《洛克王国:世界》国家队搭配攻略
Win10怎么设置快速启动 Win10开启快速启动设置方法
《东方航空》添加乘机人方法
C++如何实现单例模式_C++线程安全的单例模式写法
《深林》冬季章节图文攻略
VS Code源代码管理(SCM)视图的进阶使用技巧
邮编号码查询app有哪些_邮编号码查询推荐app及使用体验
处理含命名空间的XML文件 Power Query中的高级技巧
J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践
mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法
免费占卜在线神算_免费占卜手机神算
餐馆菜篮选购指南
J*aScript类型数组_TypedArray使用
Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件
电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】
b站怎么用微信登录_b站微信登录方法
c++如何使用std::thread::join和detach_c++线程生命周期管理
德邦物流在线查询系统 德邦快递货物运输追踪
uc浏览器官网网页版使用 uc浏览器官网免费在线首页
高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践
ao3入口镜像地址 ao3镜像入口可靠跳转
PHP实现等比数列:构建数组元素基于前一个值递增的方法
告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度
CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式
《合金装备4》有望推出重制版!制作人发话了
PHP中获取HTTP响应状态消息:方法与限制
漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口
2025-10-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。