基于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 相关文章推荐
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
Dec 13 Javascript
javascript构造函数以及原型对象的理解
Jan 13 Javascript
ie下js不执行的几种可能
Feb 28 Javascript
Vue自定义图片懒加载指令v-lazyload详解
Dec 31 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 Javascript
Node.js操作MongoDB数据库实例分析
Jan 19 Javascript
Vue Router的手写实现方法实现
Mar 02 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
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
深入解析神经网络从原理到实现
2019/07/26 Python
python 读取、写入txt文件的示例
2020/09/27 Python
用Python实现职工信息管理系统
2020/12/30 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
模范家庭事迹材料
2014/02/10 职场文书
经典禁毒标语
2014/06/16 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
2014年预备党员群众路线教育实践活动对照检查材料思想汇报
2014/10/02 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书