MapProxy安装与使用

MapProxy 是 WMS 网页地图服务与切片服务提供者的瑞士军刀。它对已有服务的数据服务进行缓存、加速和转换,服务任何支持 OGC 标准的桌面与网页客户端。

MapProxy 安装

目前 MapProxy 已经在 Debian/Ubuntu 官方源中,可以通过 apt 命令进行安装。

若要使用较新的版本,则可以建立 Python 虚拟环境, 然后通过 pip 命令安装。

MapProxy1.11.0安装:参考官方帮助

创建Python的虚拟环境

安装依赖项,需要管理员权限。

sudo apt install python-imaging python-yaml libproj9
sudo apt install libgeos-dev python-lxml libgdal-dev python-shapely

关于依赖的类库,libproj, Proj4是一个坐标系转换的库;Pillow,Pillow(PIL)是一个图像处理的库。

安装

pip install PyYAML

Shapely 与 GEOS(可选)

如果要使用 MapProxy 的叠加(coverage)功能,需要安装 Shapely。Shapely 提供了 GEOS 库的 Python 绑定。要安装使用,需要 libgeos-devpython-shapely 。如果系统中没有提供较新版本( 1.2.0 或更高版本)的 Shapely , 可以通过 pip 命令作为 Python 第三方包进行安装。

GDAL(可选)

coverage 功能允许用户可以从 OGR 数据库(Shapefiles, PostGIS, etc.)中读取几何图形,这个包是可选的,并且只对于 OGR 数据源的支持(BBOX,WKT 与 GeoJSON 的覆盖是原生支持的)是需要的。OGR 是 GDAL ( libgdal-dev )包的一部分。

lxml(可选)

lxml 用来支持更高级的 WMS 要素信息操作,如 XSL 事务,或 连接多个 XML/HTML 文档。这个软件包的名称为 python-lxml

安装MapProxy

pip install MapProxy

检查安装是否成功,可使用如下命令

mapproxy-util --version

创建MapProxy的配置文件:

mapproxy-util create -t base-config mymapproxy

这句命令会创建一个名叫mymapproxy的文件夹,里面包含一个最小的示例配置(mapproxy.yamlseed.yaml),以及两个完成的示例配置文件(full_example.yaml and full_seed_example.yaml)。

启动测试服务

cd mymapproxy
mapproxy-util serve-develop mapproxy.yaml

按指定端口启动服务

mapproxy-util serve-develop ~/mapproxy/mapproxy.yaml -b 0.0.0.0:8011

MapProxy附带一个演示服务,列出所有已配置的WMS和TMS图层。可以通过访问http://localhost:8080/demo/访问那个服务。

使用

然后根据教程配置 mapproxy.yaml文件 ,下面是介绍一下配置文件的组成 部分。在测试过程中,只使用了mapproxy.yaml的配置。

mapproxy.yaml和seed.yaml

mapproxy.yaml:主要配置文件,配置服务的所有部分,比如那些服务需要启动,数据来自哪里,那些需要缓存

mapproxy-seed mapproxy创建所有需要的图片,为了 提高请求速度,这个 工具可以缓存一个或多个多边形区域 。

配置文件使用 YAML 格式,mapproxy.yaml 主要包含下面这些部分:

globals : 设置默认 值,全局 变量,可以 在其他配置部分使用。

services : MapProxy 提供 的服务,比如jWMS或者TMS。

sources : 定义在哪里MapProxy可以取到新的数据集。

caches : 配置 内部 缓存

layers : 配置MapProxy提供的图层,每一个图层都可以包含多个数据源sources和缓存caches。

grids : 定义MapProxy使用 的网格来排列缓存图片

注意,要保持格式,不能使用 tab键,而 只能用空格键。

配置文件的内容贴出如下,代码是这样的:

services:
   tms:
     use_grid_names: true
layers:
   - name: my_layer
     title: WMS layer from tiles HiFleet
     sources: [mycache]
caches:
   mycache:
     grids: [webmercator]
     sources: [my_tile_source]
sources:
   my_tile_source:
     type: tile
     url: url.png
grids:
 webmercator:
   base: GLOBAL_WEBMERCATOR
   srs: 'EPSG:3857'

这种实例,可以使用 LeafLetJS, 或 OpenLayers 进行访问测试。

贴出 OpenLayers 的代码如下:

var raster = new ol.layer.Tile({
        source: new ol.source.XYZ({
url:'http://localhost:8080/tms/1.0.0/my_layer/webmercator/.png'
        }),
opacity: 1,
visible:false
    });