从网上偶然看到,现在有一些专业的地图服务代理服务器,不仅可以本地缓存地图服务、地图瓦片,而且可以对地图服务进行重新投影切片等。瞬间得到一个启发,当前google在线地图不能使用的情况下,是否可以架设一个地图代理服务器,供自己内部使用呢?
地图代理服务,自己开发起来也简单,但是短时间内实现缓存、重投影等多重功能,还是不太可能的。这里就以MapProxy为例,简单介绍一下如何部署和实现代理。
参考网址
环境
- windows 10
- Python 3.9.5
部署
MapProxy在windows上的部署还是非常方便的,直接使用pip安装,电脑上只要有python环境就行。
# 安装 MapProxy
pip install MapProxy
# 由于PROJ通常在Windows系统上不可用,因此还需要安装Python包 `pyproj`
pip install pyproj
# 验证安装版本
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 #默认端口8080
# 指定端口启动
mapproxy-util serve-develop mapproxy.yaml -b 0.0.0.0:8011
浏览器访问http://localhost:8080/#/ 就可以进入页面,如果想看代理的服务,直接点击demo
测试代理地图服务
MapProxy支持对WMS、WMS-C、WTMS、TMS等服务的代理,所有的都只需要你在yml文件里配置,上手还是比较快的,对不懂开发人是很友好的。我的测试配置如下mapproxy.yaml:
services:
demo:
tms:
use_grid_names: true
# origin for /tiles service
origin: 'nw'
kml:
use_grid_names: true
wmts:
wms:
md:
title: MapProxy WMS Proxy
abstract: This is a minimal MapProxy example.
layers:
- name: osm_utm
title: 智图测试
sources: [osm_cache_tile]
caches:
osm_cache_tile:
grids: [osm_grid]
# true会禁用本地缓存
disable_storage: false
# a tile source you want to reproject
sources: [osm_source]
sources:
osm_source:
type: tile
grid: osm_grid
url: https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/%(z)s/%(y)s/%(x)s
grids:
webmercator:
base: GLOBAL_WEBMERCATOR
osm_grid:
base: GLOBAL_MERCATOR
srs: 'EPSG:3857'
origin: nw
globals:
这里一定要注意:
对于TMS服务的url,一定是%(z)s/%(y)s/%(x)s
这种格式的,不能是{z}/{y}/{x}
预览效果图
查看本地mapproxy.yaml所在同级目录下,出现了一个cache_data文件夹,点进去可以看到都是缓存的瓦片