基于AGS JS开发自定义贴图图层
发布时间 - 2026-01-11 00:27:28 点击率:次1.前言

假设一个景区有多张图片需要在地图上展示,并且随着地图的缩放而缩放(不是单纯的以气泡来展示)。如果利用传统方案,则是我们首先将图片纠正赋予地理信息,然后根据地图级别进行切图,最后以瓦片的形式叠加至地图上,工作量是很大的。然而考虑到图片本身不会太大(小于3M),那么有没有其他方法来解决呢。这里我和大家一起探讨几种解决思路。
2.解决思路
2.1基于grahpic和symbol来解决
2.1.1思路描述
简单说就是获取图片左上角和右下角对应的地理坐标,给grahpic的geometry赋上左上角坐标,grahpic的symbol赋予图片的url、以及通过地理坐标转换获取到的两点屏幕坐标间的screenwidth和screenheight。这里尤其要注意symbol的xoffset和yoffset两个属性值需(+screenwidth/2,-screenheight/2)。最后监听地图的缩放事件,做相关的symbol的width和height计算即可。
2.1.2讨论
优势是实现简单:
a.直接利用AGS已有对象完成。
b.不用考虑拖拽时的坐标变化等。
劣势:当地图放大到一定级别,symbol的长宽大过地图屏幕范围时则symbol将不再渲染。
2.2直接添加DIV+IMG来解决
2.2.1思路描述
直接在Map所在的ParentDIV中为图片创建的DIV+IMG,原理与思路一相同,通过换算地理坐标的屏幕坐标来设置各IMG的长宽以及DIV的left和top。这里尤其需要注意的是对地图拖拽事件同样需要监听并进行相关处理。
2.2.2讨论
优势:地图缩放到任意级别都能同样缩放展示图片。
劣势:图片本身无法响应地图事件,比如当鼠标在图片上,缩放、拖拽均不能进行。
2.3继承AGS的Layer来自定义开发贴图图层
除需要继承Layer外,其他思路与思路二没有太大区别。但是可以规避思路一中图片超过屏幕范围无法显示的问题,也能规避思路二中的鼠标在图片上时无法进行地图操作的问题。
2.4总结
考虑到思路一和思路二中的明显劣势问题,采用思路三是更好的选择。
3.详细实现(继承AGS的Layer开发贴图图层)
3.1继承layer重写相关方法
在Map的DOM中新增一个DIV:
当图层从Map中去除时去掉所有监听事件:
3.2监听缩放事件进行重绘
对于每一个IMG的width和height要根据目前四角坐标对应的屏幕坐标进行换算:
3.3监听平移事件进行坐标变化
4.几点注意
a.当继承的是Layer时,setMap函数需要返回的必须是用DOJO生成的DIV。假如继承的是GraphicLayer,返回的不能为DIV,因为GrahpicLayer其是SVG构造。
b.为提高显示效率,平移重绘的最好方法是直接改变DIV的左上角位置,而不是对所有IMG进行删除再重新添加。
5.结果展示
以归元寺为例子:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# AGS
# JS
# 贴图图层
# arcgis for js栅格图层叠加(Raster Layer)问题
# 微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
# js实现点击按钮后给Div图层设置随机背景颜色的方法
# 运用js实现图层拖拽的功能
# 的是
# 图层
# 拖拽
# 太大
# 考虑到
# 二中
# 长宽
# 图上
# 鼠标
# 我和
# 都能
# 已有
# 则是
# 也能
# 要注意
# 三是
# 几种
# 几点
# 重写
# 在地
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何快速使用云服务器搭建个人网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
PHP 500报错的快速解决方法
如何快速生成凡客建站的专业级图册?
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
香港服务器租用每月最低只需15元?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
如何在建站之星绑定自定义域名?
三星、SK海力士获美批准:可向中国出口芯片制造设备
高端企业智能建站程序:SEO优化与响应式模板定制开发
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Android实现代码画虚线边框背景效果
零基础网站服务器架设实战:轻量应用与域名解析配置指南
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel如何使用Eloquent进行子查询
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
网页设计与网站制作内容,怎样注册网站?
如何在IIS7中新建站点?详细步骤解析
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
原生JS获取元素集合的子元素宽度实例
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
java获取注册ip实例
iOS验证手机号的正则表达式
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
如何在建站主机中优化服务器配置?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何快速搭建安全的FTP站点?
网站建设要注意的标准 促进网站用户好感度!
历史网站制作软件,华为如何找回被删除的网站?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何快速搭建自助建站会员专属系统?
如何在阿里云高效完成企业建站全流程?
html5的keygen标签为什么废弃_替代方案说明【解答】
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何用低价快速搭建高质量网站?
如何安全更换建站之星模板并保留数据?
Swift中swift中的switch 语句
Angular 表单中正确绑定输入值以确保提交与验证正常工作
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】

