在tilecache.cfg中配置好被切割地图的参数,比如:

[mytestmap]
layers=3,5,7,8
type=WMS
url=http://localhost/arcgis/services/mytestmap/MapServer/WMSServer
extension=gif
bbox=120.00,30.00,125.00,35.00
extent_type=loose
resolutions=0.0007936954220105229,0.00031747816880420905,0.00015873908440210453,0.00007936954220105226,0.000031747816880420904,0.000015873908440210452

其中,
mytestmap为自定义的名字,随便起
type就不用说了
url为发布的wms服务地址
extension为切出来图片的格式
bbox为图副的范围,单位是经纬度,依次为左下角和右上角的经纬度
extent_type=loose意思是在指定范围内切图的时候,边缘部分如果多一条的情况下,宽松处理,就往规定外围再扩一些
layers为wms中图层名称的列表,越往后越在图层的上层,这里最后一个8是最上层的,排列好,千万别把区放在最上面,否则切了半天白切了!!!!
resolutions为解析度列表--和比例尺转化见附
当然还可以定义其他的参数,可以参见tilecache的帮助文档

cmd中执行命令行
python "E:\wwwroot\tilecache\tilecache_seed.py" mytestmap 0 6
即可产生瓦块地图
如果切的比例尺很大的话要切很久很久很久。。。

【附】解析度与比例尺换算关系:
resolution:------------------scales(1:X)

0.15873908440210452---------50000000
0.031747816880420915---------10000000
0.015873908440210457---------5000000
0.007936954220105229----------2500000
0.0031747816880420914---------1000000
0.0015873908440210457---------500000
0.0007936954220105229---------250000
0.00031747816880420905--------100000
0.00015873908440210453---------50000
0.00007936954220105226---------25000
0.000031747816880420904--------10000
0.000015873908440210452--------5000     
0.000007936954220105226---------2500

1.以上的13个比例尺级别是googlemap中的比例尺级别
2.解析度的值意义就是:一个px的单位所代表的实际距离,单位是degree
3.dpi是按照96计算的

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果能让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
       结束的缩放级别

使TileCache配合OpenLayers,产生地图瓦块的一些资料(转)的更多相关文章

  1. 用OpenLayers开发地图应用

    项目背景 最近有一个使用全球地图展示数据的项目,用地图展示数据本身没什么难度,但出于安全和保密的考虑,甲方单位要求项目不能连接外网,只能在内网使用,也就是说,我们不得不在内网中部署一个地图服务器,在这 ...

  2. 使用OpenLayers 勾画地图

    <!DOCTYPE html> <html xmlns=http://www.w3.org/1999/xhtml> <head> <meta charset= ...

  3. JavaWeb和WebGIS学习笔记(五)——使用OpenLayers显示地图

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  4. OpenLayers中地图缩放级别的设置方法

    来源于:http://www.cnblogs.com/sailheart/archive/2011/03/15/1984519.html 一.概述 在OpenLayers中,地图必须具有一个缩放级别的 ...

  5. OpenLayers在地图上显示统计图,饼图线状图柱状图,修复统计图跳动的问题

    环境介绍 Openlayers ol.js v5.3.0 Highcharts highcharts.js v7.0.1 jquery jquery-3.3.1.js v3.3.1 显示效果 地图放大 ...

  6. 使用OpenLayers发布地图

    OpenLayers是用于制作交互式Web地图的开源客户端JavaScript类库,制作的地图几乎可以在所有的浏览器中查看.因为是客户端类库,它不需要特殊的服务器端软件或配置,甚至不用下载任何东西就可 ...

  7. openlayers之地图测距侧面

    项目背景vue-cli3.0 public下html需要引入文件 <link rel="stylesheet" href="<%= BASE_URL %> ...

  8. OpenLayers在地图外放置控件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  9. openlayers之地图截图

    方法1 //this.map._this为初始化地图对象 this.map._this.once('postcompose', function (event) { var canvas = even ...

随机推荐

  1. [动态规划] uestc oj A - 男神的礼物

    A - 男神的礼物 Time Limit: 3000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Lweb学长 ...

  2. 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)

    点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...

  3. 【BZOJ2243】[SDOI2011] 染色(树链剖分)

    点此看题面 大致题意: 有一棵\(n\)个节点的无根树和\(m\)个操作,且每个节点有一个颜色.操作有两种:一种是将两点树上路径之间所有点染成颜色\(c\),另一种是询问两点树上路径之间颜色段的数量. ...

  4. c++连接mysql并提示“无法解析的外部符号 _mysql_server_init@12”解决方法&提示缺少“libmysql.dll”

    课程作业要用c++连接mysql server,但是出现些小问题,经查阅资料已经解决,做一下笔记. 环境:vs2017, mysql版本是8.0.16-winx64. 设置项目属性   项目 -  C ...

  5. latex-word

    http://blog.sina.com.cn/s/blog_565e747c0100qxma.html 附:PowerPoint 中插入LaTeX公式的插件,IguanaTex,功能和TeXsWor ...

  6. 前端小记3——iOS与Android问题

    1.消除transition闪屏 (1)-webkit-transform-style:preserve-3d;  /*设置内嵌的元素在 3D 空间如何呈现:保留 3D*/ (2)-webkit-ba ...

  7. 《转载》ASP动态iframe

    原文:[ASP.NET]关于iframe的两个技巧 最近在给朋友写个网站,虽然不大,但是也碰到了一些问题.这篇就为解决ASP.NET中关于IFRAME的两个很现实的问题提供解决方法.PS:呵呵,又做了 ...

  8. vue 判断是否登录,未登录跳转到登录页

    网页一进入判断是否登录,未登录跳转到登录页面 router.js export default new Router({ routes: [ { path: '/', name: 'HelloWorl ...

  9. 01.VUE学习一

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  10. ArcGis API for JavaScript学习——离线部署API

    ArcGis API for JavaScript开发笔记——离线部署API 以3.18版API为例: 在加载图图前引用GIS服务是必须的.有两种方法,一是在线引用,而是离线部署引用. 在线引用: & ...