8.5. 配置瓦片层¶
在网络界面中,您可以访问“瓦片层”部分。 本节列出了在GeoServer上发布并配置用于缓存的所有图层, 您可以查看每个图层的状态和主要参数。
前两列显示“类型”和“层名称”, 第三个是针对每个层的“磁盘配额”。 在GeoServer 2.2中,未检查每层磁盘配额,因此无法按照GeoWebCache独立版本进行配置, 因此您只能在此处看到 N/A 值。 下一列包含该图层的图块在磁盘上占用的大小。
下一列将显示为缓存配置的层是否已启用在缓存中存储瓦片。 如果要在不丢失配置的情况下临时禁用层的缓存, 则在不将其从缓存层中移除的情况下禁用层上的缓存非常有用。
如果在特定层上启用了缓存,则会看到一个下拉列表,其中包含与该层关联的网格集, 通过单击该列表,可以打开带有预览应用程序的新网页。 它与层预览列表引发的页面非常相似,但它确保请求符合缓存架构, 即从缓存中检索请求的网格集和地图。
最终你会发现 Seed 或 Truncate 缓存的一个或多个级别。
这个 Empth 链接将删除该特定层的所有瓦片, 包括所有网格集和样式。
8.5.1. 操作时间-配置用于缓存的层和层组¶
默认情况下,您在GeoServer上发布的每个层都会添加到 GeoWebCache 的配置中。 如果您的层包含经常更新的数据,缓存可能是一个坏主意。 你会浪费空间来存放即将过时的瓷砖。让我们看看如何在特定层上配置缓存。
1.在网络界面中,打开 Tile layers 部分。
2.滚动列表以查找 NaturalEarth:10m_roads_north_america 图层并单击图层名称。
3.将打开图层配置页面,重点放在 Tile Caching 选项卡上。
4.第一部分包含用于在缓存的层之间插入层并启用缓存的标志。 如果您取消选中第一个单选按钮,则所有其他设置都将不可用, 并且缓存配置丢失。 默认情况下,除非您修改了 Caching Defaults 部分, 添加到GeoServer配置的所有层也都配置为缓存层。
5.元瓦片,边界尺寸,和图像格式可让您覆盖 Caching Defaults 部分中为这些参数设置的值。例如,您可能希望在标签确实很关键的图层上增加倾斜大小和装订线大小。 逐层执行可避免对整体性能造成压力。
6.下一节允许您选择 GeoWebCache 是否将为与该层关联的每个样式创建单独的缓存。 还可以为时间和提升设置单独的缓存。只有在配置了时间和高程支持时,这些选项才有意义。
时间和高程配置不在本书范围内。您可以在 尺寸 层网页的选项卡。 请注意,您的数据(栅格或矢量)应具有包含有意义的时间或高程值的属性。
7.您可以设置将用于缓存图层的网格集。 默认情况下,在 Caching Defaults 部分中定义的两个网格集均处于启用状态。 您可以添加其他用户或删除默认设置。 您还可以为要发布和/或缓存的每个网格集设置缩放级别:
您查看了所有可用于微调缓存配置的选项。虽然缓存默认值对于拥有一组工作属性很好, 但每次添加新层时,都应将其配置为最大化性能和优化磁盘空间。
8.5.2. 行动的时间-使用带OpenLayers的tiles¶
既然您知道如何管理缓存配置,我们将探讨如何使用它。 在本节中,您将使用OpenLayers客户机来使用缓存层。 在上一章中,您已经了解了OpenLayers库,但是如果您还不是专家, 不用担心,我们将指导您完全理解以下示例的基本代码:
1.我们将创建一个新的HTML文件。它应该与ApacheTomcat一起发布, 因此您可以在 webapps/ROOT Tomcat安装中的文件夹。
2.插入以下代码。在创建HTML文件时,代码包含一些必需的元素。 我们还想为我们的页面添加一个标题:
<html>
<head>
<title>Creating a simple map</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3.现在添加以下CSS代码以将样式添加到 html 将承载地图画布的元素:
<style type="text/css">
#myMap {
clear: both;
position: relative;
width: 750px;
height: 450px;
border: 1px solid black;
}
</style>
4.现在我们必须包含对OpenLayers库的引用。我们引用了在线版本。 请注意,只有在开发环境中连接到Internet时,此操作才有效; 否则,您可能希望下载库并将其部署到Tomcat上:
<script type="text/javascript" src="http://openlayers.org/ api/2.12/OpenLayers.js"></script>
5.现在添加代码以创建 map 反对。我们首先创建一个 映射选项 集合来设置一些映射属性, 即投影、范围和单位。 注意传递给的第一个参数 Map 最后一行中的构造函数; 它是对 dom 放置地图的元素:
<script type="text/javascript">
function init() {
var mapOptions = {
projection: "EPSG:4326",
maxExtent: new OpenLayers.Bounds(-180.0,-
90.0,180.0,90.0),
units: "degrees"
};
map = new OpenLayers.Map('myMap', mapOptions );
6.现在必须添加一个图层对象。我们通过指向 ne_50m_populated_places . 我们将一些属性传递给构造函数,例如,使用与默认样式不同的样式:
demolayer = new OpenLayers.Layer.WMS(
'NaturalEarth:ne_50m_populated_places', '../geoserver/
NaturalEarth/wms',
{{layers: 'NaturalEarth:ne_50m_populated_places',
style:'PopulatedPlacesStroke',
format: 'image/png' }},
{{singleTile:'True'}
);
7.然后,我们将图层添加到地图,并添加代码以设置缩放级别并将地图居中于特定点:
map.addLayer(demolayer);map.zoomTo(4);
map.panTo(new OpenLayers.LonLat(12.0,42.0));
}}
</script>
</head>
8.页面的JavaScript代码已完成。 现在给 init
当浏览器加载页面和 div
地图元素:
<body onload="init()">
<div id="myMap"></div>
</body>
</html>
9.将文件另存为 wmsPlain.html . 现在打开浏览器并输入 http://localhost:8080/wmsPlain.html 作为URL。
10.现在,将地图放大并平移一点, 然后转到 Tile layers 网页,查看您的请求生成的地图是否存储为地图:
11.您的请求似乎没有存储在缓存中。你能查出哪里出了问题吗? 在继续探索之前先考虑一下。
12.返回到保存 wmsPlain.html 文件,制作副本, 并将副本重命名为 wmsExplicitCached.html .
13.使用编辑器打开新文件,转到第3行,并将其替换为以下内容:
<title>Creating a simple map for cached layers</title>
14.对于一个 GetMap 请求命中缓存时,必须将其约束到网格集属性。 我们正在使用 EPSG:4326 投影,所以我们需要使用 EPSG:4326 网格集。 转到第18行,在它之后添加一个新项到 mapOptions . 它包含网格集的所有分辨率:
resolutions: [
0.703125, 0.3515625, 0.17578125,
0.087890625, 0.0439453125, 0.02197265625,
0.010986328125, 0.0054931640625, 0.00274658203125,
0.001373291015625, 0.0006866455078125,
0.0003433227539062,
0.0001716613769531, 0.0000858306884766,
0.0000429153442383,
0.0000214576721191, 0.0000107288360596,
0.0000053644180298,
0.0000026822090149、0.00001341145074、0.0000006705522537,
0.0000003352761269
],
您不需要将所有缩放级别都添加到地图中;您可以选择其中的一个子集。 这样可以限制用户仅在特定缩放范围内浏览数据。
15.我们的请求需要定向到 GeoWebCache 端点。转到第33行,修改图层创建者,如下代码片段所示:
demolayer = new OpenLayers.Layer.WMS(
'NaturalEarth:ne_50m_populated_places',
'../geoserver/gwc/service/wms',
16.我们还需要匹配瓦片大小。 在第30行,替换 singleTile:‘True’ 代码行,内容如下:
{tileSize:new OpenLayers.Size(256,256)}
17.保存文件。 现在打开浏览器,并输入 http://localhost:8080/wmsExplicitCached.html 作为URL。与以前一样,通过在世界各地平移和缩放来导航地图, 然后返回 Tile layers 网页,查看您的图块是否存储在缓存中。
18.我们需要更进一步。您还记得我们谈论过直接集成吗? 返回 Caching defaults 部分并检查该标志。 然后点击保存按钮。
19.返回到保存 wmsExplicitCached.html 文件,制作副本, 并将副本重命名为 wmsDirectIntegrationCached.html .
20.使用编辑器打开新文件,转到第3行,并将其替换为以下内容:
<title>Creating a simple map for cached layers with direct integration</title>
21.我们的请求需要定向到GeoServer WMS端点。 转到第33行,修改图层创建者,如下代码片段所示:
demolayer = new OpenLayers.Layer.WMS(
'NaturalEarth:ne_50m_populated_places',
' ../geoserver/NaturalEarth/wms',
22.在第37行,在样式设置之后,添加一个代码来指定必须瓦片的映射请求:
styles: 'PopulatedPlacesStroke',
tiled: 'true',
23.保存并关闭文件。
24.转到“瓦片图层”页面,然后单击“空白”链接 NaturalEarth:ne_50m_populated_places 图层。 当提示有关 删除所有图块,单击“确定”按钮。
25.保存文件。 现在打开浏览器并指向 http://localhost:8080/wmsDirectIntegrationCached.html . 和以前一样,导航地图的平移和缩放, 然后返回到 Tile Layers 网页并查看您的磁贴是否再次存储在缓存中。
刚刚发生了什么?¶
您构建了一个非常简单的web映射应用程序,并将其与 GeoWebCache 集成。 除了简单的接口之外,您还探索了如何正确构建可以访问缓存的映射请求。 您可以使用这些知识在实际应用程序中应用缓存。
试一试-为tiger country层建立一个客户¶
在上一个 操作时间–创建自定义网格集 第节,您创建了自定义网格集。 是你命名的 EPSG:4269 并添加到 tl_2011_us_county 层的配置。 现在是时候使用它了。基于前面的JavaScript代码 行动的时间-使用带OpenLayers的tiles 第节, 使用层的缓存构建一个简单的应用程序。如果你需要一些提示, 你可以看看 wmsExplicitCached4269.html 在本章的资源中归档。
8.5.3. 行动时间-生成一层¶
到目前为止,我们已经使用 GeoWebCache 来存储用户请求生成的瓦片。 当然,以下参数相等的请求将进入缓存,GeoServer不会为他们渲染新地图
但也可以预先计算层的瓦片,以避免某些用户在请求缩放级别和尚未缓存的区域时遇到延迟。
预计算瓦片的过程称为 seeding . 本节将指导您了解它是如何工作的。
1.转到 Title layers 页面并查找 tl_2011_us_county 图层。 单击它的 Seed/Truncate 链接:
2.将打开一个新页面。GeoWebCache种子设定未集成在GeoServer web界面中。 您看到的是GeoWebCache界面:
3.滚动到“创建新任务”部分。 您必须设置生成参数。 第一个是并行进程的数量,即请求映射到GeoServer的线程。 由于我们只有一个GeoServer实例, 运行太多的进程没有任何好处。 从下拉列表中选择 04 :
4.然后选择操作类型。您可以选择 Seed ,它将只生成丢失的瓦片,或重新设定 重新生成所有瓦片。如果您更改了图层的样式,并且不希望用户看到混合贴图,则会出现这种情况。 请注意 Truncate 操作与 Empty 集成在GeoServer接口中的操作。 在这里,您可以选择一组缩放级别进行截断,而 Empty 操作将始终删除所有瓦片。 选择 Seed – generate missing tiles :
5.您必须为生成选择网格集和图像格式。 如果您要针对一种以上的网格集和/或图像格式预先计算缓存, 您可以在开始此操作后立即开始其他操作。 选择“网格集”作为EPSG:4269,将“格式”选择为image / png:
6.您只能在指定网格集的子集上启动播种操作。 您可以选择一个级别范围和一个区域。 如果您不想将播种限制在特定区域, 将“边界框”文本框留空, 并且该操作将使用网格集范围。 选择 00 作为 缩放开始 :和 10 作为 缩放停止: 。 现在,通过单击“提交”按钮开始生成操作:
7.任务开始后,Web界面会向您显示当前正在运行的任务的列表。 如果要同时播种更多层,您可以按层过滤任务,也可以杀死一个或所有正在运行的任务。 点击“刷新列表”链接将使用“完成的瓦片数”更新列表, 已用时间 和 剩余时间 列。瓦片的数量在更详细的缩放级别下迅速增长。 生成不仅需要大量磁盘空间,还需要大量时间, 取决于系统的容量。
8.任务结束时,您应该会看到一个空列表。 返回到 Title layers 页面,现在将为您的图层切片分配大量磁盘空间:
刚刚发生了什么?¶
生成你的图层会对性能产生巨大的影响。来自客户机的每个映射请求, 在您预先计算的级别范围内,都将立即命中缓存。您可以期望性能从10倍提高到90倍。
弹出测试-配置集成的GeoWebCache¶
问题1。一个图层可以有多个网格集吗?
1.不,必须为每个层选择一个缓存架构。
2.是的,您可以添加任何需要的网格集并同时使用它们。
3.是的,但是您可以在缓存中为一个网格集存储磁贴。
问题2。你能缓存一个有多种样式的图层吗?
1.是的,可以存储使用多种不同样式渲染的瓦片。
2.不,必须将相同的数据配置为新图层才能使用不同的样式。
3.是的,但是不能在同一个地图请求中同时使用具有不同样式的同一图层。
问题3。您的客户机可以同时使用缓存层和普通层吗?
1.不,您必须在地图中设置缓存属性,并且所有图层都受这些设置的约束。
2.是的,但是对于每个层,您必须决定是否要缓存它。
3.是的,您还可以在客户端地图上以简单的缓存方式添加相同的图层。
8.5.4. 使用外部GeoWebCache¶
集成的 GeoWebCache 是一种使用强大缓存工具的便捷方式,同时避免了外部安装和配置的复杂性。 那么使用 GeoWebCache 的外部实例有什么意义呢?
在生产环境中,您通常需要处理多个GeoServer实例,它们像集群一样并行运行。 实际上,我们将在第十一章,在生产环境中调整GeoServer . 当多个GeoServer发布相同的数据时, 无法有效地使用集成的GeoWebCache。 无法将所有地理服务器连接到单个地理网络缓存。 无论如何,这是没有意义的,因为你将在你的架构中引入一个单一的失败点。
因此,您有两种方法:在每个GeoServer节点上使用集成的 GeoWebCache 、 复制tiles并浪费大量空间,或者安装外部 GeoWebCache 并将其链接到每个GeoServer节点。
安装和配置外部GeoWebCache不在本书的范围之内。 您必须关闭集成的GeoWebCache。 您可以从“缓存默认值”页面执行此操作, 禁用所有服务并关闭为每个新层自动创建缓存配置的功能。
如果以前使用过集成的 GeoWebCache ,则可能还需要禁用每个层并删除瓦片。
独立的 GeoWebCache 是一个Java web应用程序,您可以在Tomcat实例上部署它,
就像我们在第二章, 安装Geoserver.安装后,必须通过编辑 geowebcache.xml
文件。