基于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检查表单数据是否改变的方法
Jul 30 Javascript
js中confirm实现执行操作前弹出确认框的方法
Nov 01 Javascript
jQuery中contents()方法用法实例
Jan 08 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
Apr 12 Javascript
jQuery操作基本控件方法实例分析
Dec 31 Javascript
angular4中关于表单的校验示例
Oct 16 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
Sep 21 Javascript
JavaScript数组排序小程序实现解析
Jan 13 Javascript
jQuery实现全选按钮
Jan 01 jQuery
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版)
2006/10/09 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
PHP中串行化用法示例
2016/11/16 PHP
QQ登录简单实现代码
2021/03/09 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
python对DICOM图像的读取方法详解
2017/07/17 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
浅析Python迭代器的高级用法
2020/07/16 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
Collection和Collections的区别
2016/05/02 面试题
西部世纪面试题
2014/12/05 面试题
Linux如何压缩可执行文件
2014/03/27 面试题
金融行业务员的自我评价
2013/12/13 职场文书
六个一活动实施方案
2014/03/21 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
可怜妈妈观后感
2015/06/09 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS