目录

上一个主题

8.2. 配置网格集

下一个主题

8.6. 总结


8.5. 配置瓦片层

在网络界面中,您可以访问“瓦片层”部分。 本节列出了在GeoServer上发布并配置用于缓存的所有图层, 您可以查看每个图层的状态和主要参数。

image194

图 8.20 image194

前两列显示“类型”和“层名称”, 第三个是针对每个层的“磁盘配额”。 在GeoServer 2.2中,未检查每层磁盘配额,因此无法按照GeoWebCache独立版本进行配置, 因此您只能在此处看到 N/A 值。 下一列包含该图层的图块在磁盘上占用的大小。

下一列将显示为缓存配置的层是否已启用在缓存中存储瓦片。 如果要在不丢失配置的情况下临时禁用层的缓存, 则在不将其从缓存层中移除的情况下禁用层上的缓存非常有用。

如果在特定层上启用了缓存,则会看到一个下拉列表,其中包含与该层关联的网格集, 通过单击该列表,可以打开带有预览应用程序的新网页。 它与层预览列表引发的页面非常相似,但它确保请求符合缓存架构, 即从缓存中检索请求的网格集和地图。

最终你会发现 SeedTruncate 缓存的一个或多个级别。

这个 Empth 链接将删除该特定层的所有瓦片, 包括所有网格集和样式。

8.5.1. 操作时间-配置用于缓存的层和层组

默认情况下,您在GeoServer上发布的每个层都会添加到 GeoWebCache 的配置中。 如果您的层包含经常更新的数据,缓存可能是一个坏主意。 你会浪费空间来存放即将过时的瓷砖。让我们看看如何在特定层上配置缓存。

1.在网络界面中,打开 Tile layers 部分。

2.滚动列表以查找 NaturalEarth:10m_roads_north_america 图层并单击图层名称。

3.将打开图层配置页面,重点放在 Tile Caching 选项卡上。

4.第一部分包含用于在缓存的层之间插入层并启用缓存的标志。 如果您取消选中第一个单选按钮,则所有其他设置都将不可用, 并且缓存配置丢失。 默认情况下,除非您修改了 Caching Defaults 部分, 添加到GeoServer配置的所有层也都配置为缓存层。

image195

图 8.21 image195

5.元瓦片,边界尺寸,和图像格式可让您覆盖 Caching Defaults 部分中为这些参数设置的值。例如,您可能希望在标签确实很关键的图层上增加倾斜大小和装订线大小。 逐层执行可避免对整体性能造成压力。

image196

图 8.22 image196

6.下一节允许您选择 GeoWebCache 是否将为与该层关联的每个样式创建单独的缓存。 还可以为时间和提升设置单独的缓存。只有在配置了时间和高程支持时,这些选项才有意义。

时间和高程配置不在本书范围内。您可以在 尺寸 层网页的选项卡。 请注意,您的数据(栅格或矢量)应具有包含有意义的时间或高程值的属性。

image197

图 8.23 image197

7.您可以设置将用于缓存图层的网格集。 默认情况下,在 Caching Defaults 部分中定义的两个网格集均处于启用状态。 您可以添加其他用户或删除默认设置。 您还可以为要发布和/或缓存的每个网格集设置缩放级别:

image198

图 8.24 image198

您查看了所有可用于微调缓存配置的选项。虽然缓存默认值对于拥有一组工作属性很好, 但每次添加新层时,都应将其配置为最大化性能和优化磁盘空间。

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。

image199

图 8.25 image199

10.现在,将地图放大并平移一点, 然后转到 Tile layers 网页,查看您的请求生成的地图是否存储为地图:

image200

图 8.26 image200

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 网页,查看您的图块是否存储在缓存中。

image201

图 8.27 image201

18.我们需要更进一步。您还记得我们谈论过直接集成吗? 返回 Caching defaults 部分并检查该标志。 然后点击保存按钮。

image206

图 8.28 image206

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 图层。 当提示有关 删除所有图块,单击“确定”按钮。

image207

图 8.29 image207

25.保存文件。 现在打开浏览器并指向 http://localhost:8080/wmsDirectIntegrationCached.html . 和以前一样,导航地图的平移和缩放, 然后返回到 Tile Layers 网页并查看您的磁贴是否再次存储在缓存中。

image208

图 8.30 image208

刚刚发生了什么?

您构建了一个非常简单的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 链接:

image209

图 8.31 image209

2.将打开一个新页面。GeoWebCache种子设定未集成在GeoServer web界面中。 您看到的是GeoWebCache界面:

image210

图 8.32 image210

3.滚动到“创建新任务”部分。 您必须设置生成参数。 第一个是并行进程的数量,即请求映射到GeoServer的线程。 由于我们只有一个GeoServer实例, 运行太多的进程没有任何好处。 从下拉列表中选择 04

image211

图 8.33 image211

4.然后选择操作类型。您可以选择 Seed ,它将只生成丢失的瓦片,或重新设定 重新生成所有瓦片。如果您更改了图层的样式,并且不希望用户看到混合贴图,则会出现这种情况。 请注意 Truncate 操作与 Empty 集成在GeoServer接口中的操作。 在这里,您可以选择一组缩放级别进行截断,而 Empty 操作将始终删除所有瓦片。 选择 Seed – generate missing tiles

image212

图 8.34 image212

5.您必须为生成选择网格集和图像格式。 如果您要针对一种以上的网格集和/或图像格式预先计算缓存, 您可以在开始此操作后立即开始其他操作。 选择“网格集”作为EPSG:4269,将“格式”选择为image / png:

image214

图 8.35 image214

6.您只能在指定网格集的子集上启动播种操作。 您可以选择一个级别范围和一个区域。 如果您不想将播种限制在特定区域, 将“边界框”文本框留空, 并且该操作将使用网格集范围。 选择 00 作为 缩放开始 :和 10 作为 缩放停止: 。 现在,通过单击“提交”按钮开始生成操作:

image215

图 8.36 image215

7.任务开始后,Web界面会向您显示当前正在运行的任务的列表。 如果要同时播种更多层,您可以按层过滤任务,也可以杀死一个或所有正在运行的任务。 点击“刷新列表”链接将使用“完成的瓦片数”更新列表, 已用时间剩余时间 列。瓦片的数量在更详细的缩放级别下迅速增长。 生成不仅需要大量磁盘空间,还需要大量时间, 取决于系统的容量。

image216

图 8.37 image216

8.任务结束时,您应该会看到一个空列表。 返回到 Title layers 页面,现在将为您的图层切片分配大量磁盘空间:

image217

图 8.38 image217

刚刚发生了什么?

生成你的图层会对性能产生巨大的影响。来自客户机的每个映射请求, 在您预先计算的级别范围内,都将立即命中缓存。您可以期望性能从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。 您可以从“缓存默认值”页面执行此操作, 禁用所有服务并关闭为每个新层自动创建缓存配置的功能。

image218

图 8.39 image218

如果以前使用过集成的 GeoWebCache ,则可能还需要禁用每个层并删除瓦片。

独立的 GeoWebCache 是一个Java web应用程序,您可以在Tomcat实例上部署它, 就像我们在第二章, 安装Geoserver.安装后,必须通过编辑 geowebcache.xml 文件。