基于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检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
用JS判断IE版本的代码 超管用!
Aug 09 Javascript
JS时间特效最常用的三款
Aug 19 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
JS实现留言板功能
Jun 17 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 Javascript
深入剖析JavaScript instanceof 运算符
Jun 14 Javascript
微信小程序实现限制用户转发功能的实例代码
Feb 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按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
两种php实现图片上传的方法
2016/01/22 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
Vue实现简易计算器
2020/02/25 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Python字典的核心底层原理讲解
2019/01/24 Python
Python缓存技术实现过程详解
2019/09/25 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
普通大学毕业生自荐信范文
2014/02/23 职场文书
团代会主持词
2014/04/02 职场文书
食品质检员岗位职责
2015/04/08 职场文书
同学聚会通知书
2015/04/20 职场文书
公司职员入党自传书
2015/06/26 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书