5.5. Use MapServer as a WMS client#
Another exciting feature of MapServer is its ability to use layers provided by other map servers as its data source. In this case, the MapServer application becomes a WMS (WFS) client. MapServer can also share (or serve) layers in MapFile to other map servers. This makes the application a WMS (WFS) server. What is WMS or WFS? These are the Web-based Interoperability Services specification, released by the Open Geospatial Alliance (OGC). WMS stands for Web map service, and WFS stands for Web feature service.
The difference between the two specifications, in simple terms, is that WMS uses web raster formats (PNG, GIF, JPEG) to share layers, while WFS uses the Geographic Markup Language GML. The third commonly used OGC interoperability specification is the Web Coverage Service Specification (WCS), which MapServer provides server-side support only. If you need more information about WMS, WFS and WCS, you can find OGC Implementation Specifications or OGC Abstract Specifications on the OGC official website. MapServer’s website also has some pages related to these specifications.
This example shows you how to add a WMS layer to your MapFile.
The following is the Mapfile used in this example
1MAP 2 IMAGETYPE "PNG" 3 EXTENT -180 -90 180 90 4 SIZE 600 300 5 SHAPEPATH "/gdata" 6 IMAGECOLOR 255 255 255 7 PROJECTION 8 "init=epsg:4326" 9 END 10 LAYER 11 NAME "basemap" 12 TYPE RASTER 13 OFFSITE 0 0 0 14 STATUS OFF 15 CONNECTIONTYPE WMS 16 CONNECTION "http://webgis.pub/cgi-bin/mapserv?map=/owg/mfba.map" 17 METADATA 18 "wms_srs" "EPSG:4326" 19 "wms_name" "wcountry,wriver,wroads" 20 "wms_server_version" "1.1.1" 21 "wms_format" "image/png" 22 END 23 PROJECTION 24 "init=epsg:4326" 25 END 26 END 27END
In the above resource, WMS needs to start with
In addition, as a client, there is no need to configure WEB in the Mapfile; it is required on the server.
Add WMS layer to Mapfile
The file changes are as follows:
Definition of MapServer#
Let’s look at the WMS layer:
LAYER, marking the beginning of the WMS layer object.
NAME modis_jpl, the layer identifier.
TYPE RASTER, since this
WMS layer is an image, use the raster layer type.
OFFSITE 0 0 0 ,
ignore black background color
STATUS OFF, this layer is turned off
CONNECTIONTYPE WMS Input layer connection use. Defaults
to local .
If we had to be explicit, we would add all other vector and raster layers locally in our MapFile CONNECTIONTYPE. Instead, we only define connection types that are external. WMS is an external data layer from other map servers.
the connection string that allows us to “get” data from another server.
In the case of a WMS connection, this is a URL. If we were using a
PostGIS database, this would be an SQL statement. Note that the string
in your MapFile is on a single line.
METADATA, marks the metadata object of our WMS layer. MapServer uses
the parameters defined by this object, along with the above connection
parameters, to form valid WMS requests to the WMS server.
"wms_srs" "epsg:4326" , WMS projection. Sometimes WMS servers
support multiple projections. If that’s the case, you’ll probably want
to ask for your output projection (
EPSG:2163) map. Unfortunately,
external WMS servers do not support this kind of projection.
"wms_name" "modis" , the name of the WMS layer to add. It’s like
adding the parameter
"wms_server_version" "1.1.1" , the version of the server for the WMS
version. More supported versions can be viewed.
"wms_format" "image/jpeg" , the image format we expect to receive
from the WMS server. You can try
image/png or other allowed values.
To learn more about adding WMS layers to your application, visit the WMS client how to record.
In addition to adding WMS layer objects, there is also the next new object for the map. This is the Web object. There are two parameters in the Web object:
IMAGEPATH '/data/tmp/' , the local absolute path to the temporary
directory for web access. The user running the web server process should
be able to write to this directory. Make sure the path contains the last
/ ). (Your IMAGEPATH might look like this:
IMAGEURL '/tmp/' , which is how IMAGEPATH appears relative to the
web server’s root directory. If we had to enter the full URL, it would
be “http://terrasip.gis.umn.edu/tmp/” . Make sure the path contains the
last slash (
Finally, a new parameter has been added to the
. This is the identifier of the map object. MapServer creates and dumps
tmp directory for all images using this prefix. It’s not really
needed in this example, but it won’t have any bad effects either.
If you want to share your data layer to other map servers, you need to
METADATA object to your
MAP object, and add
object to each layer object you want to share with everyone. All WMS
layers added from another server are automatically cascaded and made
available to others (contagious). For details on how to make your
MapServer application a WMS server, please read the WMS server
documentation carefully. In addition, in addition to the WMS service,
MapServer also supports the WFS service, you can check the documentation
to learn how to configure MapServer to implement a WFS server, or a WFS