基于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 cookies操作集合
Apr 12 Javascript
$.format,jquery.format 使用说明
Jul 13 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 Javascript
js选择器全面解析
Jun 27 Javascript
jQuery实现鼠标跟随效果
Feb 20 Javascript
jQuery EasyUI ProgressBar进度条组件
Feb 28 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
基于bootstrap写的一点localStorage本地储存
Nov 21 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
python实现多进程通信实例分析
2019/09/01 Python
python中图像通道分离与合并实例
2020/01/17 Python
使用Python发现隐藏的wifi
2020/03/04 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
机械个人求职信范文
2014/01/24 职场文书
六年级数学教学反思
2014/02/03 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
银行先进个人总结
2015/02/15 职场文书
500字作文之周记
2019/12/13 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript