MapProxy
2014年10月28日
MapProxyとは
MapProxyとは、地図配信用のプロキシサーバです。
OSGeoによる概要
MapProxy — OSGeo-Live 8.5-dev Documentation
MapProxy は、複数のソースからなる地図を予めレンダリングし、ローカルなキャッシュに格納することによってマッピングアプリケーションを高速化します。レイヤの透化、測地系の変更、複数のレイヤ統合、電子透かしの追加など、多くのことを可能にします。
TileCacheやMapCacheと同じですが、ポリゴンでのアクセス制御も出来るようです。
なお、TileStacheはGeoJSONでも出力できます。
インストール
Pythonのパッケージで簡単にインストールできます。
CentOS6にて
$ sudo pip install PyYAML $ sudo pip install Shapely $ sudo yum install python-lxml $ sudo pip install MapProxy
この他にGeosやProj.4なども必要ですが、すでに他のGISソフトを使っているのであっという間に終わりました。
次のようになれば成功。
$ mapproxy-util --version MapProxy 1.7.1
試用
設定には、まず適当なディレクトリから次のコマンドを実行します。
$ mapproxy-util create -t base-config ./
すると次の4ファイルが作成されます。
mapproxy.yaml ・・・ サンプル。OSMの地図をWMSで参照します。
full_example.yaml ・・・ 例や説明がたくさん入ったサンプル。これを参考に設定ファイルを書いていく。
seed.yaml ・・・ seed(予めタイルデータを作っておく)する時のサンプル。
full_seed_example.yaml ・・・同じくseedの例や説明。
サーバを起動するにはこう。
mapproxy-util serve-develop ./mapproxy.yaml -b 192.168.0.23:8082
デフォルトではポート8080を使うのでオプションで違うポートを指定します。
IPアドレスは接続を受け付けるときのアドレス。127.0.0.1で自分自身からのみ、0.0.0.0だと制限しません。
デモページが用意されているので動作を確認できます。
http://192.168.0.23:8082/demo/
他の設定
他のTMSサーバやWMSサーバを組み込もうとしていますが、グリッドやズームレベルの様子が変なので保留。
理由は分かりませんが、MapProxyのTMSはズームレベル0で2x2となっていました。
地理院地図などはレベル0で1x1(全体で一枚)。
設定の min_res で調整するようですが同じようには出来ていません。
demoページのOpenLayersのソースを見ると maxResolution: 78271.516964, とあるのでクライアント側で調整が必要かも。
以下がWMSとTMSをソースにする設定。
layers:
- name: drm2603
# MapCache's TMS
title: drm2603
sources: [drm2603_cache]
- name: drm2603wms
# MapServer WMS
title: drm2603
sources: [drm2603wms_cache]
caches:
drm2603_cache:
grids: [g20_grid_b]
sources: [drm2603_tile]
drm2603wms_cache:
grids: [g20_grid_a]
sources: [drm2603_wms]
sources:
drm2603_tile:
type: tile
grid: g20_grid_b
url: http://spatialsv03/drmmap/tms/1.0.0/drm2603@g20/%(z)s/%(x)s/%(y)s.png
drm2603_wms:
type: wms
supported_srs: ['EPSG:3857', 'EPSG:900913', 'EPSG:4326', 'EPSG:4612']
supported_formats: ['image/tiff', 'image/jpeg', 'image/png']
http:
# defines how long MapProxy should wait for data from source servers
client_timeout: 60 # seconds
# add additional HTTP headers to all requests to your sources.
headers:
my-header: value
req:
url: http://localhost/cgi-bin/mapserv?
layers: drm2603
transparent: true
# additional options passed to the WMS source
map: /home/demo/webviewer.map
grids:
webmercator:
base: GLOBAL_WEBMERCATOR
osm_grid:
base: GLOBAL_MERCATOR
srs: 'EPSG:3857'
origin: nw
g20_grid_b:
base: GLOBAL_MERCATOR
origin: sw
# default tile size is 256 x 256 pixel
tile_size: [256, 256]
srs: 'EPSG:3857'
align_resolutions_with: GLOBAL_MERCATOR
# resolution of level 0
min_res: 156543.0339280410
num_levels: 21
OpenLayersに組み込む時は、Layerのオプションに zoomOffset:-1 を付けると地理院地図などと重ねて表示できます。
var layerMapProxy = new OpenLayers.Layer.TMS(
"MapProxy",
"http://spatialsv02:8082/tms/",
{
layername: "drm2603/g20_grid_b"
,type: "png"
,isBaseLayer: false
,visibility: false
,opacity: 0.5
,version:""
,zoomOffset:-1
}
);
map.addLayer(layerMapProxy)

