核心提示:OpenLayers调用WMS服务:图像的加载是采用的螺旋式加载。首先从右上角开始按照顺时针方向给整个img矩阵建立一个堆栈,其实质是按照堆栈先进后出思想设计的一个数组,然后按堆栈中的位置顺序从视窗中...
OpenLayers调用WMS服务:
图像的加载是采用的螺旋式加载。首先从右上角开始按照顺时针方向给整个img矩阵建立一个堆栈,其实质是按照堆栈先进后出思想设计的一个数组,然后按堆栈中的位置顺序从视窗中间开始逆时针方向依次加载栅格图像。
整个img矩阵构成一个grid格网,当移动地图使得grid的范围[即bound值]不能包含视窗的bound,或者地图的显示比例发生变化时会重新向服务器请求数据,否则只会移动各个img的位置,从而使得视窗在grid之内。
客户端用于栅格图显示的img数量是由计算得到的。用户指定的用于显示的p作为视窗,视窗大小除以每张img的长宽得到一个m*n的矩阵,表示要填满整个视窗在长宽方向所需的最少的img数量,然后将Img长宽方向都缓存两个img得到一个(m+2)*(n+2)的矩阵,即为客户端img数,默认缓存为两格,当然我们也可以将缓存数作为参数传入以改变缓存默认值buffer,那么改动之后的矩阵为(m+buffer)*(n+buffer)。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <meta name="apple-mobile-web-app-capable" content="yes"> <title>OpenLayers Buffer Example</title> <link rel="stylesheet" href="../theme/default/style.css" type="text/css"> <link rel="stylesheet" href="style.css" type="text/css"> <script src="../lib/OpenLayers.js"></script> <script type="text/javascript"> var lon = 0; var lat = 0; var zoom = 2; var map, layer; function init(){ map = new OpenLayers.Map( 'map' ); layer = new OpenLayers.Layer.WMS( "0 buffer: OpenLayers WMS", "https://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {'buffer':0} ); map.addLayer(layer); layer = new OpenLayers.Layer.WMS( "1 buffer: OpenLayers WMS", "https://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {'buffer':1} ); map.addLayer(layer); layer = new OpenLayers.Layer.WMS( "4 buffer: OpenLayers WMS", "https://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {'buffer':4} ); map.addLayer(layer); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); } </script> </head> <body onload="init()"> <h1 id="title">Buffer Example</h1> <p id="tags"> buffer, performance, tile, light </p> <p id="shortdesc"> This example shows the use of the buffer layer option for any layer that inherits from OpenLayers.Layer.Grid. </p> <p id="map" class="smallmap"></p> <p id="docs"> Use the buffer property to control how many tiles are included outside the visible map area. Default is 0. </p> </body> </html>