基于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 相关文章推荐
SharePoint 客户端对象模型 (一) ECMA Script
May 22 Javascript
二叉树先序遍历的非递归算法具体实现
Jan 09 Javascript
jquery动态加载js/css文件方法(自写小函数)
Oct 11 Javascript
jqTransform美化表单
Oct 10 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 Javascript
通过JS判断网页是否为手机打开
Oct 28 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
对联广告js flash激活
2006/10/19 Javascript
判断脚本加载是否完成的方法
2009/05/26 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
让微信小程序支持ES6中Promise特性的方法详解
2017/06/13 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
js实现简单的秒表
2020/01/16 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
python操作MongoDB基础知识
2013/11/01 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
python线程池threadpool使用篇
2018/04/27 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
上班睡觉检讨书
2014/01/09 职场文书
英语教师岗位职责
2014/03/16 职场文书
警校毕业生自我评价
2014/04/06 职场文书
ktv筹备计划书
2014/05/03 职场文书
企业承诺书怎么写
2014/05/24 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
党员承诺书格式范文
2015/04/28 职场文书
学生会工作感言
2015/08/07 职场文书