MapProxy 是 WMS 网页地图服务与切片服务提供者的瑞士军刀。它对已有服务的数据服务进行缓存、加速和转换,服务任何支持 OGC 标准的桌面与网页客户端。
目前 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-dev
与 python-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.yaml
和 seed.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
});