基于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 相关文章推荐
HTTP状态代码以及定义(解释)
Feb 02 Javascript
JQuery开发的数独游戏代码
Oct 29 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
JavaScript数组常用方法
Mar 02 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
微信小程序 基础知识css样式media标签
Feb 15 Javascript
angular.js实现购物车功能
Oct 23 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
Jul 22 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
PHP操作xml代码
2010/06/17 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
python之wxPython应用实例
2014/09/28 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
Python生成器generator原理及用法解析
2020/07/20 Python
Python如何绘制日历图和热力图
2020/08/07 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
远程调用的原理
2014/07/05 面试题
致1500米运动员广播稿
2014/02/07 职场文书
广告宣传策划方案
2014/05/21 职场文书
火箭队口号
2014/06/18 职场文书
爱护公物标语
2014/06/24 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
敬老月活动总结
2014/08/28 职场文书
商务英语求职信范文
2015/03/19 职场文书
地道战观后感300字
2015/06/04 职场文书
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
python游戏开发之pygame实现接球小游戏
2022/04/22 Python