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)