8.1. 探索GeoWebCache¶
地图缓存软件家族的一个重要成员是 GeoWebCache ( http://geowebcache.org/ ), 一个Java开源项目。与任何缓存系统一样,它充当客户端和映射服务器之间的代理。 如果使用独立版本,地图服务器可以是任何符合WMS标准的服务器。 实际上, GeoWebCache 使用WMS语法从地图服务器检索分幅。 它以多种方式发布瓦片;对于GeoServer 集成版,您可以使用以下内容:
WMS (Web Mapping Service)
WMS-C (WMS Tiling Client Recommendation)
WMTS (Web Map Tiling Service)
TMS (Tile Map Service)
您可以使用 GeoWebCache 的外部实例,禁用其中包含的实例,但使用内部实例有许多优点。 您可以使用单个接口管理 GeoServer 和 GeoWebCache ,而不必使用自定义URL或特殊端点; 您在GeoServer 上发布的所有图层都将自动配置为缓存。只需在图层和图层组上设置缓存属性。
8.1.1. 操作时间–配置GeoWebCache存储¶
运行GeoServer 附带的 GeoWebCache 非常简单。 所有层都已配置为缓存;我们只需要修改配置的一些细节。
1.缓存将产生大量文件,存储需要在磁盘上有相当大的空间。 默认情况下,所有文件都存储在安装GeoServer 的同一个文件系统中。 一个常见的问题是,Linux文件系统上的可用空间或可用索引节点可能会用完。 结果是一样的:您将无法在文件系统上存储更多内容, 而且您还可能会使系统崩溃。我们将为缓存文件使用自定义位置。
2.找到你的位置 webapps Apache Tomcat安装文件夹中的文件夹:
~$ cd /opt/apache-tomcat-7.0.27/webapps/
3.去 geoserver/WEB-INF
文件夹:
/opt/apache-tomcat-7.0.27/webapps$ cd geoserver/WEB-INF/
4.打开 web.xml 文件并定位包含以下代码的行:
<display-name>GeoServer </display-name>
5.之后,定义了几个参数。我们将插入一个新参数来设置 GeoWebCache 文件夹位置。 您可以在前一行之后输入以下代码。 这个 param-value 使用在Linux文件系统上有效的文件夹位置对语法进行赋值。 在Windows文件系统上,使用正确的语法。
<!-- Setting GeoWebCache folder -->
<context-param>
<param-name>GEOWEBCACHE_CACHE_DIR</param-name>
<param-value>/opt/gwc</param-value>
</context-param>
6.保存并关闭文件。
7.现在转到Tomcat管理器应用程序重新加载GeoServer 。 从web管理界面更改的参数不需要重新加载才能生效。 GeoServer 读取 web.xml 启动时的文件, 因此对文件的任何更改只有在应用程序重新加载后才有效。
8.打开浏览器并输入URL, http://localhost:8080/manager/html/list .
9.定位 GeoServer ** 在应用程序列表中,单击 **Reload 按钮:

图 8.1 image173¶
10.一段时间后,根据配置的复杂性,将显示一条成功消息:

图 8.2 image174¶
11.现在,转到GeoServer 的Web管理界面上的 Tile Layers 部分,
并浏览列表以查找 Natural Earth:ne_50_m_populated_places
层:

图 8.3 image175¶
12.从下拉列表中,选择SRS和图像格式的组合(例如, EPSG:4326/jpeg ); 新的地图预览将显示在浏览器窗口中。
此预览与您可以从“图层预览”页面访问的预览不同。 虽然两者都在 OpenLayers 库中使用JavaScript代码, 后者经过优化以使用集成的GeoWebCache。
13.通过平移和缩放来导航地图。每个操作都将从 GeoWebCache 请求tiles。 第一次使用时,必须将它们请求到GeoServer 并存储起来以供将来重用。
14.现在关闭地图,然后再次单击管理界面中的 Tile Layers 链接。 转到显示图层信息的行,您会看到现在有一个数字显示瓦片使用的磁盘存储:

图 8.4 image176¶
15.打开系统控制台,转到步骤5中为 GeoWebCache 配置的文件夹。 您应该看到它包含一个用于图层瓦片的文件夹:
/opt/gwc$ ls -al
total 32
drwxr-xr-x 5 root root 4096 Sep 30 18:12 ./
drwxr-xr-x 4 root root 4096 Sep 25 21:37 ../
drwxr-xr-x 2 root root 4096 Sep 30 17:48 diskquota_page_store/
-rw-r--r-- 1 root root 406 Sep 27 00:33 geowebcache-diskquota.xml
-rw-r--r-- 1 root root 4879 Sep 25 21:55 geowebcache.xml
drwxr-xr-x 2 root root 4096 Sep 30 17:48 meta_jdbc_h2/
drwxr-xr-x 8 root root 4096 Sep 30 18:18 NaturalEarth_ne_50m_
populated_places/
16.打开文件夹并检查文件夹内容是否实际使用GeoServer 显示的大小:
/opt/gwc/NaturalEarth_ne_50m_populated_places$ du -sh
1.4M .
刚刚发生了什么?¶
您为瓦片配置了存储位置。默认情况下, GeoWebCache 将它们存储在 temp
文件夹位于Tomcat安装位置内。
对于生产站点,最好在其他设备上使用文件夹。
另外,尽量避免将瓦片存储在存储数据的同一磁盘上。
8.1.2. 操作时间-配置磁盘配额¶
无论您是希望对层进行种子设定,还是只设置缓存并等待客户机的请求来填充它,磁贴都可以增长到大量的文件和大小。 为包含它们而配置的文件夹可能已满,并且您可能在资源不足时运行文件系统。 默认情况下,集成的 GeoWebCache 对缓存的磁贴具有无限的磁盘使用量。 最好将其配置为已知值并设置瓷砖回收策略。
1.从GeoServer 管理界面转到 Tile caching 部分下的 Disk Quota :

图 8.5 image177¶
2.如您所见,缓存大小有一个上限,即 500.0 MB , 但未选中 Enable disk quota 标志;您可能想知道当缓存大小达到极限时会发生什么。 将限制设置为5 MB,然后单击Submit按钮。
3.现在转到 Tile layers 表单,并打开 myLayerGroup 的缓存预览, 在第6章,样式化图层中创建的。 浏览地图, 平移和缩放一点直到您看到该图层的缓存大小超过5 MB (您必须手动刷新界面以显示新的尺寸值)。

图 8.6 image178¶
4.现在将显示 Disk Quota 表格。回到它,您会看到所有瓦片都在那里, 总大小超出上限,最大尺寸值只是警告。

图 8.7 image179¶
5.现在,检查 Enable disk quota 标志,然后单击 Submit 按钮。 返回到 Disk Quota 表格; 您所有的瓦片都消失了。 这是因为5兆字节是一个非常低的限制,并且标记了成组删除的图块。

图 8.8 image180¶
6.现在将参数设置为更真实的值。第一个参数是存储分片的文件系统使用的块大小。 提供的默认值很常见,但如果您不确定,可以检查它。 例如,在Linux上可以使用 dumpe2fs 效用:
/opt/gwc$ sudo dumpe2fs -h /dev/mapper/ubuntu1204x64vm-root |
grep 'Block size'
dumpe2fs 1.42 (29-Nov-2011)
Block size: 4096
7.然后,您可能需要设置 GeoWebCache 对缓存大小执行检查的时间间隔。 虽然10秒是一个很好的折衷方案,但是您可能希望插入一个更高的值,因为非常低的值会降低性能。
8.现在必须设置缓存大小的上限。这取决于需要缓存多少层,当然,还取决于可用空间的大小。 如果将非专用文件系统用于瓦片,请考虑可能有其他进程在文件系统上创建临时对象, 并选择一个保守值,使至少20%的文件系统始终空闲。另一方面,如果您的缓存有一个专用的文件系统,您可以插入一个接近总大小99%的值。避免将它设置为等于文件系统大小的值, 因为完全填充它可能会产生奇怪的错误和损坏。我们假设您可以使用5gb的缓存大小。
9.最后,当达到上限时,您必须选择去除瓦片的标准。 默认选项选择 Least frequently used ,只要您的站点包含一组静态图层,通常这是一个不错的选择。 如果您经常添加新图层,则较旧的图层可能会减少使用, 因此,请选择 Least recently used 选项。
10.现在所有参数都被赋值了,您可以单击 提交 按钮:

图 8.9 image182¶
刚刚发生了什么?¶
您已完成GeoWebCache的存储配置。现在您可以查看常规设置和图层参数了。
8.1.3. 设置缓存默认值¶
如前所述,包含的 GeoWebCache 带有默认配置。 通过web界面,您可以管理几乎所有的参数; 这是GeoServer 2.2版本开始的一个全新特性。 在早期版本中,您必须转到 GeoWebCache Web 界面或打开配置文件。
Caching Defaults 表单包含常规参数。 第一部分是关于用于公开图块的服务。

图 8.10 image183¶
直接集成¶
默认情况下,第一个选项被禁用。 直接集成是关于WMS中使用的端点 GetMap 请求。 如果使用默认选项,则必须使用自定义端点告诉GeoServer 您要从缓存中检索地图(如果有可用的瓦片来满足您的请求)。
http://localhost:8080/geoserver/gwc/service/wms?
启用直接集成允许您对非缓存层使用相同的语法:
http://localhost:8080/geoserver//wms?tiled=true
除了端点之外,还有一组请求必须满足的条件才能使用缓存中的瓦片。 在后面的小节中,我们将探讨使用基于 OpenLayers 的应用程序查询层的这两种方法。
WMS -C¶
列出的第二个选项用于WMS-C服务。 WMS-C 是 Web Mapping Services Cached 的缩写。 这是查询图块的默认方法,并且在端点上可用。 http://localhost:8080/geoserver/gwc/service/wms
如果在执行对端点的请求时禁用该选项, 您将收到来自GeoServer 的“服务已禁用”消息和400(错误请求) HTTP 响应代码。
TMS和 WMTS¶
这两个选项可启用特定于 TMS ( Tiled Map Services )的端点 和 WMTS ** ( **Web Map Tiled Services )。 两者都是OGC 检索瓦片地图的标准; 主要区别在于WMTS 中通过位置请求( GetFeatureInfo )合并了查询。 端点如下:
默认图层选项¶
下一节是关于图层的参数。
默认情况下,每次在GeoServer 上添加图层时,都会将其配置为缓存。 在有人开始请求缓存层的地图之前,配置缓存层不会占用缓存存储空间。 如果要在站点上添加大量频繁更新的层,则可以考虑删除此选项。 请注意,禁用此标志时,应手动启用层的缓存。
就像你做的那样第六章,设计您的图层样式 ,可以为图层配置多个样式; 默认情况下,将启用所有样式的缓存。如果添加了许多样式, 但只有一个样式很重要,则可能需要避免在缓存存储中浪费空间, 只存储使用默认样式渲染的瓦片。

图 8.11 image184¶
默认的元瓦片大小设置GeoServer 在收到尚未存储在缓存中的瓦片请求时生成的地图的维度。 默认情况下,生成的地图由16个瓦片组成。当请求命中未存储的瓦片时, GeoWebCache将发送 GetMap 要求地图的尺寸等于瓦片高度大小的4倍和宽度大小的4倍。 生成地图后,地图将被切片,每个瓦片都存储在 GeoWebCache 存储库中。 使用元瓦片有助于减少层的生成时间和标签放置。 当你要求 GeoWebCache 为一个层生成时(我们稍后将详细讨论), 所有的瓦片都是创作出来的,所以很多 GetMap 请求被发送到GeoServer 。 与生成许多小地图相比,生成更大的地图并对其进行切片的效率要高得多。
关于标签放置,您必须考虑GeoServer 的标签引擎根据地图的维度放置标签。 因此,对于较大的地图,标签复制和重叠的机会很小。
因此,您可能想知道为什么默认的元图大小不大于4 x 4。 问题是,在生成映射的内存时,消耗量与映射的维度成比例地增长; 具有较大的元分片大小可能会在缓存中产生错误。根据安装时的内存资源, 可能会增加大小,但要小心超磁片大小大于8 x 8。
边沟大小定义地图上用于放置标签和要素的额外边。边缘不会在地图中呈现, 但将其设置为大于零可能有助于减少标签的冲突。
在 Default Tile Image Formats for 部分, 您可以设置要启用的格式。 最好在这里使用默认值 png8 (PNG的8位色深版本)和 gif 在网络映射中使用很少。
默认缓存网格集¶
本节显示将为缓存层自动配置的网格集。 网格集是瓦片的模式;它包含CRS、瓦片维度和缩放级别。
我们将在下一段中看到如何创建自定义网格集。
默认情况下,为所有层配置了两个网格集。 它们是web映射中最常用的:
EPSG:4326 (地理) 最大22 缩放级别 和 256 x 256 像素 像素瓦片
EPSG:900913 (球形墨卡托)最大31**缩放级别** 和 256 x 256 像素瓦片

图 8.12 image185¶