基于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 相关文章推荐
IE与FireFox的兼容性问题分析
Apr 22 Javascript
Angularjs 基础入门
Dec 26 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 Javascript
实例讲解jQuery中对事件的命名空间的运用
May 24 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
js实现带缓动动画的导航栏效果
Jan 16 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
jQuery实现的模仿雨滴下落动画效果
Dec 11 jQuery
基于ssm框架实现layui分页效果
Jul 27 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php 读取文件乱码问题
2010/02/20 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php限制ip地址范围的方法
2015/03/31 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python做简单的字符串匹配详解
2017/03/21 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
Python管理Windows服务小脚本
2018/03/12 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
python使用正则筛选信用卡
2019/01/27 Python
Python的log日志功能及设置方法
2019/07/11 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
什么是Python中的匿名函数
2020/06/02 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
工厂厂长的职责
2013/12/12 职场文书
工厂实习感言
2014/01/14 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
会议室使用管理制度
2015/08/06 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL