文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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. PointRCNN: 点云的3D目标生成与检测
  2. 1032 Sharing
  3. vs工程移植报错:缺少MSVCP140D.dll ,CONCRT140D.dll ucrtbased.dll vcruntime140d.dll错误。
  4. Miniconda管理多版本python环境
  5. 计算机科学学院陈瑜,浙江大学城市学院计算机与计算科学学院 计算机科学与技术 陈则伦...
  6. linux slub分配器浅析
  7. python基础小白题5
  8. Java try catch语句详解
  9. 自动化集成:Jenkins管理工具详解
  10. JMETER badboy 录制脚本
  11. python有几种容器_Python中几种内置的容器(Containers)类型:列表、字典、集合和元组的比较和该注意的点...
  12. pandas (loc、iloc、ix)的区别
  13. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_07-vuejs研究-vuejs基础-v-bind指令...
  14. Android 移动应用开发模拟题
  15. php中如何从键盘获取,在javascript中如何获取键盘的keyCode
  16. 贝叶斯分析好坏_贝叶斯分析基础——可信度、模型和参数
  17. 基于 vue-element-admin 基础模板实现侧边栏菜单动态渲染
  18. mysql 批量执行sql语句_MySQL中批量执行SQL语句
  19. 保险合同的订立,生效与履行
  20. 【无标题】抖音 s_v_web_id

热门文章

  1. GIS中的拓扑空间关系
  2. 第十一届蓝桥杯 ——成绩统计
  3. Windows系统中vscode+MSVC的C++配置
  4. 从Git上如何拉取远程分支(dev)到本地?
  5. K型热电偶(k-type)温度与电压转换计算笔记
  6. 科学史上最伟大的十位单身科学家
  7. 仲恺计算机二级c语言,2009年下半年(第30次)全国计算机等级考试(NCRE)广东考区报考简章...
  8. 关于Rigidbody,Collider和CharacterController三者之间的关系和用法的总结
  9. PHP empty()
  10. vue range 双向滚动 取中间值