In this primer we will demonstrate how to obtain a graps of a small set of data from a large datasets with the OGC Web Mapping Service (WMS) protocol. We will show that ordering images through WMS is just as easy as buying an ice cream.
Find a WMS server
Find a data web source that hosts a WMS server (go to an ice cream vendor). We will use the Shuttle Radar Topography Mission datasets hosted at the Woods Hole Institute THREDDS OPeNDAP server as example in this primer. THREDDS OPeNDAP server can be configured to serve WMS for orthogonal datasets with proper geographic information.
Request an overview of the content of a WMS server
Ask for what the server has to offer (see which flavours he has and which kind of cups). Ypu need to add the following mandatory <keyword,value> pairs to the base server url, separated by an &, e.g.: ?service=WMS&request=GetCapabilities
.
keyword |
value |
source |
---|---|---|
service |
WMS |
Mandatory WMS standard value |
request |
GetCapabilities |
Mandatory WMS standard value |
This procedure works for all subsequent <keyword,value> pairs in this primer:
http://geoport.whoi.edu/thredds/wms/bathy/srtm30plus_v6?service=WMS&request=GetCapabilities
This url will return an xml file that contains an inventory of the available datasets. (You can also request availabe datasets for one WMS version only by appending the optional version
keyword.)
Inspect the overview of the content of a WMS server
Look at what versions of WMS the server has to offer (check whether the ice cream is fresh). For each version there is a
tag WCS_Capabilities
with attribute version, e,.g.
<WMS_Capabilities version="1.3.0" ... > <Capability> <Request> ... <GetMap> <Format>image/jpeg</Format> <Format>image/png</Format> <Format>application/vnd.google-earth.kmz</Format> <Format>image/gif</Format> ... </GetMap> ... </WMS_Capabilities>
For each version a number of datasets is hosted. Select one dataset (ice cream flavour) from the list through the Layer
tag. The name of the dataest is the name
tag, in this case there is only topo
.
<Layer> ... <CRS>EPSG:4326</CRS> <CRS>CRS:84</CRS> <CRS>EPSG:41001</CRS> <CRS>EPSG:3857</CRS> <CRS>EPSG:27700</CRS> <CRS>EPSG:3408</CRS> <CRS>EPSG:3409</CRS> <CRS>EPSG:32661</CRS> <CRS>EPSG:32761</CRS> ... <Layer> <Title>UCSD SRTM30_v6 Global DEM (30 sec)</Title> <Layer queryable="1"> <Name>topo</Name> ... <Style><Name>boxfill/redblue </Name>... <Style><Name>boxfill/redblue </Name>... <Style><Name>boxfill/alg </Name>... <Style><Name>boxfill/ncview </Name>... <Style><Name>boxfill/greyscale </Name>... <Style><Name>boxfill/alg2 </Name>... <Style><Name>boxfill/occam </Name>... <Style><Name>boxfill/rainbow </Name>... <Style><Name>boxfill/sst_36 </Name>... <Style><Name>boxfill/ferret </Name>... <Style><Name>boxfill/occam_pastel-30</Name> ... </Layer> </Layer> </Layer>
From the above xml extract we will can distill all values necesarry to request an image.
Request some WMS server content
Now we can actually get a subset from the dataset want by using request=GetMap
instead of the request=GetCapabilities
we used above to obtain the meta-data (order ice cream). The following <keyword,value> pairs are mandatory for the Getmap
request.
keyword |
value |
source |
---|---|---|
service |
WMS |
Mandatory WMS standard value |
request |
GetMap |
Mandatory WMS standard value |
version |
1.3.0 |
One of the mandatory WMS standard values returned by returned by the |
BBOX |
0,50,10,55 |
bounding box: min(longitude),min(latitude),max(longitude),max(latitude) |
layers |
topo |
WMS counterpart of WCS |
format |
image/png |
One of the mandatory WMS standard values by returned by the |
CRS |
EPSG%3A4326 |
One of the server-defined values by returned by the |
width |
800 |
width of the image in number of pixels. The xml file show a max |
height |
600 |
height of the image in number of pixels |
styles |
boxfill/redblue |
One of the server-defined values by returned by the |
Summary: correct WMS request for an available formats is given below. You can copy it into your browser to obtain the image. We chose the same bounding boxes as in the OPeNDAP primer that access these same datasets via netCDF libraries in Matlab, python or R. We discussed the pros and cons of WCS vs OPeNDAP in a FOSS4G paper.
http://geoport.whoi.edu/thredds/wms/bathy/smith_sandwell_v11?service=WMS &version=1.3.0 &request=GetMap &bbox=0,50,10,55 &layers=topo &format=image/png &crs=EPSG%3A4326 &width=800 &height=600 &styles=boxfill/redblue
Some additional, optional WMS keywords are:
keyword |
value |
source |
---|---|---|
TRANSPARENT |
True |
Background transparency of map, valid for encoding format that can handle transparency, e.g. png. |
time |
yyyy-mm-ddTHH:MM:SSZ |
ISO time notation. Only when data are time-dependent. When not specified for data that is time-depended, the latest time is returned. Time is not implemented in most GIS-minded software packages yet. For an example on how to specify time requests see MapServer . For an example of time implementation see the ADAGUC WMS server and WMS web client. |
elevation |
number |
elevation of layer desired |
BGCOLOR |
|
background color of map |
There are no images attached to this page. |
More
WMS offers more than described in this primer. It it also possible to
request a legend for a specific style, and to request the data at one pixel
an image you requested. For these more sophisticated options, please refer to the full WMS specifications.