OpenLayers.Layer.Grid
来源:互联网 发布:乒羽先锋淘宝商城 编辑:程序博客网 时间:2024/06/08 08:06
OpenLayers教程之OpenLayers的WMS调用:
图像的加载是采用的螺旋式加载。首先从右上角开始按照顺时针方向给整个img矩阵建立一个堆栈,其实质是按照堆栈先进后出思想设计的一个数组,然后按堆栈中的位置顺序从视窗中间开始逆时针方向依次加载栅格图像。
整个img矩阵构成一个grid格网,当移动地图使得grid的范围[即bound值]不能包含视窗的bound,或者地图的显示比例发生变化时会重新向服务器请求数据,否则只会移动各个img的位置,从而使得视窗在grid之内。
客户端用于栅格图显示的img数量是由计算得到的。用户指定的用于显示的div作为视窗,视窗大小除以每张img的长宽得到一个m*n的矩阵,表示要填满整个视窗在长宽方向所需的最少的img数量,然后将Img长宽方向都缓存两个img得到一个(m+2)*(n+2)的矩阵,即为客户端img数,默认缓存为两格,当然我们也可以将缓存数作为参数传入以改变缓存默认值buffer,那么改动之后的矩阵为(m+buffer)*(n+buffer)。
在移动的时候取grid网格中左上角那个tile的左上角坐标值,即grid[0][0]为参考点,当这个点的坐标超出阈值的时候会搬动grid中各个节点的位置。
这里的img在openlayers中其实已经被封装成了Tile类,该图层有一个div作为容器。每个image都有一个div将其包装起来,tileSize是按照OpenLayers.TILE_WHITH,OpenLayers.TILE_HEIGHT常量事先就定义好了,表示每个tile实例的大小。
栅格图形显示之提供了基于标准的WMS调用的,即只要服务器端提供了标准的WMS服务,客户端就可以调用到。由于OpenLayers的螺旋加载功能是和最底下的一层分开的,因此我们可以在最底层扩展自己的栅格地图调用类,即让自己的类继承自OpenLayers.Layer.Grid,在我们自己的类中重构getURL方法。但是,这也有个弊端,那就是我们依然很大程度上继承了OpenLayers的栅格调用方法,这种方法具有很高的重用性,非常利于扩展,但是不一定会带来高的效率。
举个例子:
我们需要自己的调用方式,服务器端提供的栅格图金字塔一共有17级,整个显示范围是-180,-90,180,90,第零级每张栅格图经纬度方向上的跨度都是18度,随着级数升高经纬度方向上的跨度相比前一级都减半,栅格图采用的是格网坐标,坐标原点在左上角。我们自己的调用方式有一部分和WMS栅格图调用相同。当移动或者缩放的范围超出阈值的时候会向服务器发送请求,我们根据每个Tile的经纬度范围计算得到该栅格图中心点的经纬度坐标,而根据当前经纬度可以知道该分辨率下服务器端栅格图矩阵,然后再根据该分辨率下栅格图的经纬度跨度得到Tile在服务器端提供的栅格图上所处的位置,从而取到该图。从服务器端过来的栅格图像每张大小为256*256像素。
这个过程是很我重新写过的,基本继承了OpenLayers的WMS调用的核心思想,当然效率也不会有改进。
其实我们完全可以让自己的栅格显示类直接继承自OpenLayers.Layer,这样一方面利用了OpenLayers图层操作的框架,令一方面又最大程度上放弃了OpenLayers带来低效率的机制。经过本人试验,虽然做了这个改进,但是最终的效果也没有很明显的改进,原因容后续分析。
该部分主要包含4个类,OpenLayers.Layer,OpenLayers.Layer.HTTPRequest,OpenLayers.Layer.Grid,OpenLayers.Layer.WMS,它们的继承关系如图所示:
- OpenLayers.Layer.Grid
- openlayers.layer.WMS
- Openlayers中layer介绍
- openlayers的layer和Control类
- OpenLayers学习--Layer体系(二)
- Openlayers学习笔记——Vector Layer 事件类型
- Openlayers学习笔记——Vector Layer Style
- Openlayers学习笔记——Vector Layer Rules和Filter
- OpenLayers学习——Layer体系(一)
- OpenLayers中layer图层概念和实践
- openlayers
- openlayers
- OpenLayers
- openlayers
- openLayers
- OpenLayers
- openlayers
- OpenLayers 3 之 地图矢量图层(ol.layer.Vector)详解
- 关于投影概念的理解(墨卡托、高斯…
- 投影的一些算法
- oracle 死锁/解锁
- Windows下一个文件夹下最多可以放…
- 线段的重叠(51nod 1091)
- OpenLayers.Layer.Grid
- 比例尺和分辨率的相关概念
- 优秀的开源GIS软件
- Java Math的 floor,roun…
- Jquery调用ajax调用xml服务
- 为什么叫最小二乘法
- 电驴提示“该内容尚未提供权利证明…
- 解决jquery冲突和整合jBox2.3框架
- 选择某种Map集合保存学号从1到15的学员的学号(键)和姓名(值),学号用字符串表示,输入的时候要以学号乱序的方式存入Map集合,然后按照学号从大到小的顺序将Map集合中的元素输出打印。需要自定义Ma