基于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 相关文章推荐
js中的onchange和onpropertychange (onchange无效的解决方法)
Mar 08 Javascript
JavaScript实现彩虹文字效果的方法
Apr 16 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
js+css实现打字效果
Jun 24 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
JavaScript之数组扁平化详解
Jun 03 Javascript
如何在Vue中抽离接口配置文件
Oct 31 Javascript
将Vue组件库更换为按需加载的方法步骤
May 06 Javascript
ES5新增数组的实现方法
May 12 Javascript
抖音短视频(douyin)去水印工具的实现代码
Mar 30 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 高手之路(二)
2006/10/09 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
Django中使用Celery的教程详解
2018/08/24 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Django 多环境配置详解
2019/05/14 Python
如何使用python进行pdf文件分割
2019/11/11 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
Python调用飞书发送消息的示例
2020/11/10 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
开会迟到检讨书
2014/01/08 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
雷锋观后感
2015/06/10 职场文书
MySql数据库触发器使用教程
2022/06/01 MySQL