geoserver 的緩存技術


geoserver提到的緩存工具共有兩個:tilecache和geowebcache。geowebcache是java寫的,整合進geoserer中。

tilecache則是python寫的一個小程序。

tilecache是由MetaCarta Labs開發的用來緩存地圖,配合openlayers使地圖顯示更快。可以把tilecache想成一個中間件,WMS服務器不用自己緩存地圖,tilecache可以幫他完成。tilecache支持多種服務器和多種OGC服務標准,以及支持多種請求方式和格式。

tilecache的配置可以看ESRI論壇的教程,因為我是用ubuntu和apache的,可能配置上有些不同,但使用大致還是相同的。tilecache中有一個tilecache.cfg文件,這是個配置文件,當有用戶請求時,tilecache會載入這個文件。下面是我的配置文件,

?
1
2
3
[cache]
type = GoogleDisk #默認是Disk,googledisk是以z / x / y.extension的方式存儲
base = / tmp / tilecache #緩存的路徑
?
1
2
3
4
5
6
7
8
[google] #圖層的名稱
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設定最大的比例尺,系統會根據level自動聲稱resolutions, 但如果同時設置,resolutions會覆蓋level。bbox和resolutions要根據不同的投影來計算,之前我就是犯了這個錯誤,用 900913,但bbox設成了-180,-90,180,90,地圖怎么也顯示不出來。

接下來就用openlayers來顯示,創建一個map,在option中resolutions和bbox都要和配置文件中的相同,單位要是米。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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 衛星圖”,
{
type : G_SATELLITE_MAP,
sphericalMercator: true
}
);
map .addLayer(googleMap);
 
添加一個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);

如果以能成功顯示的話,那么恭喜你,你已經可以成功疊加了google map和tilecache生成的WMS,你也可以去緩存查看已緩存的圖片。現在可以用openlayers的另一個類直接訪問緩存,可用firebug來看下圖片的請求地址,是以http://localhost/tilecache/tilecache.py/1.0.0/google/z/x/y.extension的形式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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);

但這不是我的最終目的,我是想先緩存完圖片然后再訪問,而不是邊訪問邊緩存。tilecache也想到了這點,他有一個小工具tilecache_seed.py,可以幫你完成這個工作。

?
1
python tilecache_seed.py “http: / / localhost / tilecache / tilecache.py” google 5 10 - 14206537.827649845 , 2721171.5119208517 , - 7133550.0444934964 , 6549529.8947561011

上面代碼是說將配置文件中圖層名為google,在-14206537.827649845,2721171.5119208517,-7133550.0444934964,6549529.8947561011這個范圍中的縮放等級為5到10的緩存起來,最后直接用OpenLayers.Layer.TMS訪問就可以了。

 

 

歡迎大家來我的新家看一看 3wwang個人博客-記錄走過的技術之路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM