高速缓存

1.2.0 新版功能.

maproxy支持多个后端来存储内部切片。默认的后端是基于文件的,不需要任何进一步的配置。

配置

您可以使用配置每个缓存的后端 cache 选择权。每个后端都有一个 type 以及一个或多个选项。

caches:
  mycache:
    sources: [...]
    grids: [...]
    cache:
      type: backendtype
      backendoption1: value
      backendoption2: value

以下后端类型可用。

file

这是默认的缓存类型,它为每个图块使用一个文件。可用选项包括:

directory_layout

maproxy用于在磁盘上存储分片的目录布局。默认为 tc 它使用与tilecache兼容的目录布局 (zz/xxx/xxx/xxx/yyy/yyy/yyy.formatmp 使用嵌套较少的目录布局 (zz/xxxx/xxxx/yyyy/yyyy.format ''。 tms 使用TMS兼容目录 (zz/xxxx/yyyy.formatquadkey 使用与Microsoft Virtual Earth或QuadKey兼容的目录(请参阅http://msdn.microsoft.com/en-us/library/bb259689.aspx)。 arcgis 使用与Arcgis分解缓存兼容的十六进制行和列号的目录布局 (Lzz/Rxxxxxxxx/Cyyyyyyyy.format

注解

tmsquadkeyarcgis 布局不适合大型缓存,因为它将创建包含数千个文件的目录,而大多数文件系统处理不好。

use_grid_names

什么时候? true maproxy将在路径中使用实际的网格名称,而不是SRS代码。例如,切片将储存在 ./cache_data/mylayer/mygrid/ 而不是 ./cache_data/mylayer/EPSG1234/ .

1.5.0 新版功能.

directory

mapproxy应该直接存储tiles的目录。这不会添加缓存名称或网格名称 (use_grid_name 去那条小路。您可以使用此选项将maproxy指向现有的图块集合(创建时使用 gdal2tiles 例如)。

1.5.0 新版功能.

tile_lock_dir

当maproxy为这个缓存创建新的块时,它应该在其中写入锁文件的目录。默认为 cache_data/tile_locks .

1.6.0 新版功能.

mbtiles

对此缓存使用单个sqlite文件。它使用 MBTile specification .

可用选项:

filename

mbtiles文件的路径。默认为 cachename.mbtiles .

tile_lock_dir

当maproxy为这个缓存创建新的块时,它应该在其中写入锁文件的目录。默认为 cache_data/tile_locks .

1.6.0 新版功能.

您可以设置 sources 如果使用现有mbtiles文件且没有源,则返回空列表。

caches:
  mbtiles_cache:
    sources: []
    grids: [GLOBAL_MERCATOR]
    cache:
      type: mbtiles
      filename: /path/to/bluemarble.mbtiles

注解

mbtiles格式规范不包括每个tile的任何时间戳,因此种子设定功能受到限制。如果你有 refresh_before 在种子任务中,无论值如何,都将重新创建所有分片。清理过程不支持任何 remove_before mbtiles的时间,它总是移除所有的tiles。使用 --summary 选择权 mapproxy-seed 工具。

关于笔记 bulk_meta_tiles 对于sqlite,下面也适用于mbtiles。

sqlite

1.6.0 新版功能.

使用sqlite数据库存储切片,类似于 mbtiles 隐藏物。不同于 mbtiles 缓存是指 sqlite 缓存将每个级别存储到单独的数据库中。这使得在maproxy种子清理过程中很容易删除完整级别。这个 sqlite 缓存还存储每个图块的时间戳。

可用选项:

dirname

存储级别数据库的目录。

tile_lock_dir

当maproxy为这个缓存创建新的块时,它应该在其中写入锁文件的目录。默认为 cache_data/tile_locks .

1.6.0 新版功能.

caches:
  sqlite_cache:
    sources: [mywms]
    grids: [GLOBAL_MERCATOR]
    cache:
      type: sqlite
      directory: /path/to/cache

注解

1.10.0 新版功能.

meta-tile请求中的所有tile都存储在一个事务中到sqlite文件中,以提高性能。你需要激活 bulk_meta_tiles 当您使用平铺源时,可以获得相同的好处。

caches:
  sqlite_cache:
    sources: [mytilesource]
    bulk_meta_tiles: true
    grids: [GLOBAL_MERCATOR]
    cache:
      type: sqlite
      directory: /path/to/cache

couchdb

1.3.0 新版功能.

将切片存储在 CouchDB . maproxy为每个图块创建一个JSON文档。此文档包含元数据,如时间戳,以及作为附件的图块图像本身。

要求

除了跑步俱乐部,你还需要 Python requests package . 例如,您可以按常规方式安装 pip install requests .

配置

您可以配置数据库和数据库名称、图块ID以及其他元数据。

可用选项:

url

CouchDB服务器的URL。默认为 http://localhost:5984 .

db_name

MapProxy用于此缓存的数据库名称。默认为缓存的名称。

tile_lock_dir

当maproxy为这个缓存创建新的块时,它应该在其中写入锁文件的目录。默认为 cache_data/tile_locks .

1.6.0 新版功能.

tile_id

每个tile文档都需要一个唯一的ID。您可以使用需要以下键的python格式字符串更改格式:

xyz

切片坐标。

grid_name

网格的名称。

默认ID使用以下格式:

%(grid_name)s-%(z)d-%(x)d-%(y)d

注解

你不能用斜线 (/ )在CouchDB ID中。

tile_metadata

mapproxy为couchdb中的每个tile存储一个JSON文档,您可以向每个文档添加带有元数据的额外键值对。maproxy将用依赖于图块的值替换一些预定义值,所有其他值都将按原样添加。

预定义值:

{{{{x}}}}{{{{y}}}}{{{{z}}}}

切片坐标。

{{{{timestamp}}}}

切片的创建时间,以从纪元开始的秒为单位。maproxy将添加 timestamp 如果不提供自定义时间戳密钥,则为您提供密钥。

{{{{utc_iso}}}}

以ISO格式的UTC格式创建磁贴的时间。例如: 2011-12-31T23:59:59Z .

{{{{tile_centroid}}}}

缓存坐标系中切片的中心坐标,作为长/lat或x/y值的列表。

{{{{wgs_tile_centroid}}}}

wgs 84中切片的中心坐标,作为长/lat值的列表。

例子

caches:
  mycouchdbcache:
    sources: [mywms]
    grids: [mygrid]
    cache:
      type: couchdb
      url: http://localhost:9999
      db_name: mywms_tiles
      tile_metadata:
        mydata: myvalue
        tile_col: '{{x}}'
        tile_row: '{{y}}'
        tile_level: '{{z}}'
        created_ts: '{{timestamp}}'
        created: '{{utc_iso}}'
        center: '{{wgs_tile_centroid}}'

maproxy将把tile z=3,x=1,y=2的json文档放在 http://localhost:9999/mywms_tiles/mygrid-3-1-2 . 文档将如下所示:

{
    "_attachments": {
        "tile": {
            "content_type": "image/png",
            "digest": "md5-ch4j5Piov6a5FlAZtwPVhQ==",
            "length": 921,
            "revpos": 2,
            "stub": true
        }
    },
    "_id": "mygrid-3-1-2",
    "_rev": "2-9932acafd060e10bc0db23231574f933",
    "center": [
        -112.5,
        -55.7765730186677
    ],
    "created": "2011-12-15T12:56:21Z",
    "created_ts": 1323953781.531889,
    "mydata": "myvalue",
    "tile_col": 1,
    "tile_level": 3,
    "tile_row": 2
}

这个 _attachments -部分是couchdb的内部结构,其中存储了tile本身。您可以通过以下地址直接访问此互动程序: http://localhost:9999/mywms_tiles/mygrid-3-1-2/tile .

riak

1.6.0 新版功能.

将切片存储在 Riak 集群。maproxy使用二进制数据作为值,时间戳作为用户定义的元数据创建键。这个后端非常适合于可以分布在多个节点上的大型缓存。数据可以分布在多个节点上,提供故障Tolernt和高可用存储。RIAK集群是无主的,每个节点都可以处理读写请求。

要求

你需要 Python Riak client 2.4.2版或更高版本。您可以按常规方式安装它,例如 pip install riak==2.4.2 . 旧版本的环境必须升级为 pip install -U riak==2.4.2 . python库依赖于包 python-devlibffi-devlibssl-dev .

配置

可用选项:

nodes

RIAK节点列表。每个节点都需要 host 以及可选的 pb_port 和一个 http_port 如果端口与默认端口不同。默认为单个本地主机节点。

protocol

通信协议。允许的选项是 httphttpspbc .默认为 pbc .

bucket

mapproxy用于此缓存的bucket的名称。bucket是tiles的名称空间,对于每个缓存都必须是唯一的。默认为缓存名称后缀为网格名称(例如 mycache_webmercator

default_ports

违约 pbhttp 端口用于 pbchttp 协议。将用作每个已定义节点的默认值。

secondary_index

如果 true 为磁贴启用辅助索引。这提高了种子清理性能,但要求RIAK使用leveldb作为后端。请参阅RIAK文档。默认为 false .

例子

myriakcache:
  sources: [mywms]
  grids: [mygrid]
  cache:
    type: riak
    nodes:
      - host: 1.example.org
        pb_port: 9999
      - host: 1.example.org
      - host: 1.example.org
    protocol: pbc
    bucket: myriakcachetiles
    default_ports:
      pb: 8087
      http: 8098

redis

1.10.0 新版功能.

将切片存储在 Redis 内存数据库。这个后端对于短期缓存很有用。典型的用例是一个小的redis缓存,它允许您从元平铺中获益。

您的redis数据库应该配置为 maxmemorymaxmemory-policy 用于限制内存使用的选项。例如::

maxmemory 256mb
maxmemory-policy volatile-ttl

要求

你需要 Python Redis client . 您可以按常规方式安装它,例如 pip install redis .

配置

可用选项:

host

redis服务器的主机名。默认为 127.0.0.1 .

port

Redis服务器的端口。默认为 6379 .

db

Redis数据库的编号。请参阅Redis文档。默认为 0 .

prefix

添加到redis缓存中每个tile键的前缀。用于区分不同缓存和网格的切片。默认为 cache-name_grid-name .

default_ttl

redis缓存中每个图块的默认生存时间(秒)。默认为3600秒(1小时)。

例子

redis_cache:
    sources: [mywms]
    grids: [mygrid]
    cache:
      type: redis
      default_ttl: 600

geopackage

1.10.0 新版功能.

将切片存储在 geopackage 数据库。如果未定义图块表,则maproxy将创建图块表,并填充所需的元数据字段。这个后端适合需要可移植性的数据集。可用选项:

filename

地理包文件的路径。默认为 cachename.gpkg .

table_name

应在其中存储磁贴的表的名称(如果使用现有缓存,则检索)。默认为 cachename_gridname .

levels

将此值设置为true以缓存到每个级别存储在单独地理包中的目录。默认为 false . 如果设置为真, filename 被忽略。

directory

如果级别为真,则使用此选项指定存储地理包文件的目录。

您可以设置 sources 如果使用现有的地理包文件并且没有源,则返回空列表。

caches:
  geopackage_cache:
    sources: []
    grids: [GLOBAL_MERCATOR]
    cache:
      type: geopackage
      filename: /path/to/bluemarble.gpkg
      table_name: bluemarble_tiles

注解

地理包格式规范不包括每个图块的任何时间戳,因此播种功能受到限制。如果你有 refresh_before 在种子任务中,无论值如何,都将重新创建所有分片。清理过程不支持任何 remove_before 地理包装的时间,它总是移除所有切片。使用 --summary 选择权 mapproxy-seed 工具。

s3

1.10.0 新版功能.

1.11.0 新版功能: region_name, endpoint_url and access_control_list

将切片存储在 Amazon Simple Storage Service (S3) 或任何其他S3兼容的对象存储。

要求

你需要 Python boto3 包裹。您可以按常规方式安装它,例如 pip install boto3 .

配置

可用选项:

bucket_name

用于此缓存的存储桶。您可以使用 globals.cache.s3.bucket_name .

profile_name

的可选配置文件名 shared credentials 对于这个缓存。认证的替代方法是 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量,或使用 IAM role 使用AmazonEC2实例时。您可以使用 globals.cache.s3.profile_name .

region_name

区域的可选名称。您可以使用 globals.cache.s3.region_name

endpoint_url

S3的可选终结点URL。您可以使用 globals.cache.s3.endpoint_url .

access_control_list

S3的可选访问控制列表。您可以使用设置默认访问控制列表 globals.cache.s3.access_control_list .

directory

存储所有磁贴的基本目录(路径)。

directory_layout

定义图块的目录布局 (12/12345/67890.pngL12/R00010932/C00003039.png 等)。见 file 有关可用选项。默认为 tms (例如) 12/12345/67890.png )此缓存也支持 reverse_tms 切片作为 y/x/z.format . 见 note 下面。

注解

等级制度 directory_layouts 可以达到S3的限制 “如果您经常每秒处理100个或更多请求” . directory_layout: reverse_tms 可以绕过这个限制。请阅读 S3 Request Rate and Performance Considerations 有关此问题的详细信息。

例子

cache:
  my_layer_20110501_epsg_4326_cache_out:
    sources: [my_layer_20110501_cache]
    cache:
      type: s3
      directory: /1.0.0/my_layer/default/20110501/4326/
      bucket_name: my-s3-tiles-cache

globals:
  cache:
    s3:
      profile_name: default

数字海洋空间使用示例

cache:
  my_layer_20110501_epsg_4326_cache_out:
    sources: [my_layer_20110501_cache]
    cache:
      type: s3
      directory: /1.0.0/my_layer/default/20110501/4326/
      bucket_name: my-s3-tiles-cache

globals:
  cache:
    s3:
      profile_name: default
      region_name: nyc3
      endpoint_url: https://nyc3.digitaloceanspaces.com
      access_control_list: public-read

compact

1.10.0 新版功能: 支持格式版本1

1.11.0 新版功能: 支持格式版本2

将图块存储在与Arcgis兼容的压缩缓存文件中。单个压缩缓存 .bundle 文件最多可存储16000个磁贴。

Compact缓存格式的版本1与Arcgis 10.0和默认版本Arcgis 10.0-10.2兼容。版本2由ARCGIS 10.3或更高版本支持。版本1存储是另外一个 .bundlx 每个的索引文件 .bundle 数据文件。

可用选项:

directory

mapproxy应存储级别目录的目录。这不会将缓存名称或网格名称添加到路径中。可以使用此选项将maproxy指向现有的压缩缓存。

version

Arcgis Compact缓存格式的版本。此选项是必需的。要么 12 .

您可以设置 sources 如果使用现有的压缩缓存文件并且没有源,则返回空列表。

以下配置将从 /path/to/cache/L00/R0000C0000.bundle 等。

caches:
  compact_cache:
    sources: []
    grids: [webmercator]
    cache:
      type: compact
      version: 2
      directory: /path/to/cache

注解

maproxy不支持 conf.cdiconf.xml 文件夹。当您想在maproxy中重用现有的arcgis压缩缓存时,需要配置兼容的maproxy网格。您需要创建或修改现有 conf.cdiconf.xml 当您想使用在Arcgis中使用maproxy创建的压缩缓存时,可以使用文件。

注解

压缩缓存格式不包括每个图块的任何时间戳,因此种子设定功能受到限制。如果你有 refresh_before 在种子任务中,无论值如何,都将重新创建所有分片。清理过程不支持任何 remove_before 压缩缓存的时间,它总是移除所有的图块。使用 --summary 选择权 mapproxy-seed 工具。

注解

压缩缓存格式是附加的,只允许并行读写操作。移除或刷新切片 mapproxy-seed 不会减小缓存文件的大小。你可以使用 defrag-compact-cache util可减小现有捆绑文件的文件大小。