基于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 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
JQuery实现鼠标滑过显示导航下拉列表
Sep 12 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
js实现最短的XML格式化工具实例
Mar 12 Javascript
基于JavaScript实现右键菜单和拖拽功能
Nov 28 Javascript
简单理解vue中实例属性vm.$els
Dec 01 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
ES6中Array.includes()函数的用法
Sep 20 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
Apr 24 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
网站当前的在线人数
2006/10/09 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
JavaScript WeakMap使用详解
2021/02/05 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python中unittest用法实例
2014/09/25 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
浅析python实现动态规划背包问题
2020/12/31 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
餐厅考勤管理制度
2014/01/28 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
经营场所使用证明
2015/06/19 职场文书
提档介绍信范文
2015/10/22 职场文书
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python