2.3. MapProxy的安装和使用

MapProxy是WMS网络地图服务和切片服务的瑞士军刀。它可以缓存、加速和转换现有数据服务,并为任何支持OGC标准的桌面和Web客户端提供服务。

2.3.1. 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的覆盖功能,则需整齐安装。Shapely为GEOS库提供了Python绑定。要安装和使用,需要 libgeos-devpython-shapely 。如果系统上没有较新版本的Shapely(1.2.0或更高版本),可以使用 pip 命令作为用于Python的第三方程序包安装。

GDAL(可选)

Coverage功能允许用户从OGR数据库(shapefile、postgis等)读取几何图形。此程序包是可选的,只需要支持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.yamlfull_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/访问该服务

2.3.2. 使用

根据教程配置mApproxy.yaml文件。以下是对配置文件组件的介绍。在测试过程中,只使用了mApproxy.yaml配置。

MApproxy.yaml和seed.yaml

Mapproxy.yaml:配置服务所有部分的主配置文件,例如需要启动哪些服务、数据来自哪里以及需要缓存哪些服务

MApxy-Seed mApproxy创建所有需要的图像,为了加快请求速度,该工具可以缓存一个或多个多边形区域。

配置文件使用YAML格式 mapproxy.yaml 主要包括以下几个部分:

globals :设置默认值,可在其他配置节中使用的全局变量。

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

sources :定义MapProxy可以获取新数据集的位置。

caches :配置内部缓存

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

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
    });