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个人博客-记录走过的技术之路

geoserver 的缓存技术的更多相关文章

  1. 网站缓存技术总结( ehcache、memcache、redis对比)

    网站技术高速发展的今天,缓存技术已经成为大型网站的一个关键技术,缓存设计好坏直接关系的一个网站访问的速度,以及购置服务器的数量,甚至影响到用户的体验. 网站缓存按照存放的地点不同,可以分为客户端缓存. ...

  2. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  3. .Net环境下的缓存技术介绍 (转)

    .Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 ...

  4. [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术

    [.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...

  5. 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  6. 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  7. PHP开发中的缓存技术汇总

    在PHP开发中,出于对网站服务器负载的考虑,往往需要对页面.数据等内容进行缓存处理,下面就来看看,在PHP开发中有哪些缓存方式吧. 1.页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存, ...

  8. .Net环境下的缓存技术介绍

    .Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 1.1 ...

  9. ASP.NET 缓存技术分析

    缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大 ...

随机推荐

  1. Data Provider 中没有.net framework Data provider for Mysql 的解决方法

    近来做的一个项目中,数据库用的是 MySql, 而在项目使用 Entity Data Model 来做数据服务层,可是在项目中添加 Data Entty Model 时,一般我们都会选择从数据库中直接 ...

  2. Jenkins 邮件发送设置(jenkins自带邮件设置)

    首先进入系统设置,找到Jenkins Location部分 这里设置 系统管理员邮件地址,然后设置邮件通知部分,这里为了方便我使用了QQ邮箱(作为发送邮件地址) 这里的 用户名 必须与上面的 系统管理 ...

  3. git超详细教程留着当手册

    GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :gi ...

  4. Centos7修改profile错误导致命令行不能用,情况的解救方案,dir命令不能用

    Linux修改profile文件改错了,恢复的方法 Linux修改profile文件改错了,恢复的方法在改profile的时候,改出问题了,除了cd以外的命令基本都不能用了,连vi都不能用了,上网查了 ...

  5. 0_Simple__simpleVoteIntrinsics + 0_Simple__simpleVoteIntrinsics_nvrtc

    介绍了线程束表决函数的实例(其概念介绍见 http://www.cnblogs.com/cuancuancuanhao/p/7841512.html),并在静态和运行时编译两种条件下进行使用. ▶ 源 ...

  6. leetcode401

    public class Solution { /// <summary> /// 将二进制字符串转为十进制数字 /// </summary> /// <param na ...

  7. vi和vim的三种模式

    1.一般模式 用vi 或vim 命令 ——>一般模式 2. 插入模式 i,o,a,r 及其各自大写 ——>插入模式 一般用 i 3.命令行模式 用命令来完成 读取,存盘,替换,离开vim ...

  8. python之类的相关知识

    面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之 ...

  9. JAVA中request.getParameterMap()用法笔记

    一. 根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系.这个返回值有个特别 ...

  10. golang获取IP地址

    ip:=this.Ctx.Request.RemoteAddr ip=ip[0:strings.LastIndex(ip, ":")]