Posted on 2009-03-11 16:48 lei3389 閱讀(282) 評論(3) 編輯 收藏 網(wǎng)摘 所屬分類: GIS
如
果能讓tilecache直接訪問緩存中的圖片,不再需要wms服務(wù),地圖加載速度就會(huì)很快,這就需要tilecache切圖與openlayers縮放
級別相互配合,翻譯了一些相關(guān)資料,都是來自于官方網(wǎng)站,可能不準(zhǔn)確,下面都有英文原文鏈接。網(wǎng)上相關(guān)資料太少了,而且大部分都是英文,特將翻譯給中國人
共享之。
配置Openlayers中的縮放級別
OpenLayers Map可以在不同的比例尺或解析度下顯示他的每一個(gè)layer map對象含有縮放級別的引用,即ZoomLevels,而且允許他的每一個(gè)layer去自定義他們自己的縮放級別,使之看起來合適 可以通過在構(gòu)造函數(shù)中設(shè)置options屬性來配置openlayers layer的縮放級別
== 正常圖層== 對于基于openlayers.layer的正常layer,和能夠在任何解析度下顯示的layer,存在多種不同的方式去配置縮放級別和他們各自的比例尺和解析度
“解析度數(shù)組”: 要是轉(zhuǎn)化縮放級別成為解析度,需要一個(gè){{{resolutions}}}數(shù)組,他是這個(gè)圖層所支持的不同解析度的列表,縮放級別就僅僅是一個(gè)解析度數(shù)組的索引,解析度數(shù)組始于0終于縮放級別-1
比如: 一個(gè)圖層的解析度為[a,b,c],那么縮放級別的0就是a ,1就是b。。。
=== 配置解析度數(shù)組的方式 ===
可選項(xiàng): {{{scales}}} - ''Array'' -- 預(yù)先設(shè)置比例尺值的數(shù)組 {{{resolutions}}} - ''Array'' -- 預(yù)先設(shè)置解析度值的數(shù)組 {{{minScale}}} - ''float'' --layer能夠顯示的最小比例尺 {{{maxScale}}} - ''float'' --layer能夠顯示的最大比例尺 {{{maxResolution}}} - ''float'' --layer能夠顯示的最大解析度 {{{minResolution}}} - ''float'' -- layer能夠顯示的最小解析度 {{{minExtent}}} - ''!OpenLayers.Bounds'' --layer能顯示出的最小范圍 {{{maxExtent}}} - ''!OpenLayers.Bounds'' -- layer能顯示出的最大范圍 {{{numZoomLevels}}} - ''int'' -- 縮放級別的總數(shù) {{{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); }}}
顯然所有的配置項(xiàng)不能在一次設(shè)置中全都用上,因?yàn)樗麄兛赡芟嗷_突,他們會(huì)按照下面的優(yōu)先級起作用: [A]【預(yù)設(shè)的縮放級別列表】縮放級別由預(yù)先設(shè)置的比例尺或解析度決定
{{{scales}}} -解析度的數(shù)組由這些比例尺直接轉(zhuǎn)化而來 {{{resolutions}}} - 解析度數(shù)組直接從初始化函數(shù)的option參數(shù)中帶來 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]【最大解析度 &縮放級別的總數(shù)】縮放級別在最大解析度和縮放級別的總數(shù)上被決定 B1 最大解析度的確定 {{{minScale}}} --解析度的值從比例尺由單位{{{units}}}轉(zhuǎn)化來 {{{maxExtent}}} AND {{{maxResolution == "auto"}}} --解析度由地圖的div尺寸和maxExtent屬性計(jì)算而來。若maxExtent屬性未指定,默認(rèn)從map繼承,即全世界 {{{maxResolution}}}--解析度的值直接從layer的options參數(shù)中帶來,若沒指定,則默認(rèn)為從map的options中帶來 B2 縮放級別的總數(shù)確定 B2_a基于最大和最小解析度的比值來計(jì)算--確定最小解析度: {{{maxScale}}} --解析度的值從比例尺由單位{{{units}}}轉(zhuǎn)化來 {{{minExtent}}} AND {{{minResolution == "auto"}}}--解析度的值基于地圖div尺寸和minExtent屬性來計(jì)算。minExtent屬性必須被指定,默認(rèn)不從map繼承 {{{minResolution}}} --解析度的值從layer指定的option參數(shù)中直接帶來,若沒指定,最小解析度保持為空,縮放級別數(shù)直接接受 B2_b {{{numZoomLevels}}}縮放級別數(shù)直接從layer指定的option參數(shù)帶來,若沒有指定默認(rèn)從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的尺寸和地圖最大范圍計(jì)算 ||numZoomLevels||Calculated using ratio of maxResolution/minResolution||用最大最小分辨率的比值計(jì)算 {{{ 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./wiki/SettingZoomLevels ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ TileCache配置 ============= 有一些參數(shù)是控制tilecache并且應(yīng)用于所有的圖層 bbox-圖層的外圍框范圍,解析度數(shù)組默認(rèn)的解析度等于外圍框范圍除以512(2000個(gè)瓦塊) debug--是否發(fā)送調(diào)式信息到error.log,默認(rèn)是yes,可以設(shè)置為no description--圖層描述,用在一些返回元數(shù)據(jù)的響應(yīng)中,默認(rèn)為空 extension--圖層的文件擴(kuò)展(名?),用來從WMS服務(wù)器中請求圖片,也用在產(chǎn)生緩存(圖片)文件時(shí) layers--用來描述圖層的字符串,主要是被直接傳給渲染器。WMSLayer發(fā)送http請求,MapServerLayer根據(jù)這個(gè)字符串選擇響應(yīng)的圖層來呈現(xiàn)。若沒有提供layer,layer name 被用來填充這個(gè)屬性 levels--一個(gè)整數(shù),描述縮放級別的數(shù)字或支持的比例尺。若忽略則被解析度覆蓋。 mapfile--mapfile的絕對路徑,是MapServer 和Mapnik layers所需要的 maxResolution--解析度的最大值,若這個(gè)被設(shè)置了,解析度的數(shù)組會(huì)自動(dòng)地被計(jì)算出來,計(jì)算時(shí)依據(jù)levels的值 metaTile--設(shè)置yes會(huì)打開metaTiling,這將會(huì)請求更大的瓦塊,并且用Python Imaging library切開,默認(rèn)為no metaBuffer--需要設(shè)置在呈現(xiàn)出的瓦塊周圍的像素?cái)?shù)。很好的解決不同地圖返回后產(chǎn)生的邊緣問題,默認(rèn)為10 metaSize--一對由逗號隔開的整數(shù),用來決定當(dāng)用metaTiling的時(shí)候應(yīng)當(dāng)呈現(xiàn)多少瓦塊,默認(rèn)為5,5 resolutions--你想讓TileCache支持的一組解析度的列表,由逗號隔開 size--逗號隔開的整數(shù),描述瓦塊的寬/高,默認(rèn)為256,256 srs--空間參考系的字符串,默認(rèn)為 "EPSG:4326" type--圖層的類型,選項(xiàng)有WMSLayer, MapnikLayer, MapServerLayer, ImageLayer url---遠(yuǎn)程 WMS 服務(wù)器的訪問地址,為WMSLayer必須 watermarkImage--水印圖片參數(shù)是在每一個(gè)圖層被指定的,你想作用在每個(gè)地圖瓦塊上的的圖片的路徑。我們建議你用和瓦塊尺寸大小相同的圖片,如果你用了默認(rèn)的瓦塊尺寸,你就應(yīng)該用一張256*256的圖片 注意:Python Imaging Library不支持交織的圖片(??) watermarkOpacity--這個(gè)參數(shù)在每個(gè)圖層上被指定,用來配置水印的不透明度,這是個(gè)0-1的浮點(diǎn)數(shù),是可選的 extent_type--設(shè)置成‘loose’將會(huì)允許TileCache在最大邊界框之外產(chǎn)生圖片。在客戶端不知道何時(shí)停止請求地圖瓦塊時(shí)很有用。 tms_type--設(shè)置成‘google’將會(huì)時(shí)瓦塊轉(zhuǎn)換垂直放上的順序(即,符合google類型的x/y模式)
配合OpenLayers使用TileCache =============================== 使用
tilecache運(yùn)行openlayers的時(shí)候,OpenLayers.Layer.WMS構(gòu)造函數(shù)中的URL必須指向tilecache腳本,比如
tilecache.cgi或tilecache.py.可以參考例子,tilecache中的index.html
【讓tilecache工作的配置方法。。略】 最重要的是保證openlayers的圖層和你的tilecache圖層具有相同的解析度和邊框。 你可以在openlayers中通過resolutions或者maxResolution選項(xiàng)來定義解析度,定義的maxExtent應(yīng)當(dāng)和TileCache圖層所定義的bbox相匹配
如果你用tilecache來覆蓋的話,你應(yīng)當(dāng)設(shè)置圖層的reproject選項(xiàng)為false
讓TileCache播種 ====================== tilecache_seed.py腳本能夠自動(dòng)地產(chǎn)生地圖瓦塊,你需要安裝tilecache按照上面的配置好
用法 ----- tilecache_seed.py [options] <layer> [<zoom start> <zoom stop>]
可選項(xiàng) ------- --version 顯示程序的版本且退出 -h, --help 顯示幫助信息且退出 -f, --force 強(qiáng)制重新生成瓦塊,即使緩存中已經(jīng)存在 -b BBOX, --bbox=BBOX 限制在指定的邊界內(nèi) -p PADDING, --pading=PADDING 在產(chǎn)生瓦片的目標(biāo)區(qū)外邊緣的額外的瓦塊,默認(rèn)為0(一些邊緣瓦塊將會(huì)變沒)。值為1會(huì)保證所有的瓦塊被創(chuàng)建,但是一些瓦塊可能在你定義的邊界之外
參數(shù) ---------
layer tilecache.cfg中配置的layer名字 zoom start 開始的縮放級別 zoom end 結(jié)束的縮放級別
|