I'd like to use a central server to provide a common location for all of our mapping / imagery resources. Our data is primarily in the form of geotiffs with a variety of base layers from various sources on the web.

Geoserver, given a set of geotiffs, does a nice job of serving up tiles (via WMTS or TMS). However, I don't know of a way to easily proxy other external sources of data like the sample base layers from http://services.arcgisonline.com/ArcGIS/rest/services. Unfortunately, it doesn't seem like many services implement a WMS layer (or don't make it public). Currently we have logic in our application to special case various web services but it is a bit of hack. Ideally I'd like to present a common web services interface to all our tiling providers. This would enable WMS clients like world wind applications to "just work".

My only thought right now is to build a small python web service that would expose a list of capabilities via WMS and then add this service into geoserver as a cascading WMS store. This seems like a lot of work to simply serve up map tile URLs.

I am curious if this this problem has been solved before or if there is an easier solution.


2 Answers 2


You might want to check out MapProxy. It is an open source proxy for geospatial data. It caches, accelerates and transforms data from existing map services and serves any desktop or web GIS client.

enter image description here

It reads data from:

  • WMS sources (1.0.0–1.3.0)
  • TMS/WMTS sources Mapserver and Mapnik configurations
  • any TileCache, Google Maps or Bing compatible source

It can also

  • cache data on filesystem, as MBTiles or inside CouchDB
  • reproject WMS sources to other SRS
  • store identical images just once (e.g. ocean tiles)
  • embed watermark in tiles
  • merge multiple sources
  • limit sources to polygon areas

MapProxy is also a full compliant WMS server and supports any WMS client (desktop and web). It supports WMS responses from cached data:

  • merges tiles and scales or reprojects images
  • accelerates existing WMS 10 to 100 times

and cascaded WMS services:

  • multi-threaded requests
  • merges multiple sources
  • adds transparency to opaque layers
  • reprojects on-the-fly

It also supports combinations of cached and cascaded layers:

  • respond to GetLegendGraphic requests
  • cascade GetFeatureInfo requests with optional XSL transformations
  • limit sources to polygon areas
  • convert WMS versions and image formats
  • support for non-image raster data like DEMs

You can also pre-generate the tile cache for better performance.

It also comes with a flexible authorization API that allows you to add fine-grained control over services and layers.

  • 2
    This is the best answer to the question, but should be taken with the recommendation that you should never do this on external services that you do not control - at the very least it's a performance nightmare, and more typically it's against terms of service and will result in your service being suspended.
    – tmcw
    Commented Oct 25, 2012 at 15:27

Your creating a bottleneck by proxying external services through your server. Also going to slow down the performance of your web map by forcing one server to process all requests.

The only reason I could maybe see a reason for this is for security. But even then your better off securing the endpoint instead and passing a token along.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.