播种

介绍

maproxy根据需要创建所有平铺。为了提高常见请求区域的性能,可以预先生成这些切片。这个 mapproxy-seed 脚本执行此任务。

该工具可以为每个缓存设定一个或多个多边形或BBox区域。它可以播种丢失的切片并刷新旧切片。一 cleanup 可用于去除旧切片。

方法

maproxy不逐级为切片金字塔排序,而是先遍历切片金字塔的深度。它从第一个缩放级别开始,通过检查每个字幕是否与覆盖范围相交来确定是否需要为下一个缩放级别中的分片播种。它递归地为下面的所有图块重复此步骤,直到达到种子的最后一个缩放级别。只有这样,在返回到父图块之前,图块实际上是播种的。

下面显示了为具有三个级别的简单缓存种子分片的顺序:

Level 0 with 1 tile:

          21

Level 1 with 4 tiles:

         5  10
        15  20

Level 2 with 16 tiles:

      1  2  6  7
      3  4  8  9
     11 12 16 17
     13 14 18 19

此方法已优化为有效 with 您的操作系统和地理空间数据库的缓存,因为同一区域是直接连续多个比例请求的。

它还可以有效地对复杂的封面进行检查,因为字幕可以在早期被拒绝。

mapproxy-seed

命令行脚本需要一个种子配置,该配置描述应该从哪个层生成哪些块。见 configuration 文件的格式。

选项

-s <seed.yaml>, --seed-conf==<seed.yaml>

种子配置。还可以将配置作为最后一个参数传递给 mapproxy-seed

-f <mapproxy.yaml>, --proxy-conf=<mapproxy.yaml>

要使用的maproxy配置。这个文件应该描述种子配置引用的所有缓存和网格。

-c N, --concurrency N

并发种子工作者的数目。种子工具的某些部分是CPU密集型的(图像分割和编码),使用此选项将负载分布在多个CPU上。要限制对源WMS的并发请求,请参见 concurrent_requests

-n, --dry-run

这将模拟种子/清理过程,而无需请求、创建或移除任何块。

--summary

打印所有播种和清理任务的摘要并退出。

--quiet

减少进度记录器的输出。

-i, --interactive

打印每个播种和清理任务的摘要并询问 mapproxy-seed 应该设定/清除该任务。它将在开始前查询每个任务。

--seed=<task1,task2,..>

只为指定的种子设定任务设定种子。可以使用逗号分隔名称列表选择多个任务,也可以使用 --seed 多次选择。你可以使用 ALL 选择所有任务。这将禁用所有清理任务,除非同时使用 --cleanup 选择权。

--cleanup=<task1,task2,..>

仅清理命名任务。可以使用逗号分隔名称列表选择多个任务,也可以使用 --cleanup 多次选择。你可以使用 ALL 选择所有任务。这将禁用所有种子设定任务,除非同时使用 --seed 选择权。

--continue

继续中断的种子进程。如果进度文件 (--progress-file )找不到。只有在上一个种子是用 --progress-file--continue 选择权。

--progress-file

文件名,其中maproxy存储 --continue 选择权。默认为 .mapproxy_seed_progress 在当前工作目录中。mapproxy将在成功种子后删除该文件。

--duration

在此持续时间之后停止播种进程。此选项接受以下格式的持续时间:120s、15m、4h、0.5d将此选项与 --continue 恢复播种。仅适用于Linux和Unix系统。

--reseed-file

创建的文件 mapproxy-seed 在新播种开始时。

--reseed-interval

只有在以下情况下才开始播种 --reseed-file 比此持续时间早。此选项接受以下格式的持续时间:120s、15m、4h、0.5d将此选项与 --continue 恢复播种。默认情况下,

--use-cache-lock

锁定每个缓存以防止多个并行 mapproxy-seed 在同一缓存上工作的调用。它不会锁定maproxy的正常操作。

--log-config

要使用的日志配置文件。

1.5.0 新版功能: --continue--progress-file 选项

1.7.0 新版功能: --log-config 选项

1.10.0 新版功能: --duration--reseed-file--reseed-interval 选项

实例

并发性为4的种子::

mapproxy-seed -f mapproxy.yaml -c 4 seed.yaml

打印所有种子任务的摘要并退出:

mapproxy-seed -f mapproxy.yaml -s seed.yaml --summary --seed ALL

以交互方式选择应为哪些任务设定种子::

mapproxy-seed -f mapproxy.yaml -s seed.yaml -i

为任务1和任务2设定种子,并同时为2清理任务3::

mapproxy-seed -f mapproxy.yaml -s seed.yaml -c 2 --seed task1,task2 \
 --cleanup task3

配置

注解

配置更改为maproxy 1.0.0,旧格式更改为 seedsviews 仍受支持,但将来将弃用。见 below 有关旧格式的信息。

配置是一个包含三个部分的yaml文件:

seeds

配置种子设定任务。

cleanups

配置清理任务。

coverages

配置播种和清理任务的覆盖范围。

例子

seeds:
  myseed1:
    [...]
  myseed2
    [...]

cleanups:
  mycleanup1:
    [...]
  mycleanup2:
    [...]

coverages:
  mycoverage1:
    [...]
  mycoverage2:
    [...]

seeds

您可以在这里定义多个种子设定任务。任务定义 what 应该播种。每个任务都配置为一个字典,任务名称作为键。可以使用这些名称在命令行上选择单个任务 mapproxy-seed .

mapproxy-seed 将始终依次处理一个切片金字塔。每个图块金字塔都由缓存和相应的网格定义。具有多个网格的缓存由多个平铺金字塔组成。您可以配置要用种子植入的平铺金字塔 cachesgrids 选项。

您可以使用 levelscoverages 选项。

每个种子任务都采用以下选项:

caches

包含应为此任务设定种子的缓存的列表。这些名称应该与maproxy配置中的缓存名称匹配。

grids

一个列表,其中应为 caches . 这些名称应该与maproxy配置中的网格名称匹配。此任务的所有缓存都需要支持您在此处指定的网格。默认情况下,将为所有配置的缓存共用的网格设定种子。

levels

应输入的级别列表,或带有 fromto 定义了一系列级别。你可以省略 from 从0级开始,或者可以省略 to 播种到最后一层。默认情况下,将为所有级别设定种子。

实例:

# seed multiple levels
levels: [2, 3, 4, 8, 9]

# seed a single level
levels: [3]

# seed from level 0 to 10 (including level 10)
levels:
  to: 10

# seed from level 3 to 6 (including level 3 and 6)
levels:
  from: 3
  to: 6

coverages

包含覆盖范围名称的列表。将种子面积限制在覆盖范围内。默认情况下,网格的整个覆盖范围将被播种。

refresh_before

重新生成所有早于给定日期的切片。日期可以是绝对的,也可以是相对的。默认情况下,不会刷新现有的平铺。

maproxy还可以使用文件的最后修改时间。文件路径应该相对于代理配置或绝对路径。

实例:

# absolute as ISO time
refresh_before:
  time: 2010-10-21T12:35:00

# relative from the start time of the seed process
refresh_before:
  weeks: 1
  days: 7
  hours: 4
  minutes: 15

# modification time of a given file
refresh_before:
  mtime: path/to/file

例子

seeds:
  myseed1:
    caches: [osm_cache]
    coverages: [germany]
    grids: [GLOBAL_MERCATOR]
    levels:
      to: 10

  myseed2
    caches: [osm_cache]
    coverages: [niedersachsen, bremen, hamburg]
    grids: [GLOBAL_MERCATOR]
    refresh_before:
      weeks: 3
    levels:
      from: 11
      to: 15

cleanups

您可以在这里定义多个清理任务。每个任务都配置为一个字典,任务名称作为键。可以使用这些名称在命令行上选择单个任务 mapproxy-seed .

caches

一个包含要在其中清除旧切片的缓存的列表。这些名称应该与maproxy配置中的缓存名称匹配。

grids

带有网格名称的列表 caches 要清理的位置。这些名称应该与maproxy配置中的网格名称匹配。此任务的所有缓存都需要支持您在此处指定的网格。默认情况下,将使用所有配置的缓存共用的网格。

levels

或者是应该清除的级别列表,或者是带有 fromto 定义了一系列级别。你可以省略 from 从0级开始,或者可以省略 to 清理到最后一层。默认情况下,将清除所有级别。

实例:

# cleanup multiple levels
levels: [2, 3, 4, 8, 9]

# cleanup a single level
levels: [3]

# cleanup from level 0 to 10 (including level 10)
levels:
  to: 10

# cleanup from level 3 to 6 (including level 3 and 6)
levels:
  from: 3
  to: 6

coverages

包含覆盖范围名称的列表。将清理区域限制在覆盖范围内。默认情况下,网格的整个覆盖范围将被清除。

注解

当用大量切片(大于14)清理大覆盖层和水平面的缓存时要小心。没有 coverages ,种子工具在文件系统级别上工作,它只需要检查是否存在应删除的切片。用 coverages 种子工具遍历整个平铺金字塔,需要检查每个可能的平铺是否存在以及是否应该移除。这要慢得多。

remove_all

设置为“真”时,无论何时创建切片,都要删除所有切片。你仍然用 levelscoverage 选项。使用此选项,maproxy将尝试以更有效的方式删除图块。例如:它将删除 file 缓存而不是将每个图块与时间戳进行比较。

remove_before

删除所有早于给定日期的切片。日期可以是绝对的,也可以是相对的。 remove_before 默认为种子进程的开始时间,以便新创建的图块不会被删除。

maproxy还可以使用文件的最后修改时间。文件路径应该相对于代理配置或绝对路径。

实例:

# absolute as ISO time
remove_before:
  time: 2010-10-21T12:35:00

# relative from the start time of the seed process
remove_before:
  weeks: 1
  days: 7
  hours: 4
  minutes: 15

# modification time of a given file
remove_before:
  mtime: path/to/file

例子

cleanups:
  highres:
    caches: [osm_cache]
    grids: [GLOBAL_MERCATOR, GLOBAL_SPERICAL]
    remove_before:
      days: 14
    levels:
      from: 16
  old_project:
    caches: [osm_cache]
    grids: [GLOBAL_MERCATOR]
    coverages: [mypolygon]
    levels:
      from: 14
      to: 18

coverages

有三种不同的方法来描述播种或清理任务的范围。

  • 一个简单的矩形边界框,

  • 具有一个或多个wkt格式多边形的文本文件,

  • 任何数据源的多边形都可以用ogr读取(例如shapefile、geojson、postgis)

阅读 coverage documentation 更多信息。

注解

如果要使用多边形定义播种区域的地理范围,而不是简单的边界框,则需要安装其他依赖项。见 coverage documentation .

每个覆盖率都有一个名称,用于种子和清理任务配置中。如果没有为任务指定覆盖范围,则将使用网格的bbox。

例子

coverages:
  germany:
    datasource: 'shps/world_boundaries_m.shp'
    where: 'CNTRY_NAME = "Germany"'
    srs: 'EPSG:900913'
  switzerland:
    datasource: 'polygons/SZ.txt'
    srs: 'EPSG:900913'
  austria:
    bbox: [9.36, 46.33, 17.28, 49.09]
    srs: 'EPSG:4326'

产量

mapproxy-seed 打印出控制台上当前种子设定任务的进度。

进度日志示例:

[16:48:26]  4  41.00% 582388, 4734701, 586740, 4737666 (5812 tiles)

输出从当前时间开始,到目前为止已播种或移除的磁贴数结束。第三个值是以百分比表示的当前进度。如果种子设定检测到平铺及其所有副标题都超出种子设定覆盖范围,则进度可能会发生很大的跳跃。第二个和第四个值显示播种工具在此时刻所在的级别和边界框。记住,它不会一级一级地播种。这在 seeding method .

示例:背景种子设定

1.10.0 新版功能: 仅适用于Linux和Unix

这个 --duration 选项允许您在有限的时间内运行maproxy种子设定。与 --continue 选项,您可以稍后恢复播种过程。你可以用这个打电话 mapproxy-seed 具有 cron 在休息时间播种。

但是,这将在每次完成播种时从头开始重新启动播种过程。你可以用 --reeseed-interval--reseed-file 选择权。下面的示例将开始播种6小时。每当您再次调用此命令时,它将再播种6个小时。处理完所有种子和清理任务后,每次在第一次调用后14天内调用该命令时,该命令将立即退出。14天后,修改时间 reseed.time 文件将被更新,重新播种过程将再次开始。

mapproxy-seed -f mapproxy.yaml -s seed.yaml  \
  --reseed-interval 14d --duration 6h --reseed-file reseed.time \
  --continue --progress-file .mapproxy_seed_progress

你可以使用 --reseed-file 作为一个 refresh_beforeremove_before mtime -文件。

旧配置

注解

以下描述适用于旧的种子配置。

配置包含两个键: viewsseeds . views 描述应播种的地理范围。 seeds 将实际层与这些层链接起来 views .

种子

包含带有层/视图映射的字典。::

seeds:
    cache1:
        views: ['world', 'germany', 'oldb']
    cache2:
        views: ['world', 'germany']
        remove_before:
            time: '2009-04-01T14:45:00'
            # or
            minutes: 15
            hours: 4
            days: 9
            weeks: 8
remove_before

如果存在,请重新创建早于日期或时间增量的切片。播种过程结束时,所有旧的切片都将被移除。

您可以定义固定时间或时间增量。这个 time 是一个类似于ISO的日期字符串(没有时区,没有缩写)。要定义时间增量,请使用一个或多个 secondsminuteshoursdaysweeks 条目。

意见

包含包含所有视图的字典。每个视图都描述了覆盖范围/地理范围以及应该播种的级别。

覆盖范围

注解

如果要使用多边形定义播种区域的地理范围,而不是简单的边界框,则需要安装其他依赖项。见 coverage documentation .

有三种不同的方法来描述种子视图的范围。

  • 一个简单的矩形边界框,

  • 具有一个或多个wkt格式多边形的文本文件,

  • 任何数据源中的多边形都可以用ogr读取(例如shapefile、postgis)

阅读 coverage documentation 更多信息。

其他选项

srs

带有SRS的列表。如果层包含多个SRS的缓存,则只会为与此列表中某个SRS匹配的缓存设定种子。

res

在缓存此解决方案之前进行种子设定。

level

缓存该层之前的数字,或具有应缓存的级别范围的元组。

配置示例

views:
  germany:
    datasource: 'shps/world_boundaries_m.shp'
    where: 'CNTRY_NAME = "Germany"'
    srs: 'EPSG:900913'
    level: [0, 14]
    srs: ['EPSG:900913', 'EPSG:4326']
  switzerland:
    datasource: 'polygons/SZ.txt'
    srs: EPSG:900913
    level: [0, 14]
    srs: ['EPSG:900913']
  austria:
    bbox: [9.36, 46.33, 17.28, 49.09]
    srs: EPSG:4326
    level: [0, 14]
    srs: ['EPSG:900913']

seeds:
  osm:
    views: ['germany', 'switzerland', 'austria']
    remove_before:
      time: '2010-02-20T16:00:00'
  osm_roads:
    views: ['germany']
    remove_before:
      days: 30