tilecache緩存地圖
Published: 十 31st, 2008
今天算是這幾天來(lái)最開(kāi)心的一天,因?yàn)槔_著我的問(wèn)題終于解決了,當(dāng)然只是一小部分。
我最終的目的就是將shapefile格式直接緩存在硬盤(pán),然后用戶訪問(wèn)時(shí)服務(wù)器直接獲取圖片就行了。由于我最后的論文是要用到geoserver的,然后就懶得看AGS,不用浪費(fèi)那么多時(shí)間。geoserver提到的緩存工具共有兩個(gè):tilecache和geowebcache。geowebcache是java寫(xiě)的,整合進(jìn)geoserer中。tilecache則是python寫(xiě)的一個(gè)小程序,最近又很喜歡python,所以就拿這個(gè)練練手。
tilecache是由MetaCarta Labs開(kāi)發(fā)的用來(lái)緩存地圖,配合openlayers使地圖顯示更快??梢园裻ilecache想成一個(gè)中間件,WMS服務(wù)器不用自己緩存地圖,tilecache可以幫他完成。tilecache支持多種服務(wù)器和多種OGC服務(wù)標(biāo)準(zhǔn),以及支持多種請(qǐng)求方式和格式。
tilecache的配置可以看ESRI論壇的教程,因?yàn)槲沂怯胾buntu和apache的,可能配置上有些不同,但使用大致還是相同的。tilecache中有一個(gè)tilecache.cfg文件,這是個(gè)配置文件,當(dāng)有用戶請(qǐng)求時(shí),tilecache會(huì)載入這個(gè)文件。下面是我的配置文件,
[cache]
type=GoogleDisk #默認(rèn)是Disk,googledisk是以z/x/y.extension的方式存儲(chǔ)
base=/tmp/tilecache #緩存的路徑
[google] #圖層的名稱(chēng)
type=WMSLayer #
url=http://192.168.1.106:8080/geoserver/wms #wms的url
layers=topp:states #wms所擁有的圖層
extension=png
resolutions=156543.033900000,78271.516950000,39135.758475000,19567.879237500,9783.939618750,4891.969809375,2445.984904688,1222.992452344,611.496226172,305.748113086,152.874056543,76.437028271,38.218514136,19.109257068,9.554628534,4.777314267,2.388657133,1.194328567,0.59716428337097171575,0.298582142
#劃分比例尺,不明白的可以看看這篇
srs=EPSG:900913 #google map的投影
bbox=-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892 #顯示的范圍
如果不使用resolutions,也可以用maxResolution設(shè)定最大的比例尺,系統(tǒng)會(huì)根據(jù)level自動(dòng)聲稱(chēng)resolutions,
但如果同時(shí)設(shè)置,resolutions會(huì)覆蓋level。bbox和resolutions要根據(jù)不同的投影來(lái)計(jì)算,之前我就是犯了這個(gè)錯(cuò)誤,用
900913,但bbox設(shè)成了-180,-90,180,90,地圖怎么也顯示不出來(lái)。
接下來(lái)就用openlayers來(lái)顯示,創(chuàng)建一個(gè)map,在option中resolutions和bbox都要和配置文件中的相同,單位要是米。
var options = {
resolutions:[156543.033900000,78271.516950000,39135.758475000,19567.879237500,9783.939618750,4891.969809375,2445.984904688,1222.992452344,611.496226172,305.748113086,152.874056543,76.437028271,38.218514136,19.109257068,9.554628534,4.777314267,2.388657133,1.194328567,0.59716428337097171575,0.298582142],
projection: new OpenLayers.Projection(”EPSG:900913″),
units: “m”,
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,20037508.34,20037508.34),
};
map = new OpenLayers.Map(’map’,options);
添加google地圖
var googleMap = new OpenLayers.Layer.Google(
“Google 衛(wèi)星圖”,
{
type: G_SATELLITE_MAP,
sphericalMercator: true
}
);
map.addLayer(googleMap);
添加一個(gè)tilecache的WMS
wms= new OpenLayers.Layer.WMS(
“wms”,
“http://localhost/tilecache/tilecache.py”,
{
layers: ‘google’,
srs: ‘EPSG:900913′,
format: ‘image/png’,
transparent: true
},
{
maxExtent: new OpenLayers.Bounds(-14206537.827649845,2721171.5119208517,-7133550.0444934964,6549529.8947561011),
reproject: true,
opacity: 0.4,
isBaseLayer: false
}
);
map.addLayer(wms);
如果以能成功顯示的話,那么恭喜你,你已經(jīng)可以成功疊加了google map和tilecache生成的WMS,你也可以去緩存查看已緩存的圖片。現(xiàn)在可以用openlayers的另一個(gè)類(lèi)直接訪問(wèn)緩存,可用firebug來(lái)看下圖片的請(qǐng)求地址,是以http://localhost/tilecache/tilecache.py/1.0.0/google/z/x/y.extension的形式。
tms = new OpenLayers.Layer.TMS(
“google”,
“http://localhost/tilecache/tilecache.py/”,
{
serviceVersion: “1.0.0″,
layername: “google”,
type: “png”,
opacity: 0.4,
maxExtent: new OpenLayers.Bounds(-14206537.827649845,2721171.5119208517,-7133550.0444934964,6549529.8947561011),
isBaseLayer: false
}
);
map.addLayer(tms);
但這不是我的最終目的,我是想先緩存完圖片然后再訪問(wèn),而不是邊訪問(wèn)邊緩存。tilecache也想到了這點(diǎn),他有一個(gè)小工具tilecache_seed.py,可以幫你完成這個(gè)工作。
python tilecache_seed.py “http://localhost/tilecache/tilecache.py” google 5 10 -14206537.827649845,2721171.5119208517,-7133550.0444934964,6549529.8947561011
上面代碼是說(shuō)將配置文件中圖層名為google,在-14206537.827649845,2721171.5119208517,-7133550.0444934964,6549529.8947561011這個(gè)范圍中的縮放等級(jí)為5到10的緩存起來(lái),最后直接用OpenLayers.Layer.TMS訪問(wèn)就可以了。
|