文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

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:

当图层从Map中去除时去掉所有监听事件:

3.2监听缩放事件进行重绘

对于每一个IMG的width和height要根据目前四角坐标对应的屏幕坐标进行换算:

3.3监听平移事件进行坐标变化

4.几点注意

a.当继承的是Layer时,setMap函数需要返回的必须是用DOJO生成的DIV。假如继承的是GraphicLayer,返回的不能为DIV,因为GrahpicLayer其是SVG构造。

b.为提高显示效率,平移重绘的最好方法是直接改变DIV的左上角位置,而不是对所有IMG进行删除再重新添加。

5.结果展示

以归元寺为例子:

              

-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

转载于:https://www.cnblogs.com/naaoveGIS/p/6576420.html

基于AGS JS开发自定义贴图图层相关推荐

  1. AGS JS开发自定义贴图图层

    1.前言 假设一个景区有多张图片需要在地图上展示,并且随着地图的缩放而缩放(不是单纯的以气泡来展示).如果利用传统方案,则是我们首先将图片纠正赋予地理信息,然后根据地图级别进行切图,最后以瓦片的形式叠 ...

  2. 基于node.js开发环境下创建及开发vue.js项目的环境配置骤

    基于node.js开发环境下创建开发vue.js项目的环境配置骤如下: 步骤一:安装node.js,安装完后运行node -v命令检安装node的查版本,判断是否安装成功.Npm是node.js包管理 ...

  3. js时间选择器_Vuestic Admin一款免费与美妙基于Vue.js开发的管理模板

    Vuestic Admin 简介 vuestic admin是一款流行,免费与美妙的基于Vue.js开发出来的管理模板,包括38以上个定制用户界面组件,由Epicmax开发,由Vasili Savit ...

  4. 基于three.js开发可视化应用经验总结

    文章目录 背景简介 技术方案介绍及对比 Webgl Three.js WEBGL和Three.js的关系 具体应用过程 星空背景 流线汇聚效果 行政分区环形选择器 Three.js 中使用TWEEN插 ...

  5. 基于howler.js开发的音乐播放器

    2019独角兽企业重金招聘Python工程师标准>>> howler.js 是一个新的 JavaScript 库用于处理 Web 的音频,该库最初是为一个 HTML5 游戏引擎所开发 ...

  6. vuejs+d3.js开发的轨道图+饼图

    应公司要求开发了一个流程关联关系轨道图,在开发的过程中发现可以把统计功能也一块做了,所以就有了现在的轨道图+饼图分析的功能.废话不多少,先上效果图: 采用的vuejs+elementui+d3.js开 ...

  7. 基于node.js开发的聚美酒店住宿管理系统的设计(论文设计word文档)

    摘要 随着经济的发展,越来越多的群体依赖互联网,酒店行业也纷纷捉住机遇 展开新的运营方式--线上运营,取得了不错的成效并且大大节约了成本问题,与 此同时,聚美酒店作为大型企业之一,员工数量众多,但在住 ...

  8. 基于H5+js开发一款音乐播放器

    前言:当下音乐播放器不胜其数,为了更好的掌握一些东西,我们来自己制作一个音乐播放器. 文章目录: 一.开发环境: 二.页面视图: 1.主文件入口(首页): 2.音乐播放界面: 三.功能实现 (1).i ...

  9. 基于html+js实现轮播图(自动轮播、左右按钮、小圆点点击及切换图片)

    使用html和js实现的一个简单小练习轮播图.大概功能主要是: 1.使用时间函数自动切换图片: 2.在图片及按钮及小圆点的父节点身上绑定事件代理,添加mouseenter及mouseleave事件类型 ...

最新文章

  1. python3 使用 socket.gethostbyname 报错 getaddrinfo failed 解决方法
  2. 常用社交网络(SNS、人人网、新浪微博)动态新闻(feed、新鲜事、好友动态)系统浅析
  3. HighCharts控制不显示“上下文菜单”
  4. 冬天人物活动插画|表达有温度的冬季海报必备psd分层素材
  5. C#接口的使用场合,接口应用
  6. MATLAB-电力电子技术仿-单向半波整流电路分析
  7. Android编程之LocalBroadcastManager源码详解
  8. TFRecord —— tensorflow 下的统一数据存储格式
  9. Q107:Mac系统下GDB对PBRT-V3进行debug
  10. 《微店赚钱一册通 ——开店+营销+推广 实战全攻略》一一1.5 微店有哪些优势...
  11. css line-height多种用法与之间的区别
  12. 生成随机 简体汉字 繁体汉字
  13. python 爬虫例子及总结(详细理解注释)
  14. html 跑步比赛小游戏,跑步比赛小班游戏教案
  15. 2016年Godaddy最新域名转出教程
  16. Microsoft Visual Studio 2010升级Service Pack1问题
  17. 关于 Swap file “~.bash_profile.swp“ already exists (已解决)
  18. 每日分享,一个不错的数据分析实战案例【数据分析可视化】MySQL+Python
  19. 机器学习之金融信贷风控(一)互联网金融业申请评分卡的介绍
  20. 计算机公式等级评定,Excel函数如何完成学生成绩等级评定

热门文章

  1. 2.2 拓扑空间与连续映射
  2. 聚合数据-免费的接口
  3. HMS Core使能AI智慧体验,共建创新应用生态
  4. FPGA SATA IP控制器的SATA接口调试记录
  5. js 下载Base64格式数据图片(兼容主流浏览器)
  6. 解决Windows 下git官网下载很慢
  7. HRSSC是什么职位,有什么要求
  8. 基于决策树的电网负荷预测
  9. 如何衡量品牌营销效果?四大指标为王道
  10. 小陈谈JAVA(数组到底是怎样的,三分钟让你彻底认识数组)