基于AGS JS开发自定义贴图图层


Posted in Javascript onMarch 31, 2017

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:

基于AGS JS开发自定义贴图图层

当图层从Map中去除时去掉所有监听事件:

基于AGS JS开发自定义贴图图层

3.2监听缩放事件进行重绘

对于每一个IMG的width和height要根据目前四角坐标对应的屏幕坐标进行换算:

基于AGS JS开发自定义贴图图层

3.3监听平移事件进行坐标变化

基于AGS JS开发自定义贴图图层

4.几点注意

a.当继承的是Layer时,setMap函数需要返回的必须是用DOJO生成的DIV。假如继承的是GraphicLayer,返回的不能为DIV,因为GrahpicLayer其是SVG构造。

b.为提高显示效率,平移重绘的最好方法是直接改变DIV的左上角位置,而不是对所有IMG进行删除再重新添加。

5.结果展示

以归元寺为例子:

基于AGS JS开发自定义贴图图层

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
Feb 05 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
vue按需加载实例详解
Sep 06 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 #Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 #Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 #Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 #Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 #Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 #Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 #Javascript
You might like
PHP4实际应用经验篇(1)
2006/10/09 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
用console.table()调试javascript
2014/09/04 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
vant实现购物车功能
2020/06/29 Javascript
python中的装饰器详解
2015/04/13 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python实现接口并发测试脚本
2019/06/25 Python
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
幼儿评语大全
2014/04/30 职场文书
2014司机年终工作总结
2014/12/05 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
员工手册编写范本
2015/05/14 职场文书
同事欢送会致辞
2015/07/31 职场文书
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技