使TileCache配合OpenLayers,产生地图瓦块的一些资料
转自:http://www.360doc.com/showWeb/0/0/62463072.aspx
如
果能让tilecache直接访问缓存中的图片,不再需要wms服务,地图加载速度就会很快,这就需要tilecache切图与openlayers缩放
级别相互配合,翻译了一些相关资料,都是来自于官方网站,可能不准确,下面都有英文原文链接。网上相关资料太少了,而且大部分都是英文,特将翻译给中国人
共享之。
配置Openlayers中的缩放级别
OpenLayers Map可以在不同的比例尺或解析度下显示他的每一个layer
map对象含有缩放级别的引用,即ZoomLevels,而且允许他的每一个layer去自定义他们自己的缩放级别,使之看起来合适
可以通过在构造函数中设置options属性来配置openlayers layer的缩放级别
== 正常图层==
对于基于openlayers.layer的正常layer,和能够在任何解析度下显示的layer,存在多种不同的方式去配置缩放级别和他们各自的比例尺和解析度
“解析度数组”:
要是转化缩放级别成为解析度,需要一个{{{resolutions}}}数组,他是这个图层所支持的不同解析度的列表,缩放级别就仅仅是一个解析度数组的索引,解析度数组始于0终于缩放级别-1
比如:
一个图层的解析度为[a,b,c],那么缩放级别的0就是a ,1就是b。。。
=== 配置解析度数组的方式 ===
可选项:
{{{scales}}} – ”Array” — 预先设置比例尺值的数组
{{{resolutions}}} – ”Array” — 预先设置解析度值的数组
{{{minScale}}} – ”float” –layer能够显示的最小比例尺
{{{maxScale}}} – ”float” –layer能够显示的最大比例尺
{{{maxResolution}}} – ”float” –layer能够显示的最大解析度
{{{minResolution}}} – ”float” — layer能够显示的最小解析度
{{{minExtent}}} – ”!OpenLayers.Bounds” –layer能显示出的最小范围
{{{maxExtent}}} – ”!OpenLayers.Bounds” — layer能显示出的最大范围
{{{numZoomLevels}}} – ”int” — 缩放级别的总数
{{{units}}} – ”String” – layer显示的单位,作用于比例尺-解析度换算
Example Declarations:
{{{
var options = { scales: [50000000, 30000000, 10000000, 5000000],
resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125],
minScale: 50000000,
maxResolution: “auto”,
maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
maxResolution: 0.17578125,
maxScale: 10000000,
minResolution: “auto”,
minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
minResolution: 0.0439453125,
numZoomLevels: 5,
units: “degrees”
};
map = new OpenLayers.Map( $(‘map’) , options);
}}}
显然所有的配置项不能在一次设置中全都用上,因为他们可能相互冲突,他们会按照下面的优先级起作用:
[A]【预设的缩放级别列表】缩放级别由预先设置的比例尺或解析度决定
{{{scales}}} -解析度的数组由这些比例尺直接转化而来
{{{resolutions}}} – 解析度数组直接从初始化函数的option参数中带来
Examples:
{{{
var options = { scales: [50000000, 30000000, 10000000, 5000000] };
map = new OpenLayers.Map( $(‘map’) , options);
}}}
{{{
var options = { resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125] };
map = new OpenLayers.Map( $(‘map’) , options);
}}}
* ”’maxResolution and numZoomLevels”’ – ”!ZoomLevels are
determined based on a maximum resolution and the number of desired
!ZoomLevels”
[B]【最大解析度 &缩放级别的总数】缩放级别在最大解析度和缩放级别的总数上被决定
B1 最大解析度的确定
{{{minScale}}} –解析度的值从比例尺由单位{{{units}}}转化来
{{{maxExtent}}} AND {{{maxResolution == “auto”}}} –解析度由地图的div尺寸和maxExtent属性计算而来。若maxExtent属性未指定,默认从map继承,即全世界
{{{maxResolution}}}–解析度的值直接从layer的options参数中带来,若没指定,则默认为从map的options中带来
B2 缩放级别的总数确定
B2_a基于最大和最小解析度的比值来计算–确定最小解析度:
{{{maxScale}}} –解析度的值从比例尺由单位{{{units}}}转化来
{{{minExtent}}} AND {{{minResolution == “auto”}}}–解析度的值基于地图div尺寸和minExtent属性来计算。minExtent属性必须被指定,默认不从map继承
{{{minResolution}}} –解析度的值从layer指定的option参数中直接带来,若没指定,最小解析度保持为空,缩放级别数直接接受
B2_b {{{numZoomLevels}}}缩放级别数直接从layer指定的option参数带来,若没有指定默认从map的option带来
Examples:
||maxResolution||Converted from minScale using specified units||
||numZoomLevels||Default from map||
{{{
var options = { minScale: 50000000,
units: “degrees”
};
map = new OpenLayers.Map( $(‘map’) , options);
}}}
[[BR]]
||maxResolution||Calculated based on div size and default maxExtent from map||基于div的尺寸和地图最大范围计算
||numZoomLevels||Calculated using ratio of maxResolution/minResolution||用最大最小分辨率的比值计算
{{{
var options = { maxResolution: “auto”,
maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
minResolution: 0.0439453125
};
map = new OpenLayers.Map( $(‘map’) , options);
}}}
[[BR]]
||maxResolution||Specified||
||numZoomLevels||Specified||
{{{
var options = { maxResolution: 0.17578125,
numZoomLevels: 15
};
map = new OpenLayers.Map( $(‘map’) , options);
}}}
[[BR]]
||maxResolution||Default from map||
||numZoomLevels||Converted
maxScale (using default units from map) to minResolution, then uses
ratio of maxResolution/minResolution to calculate numZoomLevels||
{{{
var options = { maxScale: 10000000 };
map = new OpenLayers.Map( $(‘map’) , options);
}}}
[[BR]]
||maxResolution||Specified||
||numZoomLevels||Calculated
minResolution based on div size and default minExtent from map, then
uses ratio of maxResolution/minResolution to calculate numZoomLevels||
{{{
var options = { maxResolution: 0.17578125,
minResolution: “auto”,
minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
};
map = new OpenLayers.Map( $(‘map’) , options);
}}}
英文原版:http://trac.openlayers.org/wiki/SettingZoomLevels
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
TileCache配置
=============
有一些参数是控制tilecache并且应用于所有的图层
bbox-图层的外围框范围,解析度数组默认的解析度等于外围框范围除以512(2000个瓦块)
debug–是否发送调式信息到error.log,默认是yes,可以设置为no
description–图层描述,用在一些返回元数据的响应中,默认为空
extension–图层的文件扩展(名?),用来从WMS服务器中请求图片,也用在产生缓存(图片)文件时
layers–用来描述图层的字符串,主要是被直接传给渲染器。WMSLayer发送http请求,MapServerLayer根据这个字符串选择响应的图层来呈现。若没有提供layer,layer name 被用来填充这个属性
levels–一个整数,描述缩放级别的数字或支持的比例尺。若忽略则被解析度覆盖。
mapfile–mapfile的绝对路径,是MapServer 和Mapnik layers所需要的
maxResolution–解析度的最大值,若这个被设置了,解析度的数组会自动地被计算出来,计算时依据levels的值
metaTile–设置yes会打开metaTiling,这将会请求更大的瓦块,并且用Python Imaging library切开,默认为no
metaBuffer–需要设置在呈现出的瓦块周围的像素数。很好的解决不同地图返回后产生的边缘问题,默认为10
metaSize–一对由逗号隔开的整数,用来决定当用metaTiling的时候应当呈现多少瓦块,默认为5,5
resolutions–你想让TileCache支持的一组解析度的列表,由逗号隔开
size–逗号隔开的整数,描述瓦块的宽/高,默认为256,256
srs–空间参考系的字符串,默认为 “EPSG:4326”
type–图层的类型,选项有WMSLayer, MapnikLayer, MapServerLayer, ImageLayer
url—远程 WMS 服务器的访问地址,为WMSLayer必须
watermarkImage–水印图片参数是在每一个图层被指定的,你想作用在每个地图瓦块上的的图片的路径。我们建议你用和瓦块尺寸大小相同的图片,如果你用了默认的瓦块尺寸,你就应该用一张256*256的图片
注意:Python Imaging Library不支持交织的图片(??)
watermarkOpacity–这个参数在每个图层上被指定,用来配置水印的不透明度,这是个0-1的浮点数,是可选的
extent_type–设置成’loose’将会允许TileCache在最大边界框之外产生图片。在客户端不知道何时停止请求地图瓦块时很有用。
tms_type–设置成’google’将会时瓦块转换垂直放上的顺序(即,符合google类型的x/y模式)
配合OpenLayers使用TileCache
===============================
使用
tilecache运行openlayers的时候,OpenLayers.Layer.WMS构造函数中的URL必须指向tilecache脚本,比如
tilecache.cgi或tilecache.py.可以参考例子,tilecache中的index.html
【让tilecache工作的配置方法。。略】
最重要的是保证openlayers的图层和你的tilecache图层具有相同的解析度和边框。
你可以在openlayers中通过resolutions或者maxResolution选项来定义解析度,定义的maxExtent应当和TileCache图层所定义的bbox相匹配
如果你用tilecache来覆盖的话,你应当设置图层的reproject选项为false
让TileCache播种
======================
tilecache_seed.py脚本能够自动地产生地图瓦块,你需要安装tilecache按照上面的配置好
用法
—–
tilecache_seed.py [options] <layer> [<zoom start> <zoom stop>]
可选项
——-
–version 显示程序的版本且退出
-h, –help 显示帮助信息且退出
-f, –force 强制重新生成瓦块,即使缓存中已经存在
-b BBOX, –bbox=BBOX 限制在指定的边界内
-p PADDING, –pading=PADDING
在产生瓦片的目标区外边缘的额外的瓦块,默认为0(一些边缘瓦块将会变没)。值为1会保证所有的瓦块被创建,但是一些瓦块可能在你定义的边界之外
参数
———
layer
tilecache.cfg中配置的layer名字
zoom start
开始的缩放级别
zoom end
结束的缩放级别
转载自:https://blog.csdn.net/qqzhuyuehe/article/details/5954286