基于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编写trim()函数及正则表达式的运用
Oct 24 Javascript
js生成随机数之random函数随机示例
Dec 20 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
Feb 14 Javascript
详解数组Array.sort()排序的方法
May 09 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
Sep 18 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
Vue项目打包编译优化方案
Sep 16 Javascript
JS绘图Flot如何实现可选显示曲线图功能
Oct 16 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企业级应用之常见缓存技术篇
2011/01/27 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
php模板原理讲解
2013/11/13 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
js友好的时间返回函数
2016/08/24 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
JavaScript字符串对象
2017/01/14 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python base64编码解码实例
2015/06/21 Python
Python实时获取cmd的输出
2015/12/13 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
Python文件操作的面试题
2013/06/22 面试题
WSDL的操作类型主要有几种
2013/07/19 面试题
毕业生个人求职信范例分享
2013/12/17 职场文书
文案策划求职信
2014/04/14 职场文书
保护环境倡议书500字
2014/05/19 职场文书
广播体操口号
2014/06/18 职场文书
会计学专业自荐信
2014/06/25 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
运动会演讲稿300字
2014/08/25 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
美术教师求职信范文
2015/03/20 职场文书
《失物招领》教学反思
2016/02/20 职场文书