In this primer we will demonstrate how to obtain a small set of data from a large datasets with the OGC Web Coverage Service (WFS) protocol. We will show that ordering data through WFS is just as easy as buying an ice cream.
Find a WFS server
Find a data web source that hosts a WFS server (go to an ice cream vendor). We will use the Marbound datasets hosted at the Flanders Marine Institute (VLIZ) as example in this primer. There are several WFS services to be found, for a selection follow the link. If you have more send them to the OpenEarth team.
Request an overview of the content of a WFS server
Ask for what the server has to offer (see which flavours he has and which kind of cups). You need to add the following mandatory <keyword,value> pairs to the base server url, separated by an &, e.g.: ?service=WFS&request=GetCapabilities
.
keyword | value | source |
---|---|---|
service | WFS | Mandatory WFS standard value |
request | GetCapabilities | Mandatory WFS standard value |
This procedure works for all subsequent <keyword,value> pairs in this primer:http://geo.vliz.be/geoserver/wfs?service=WFS&request=GetCapabilities
This url will return an xml file that contains an inventory of the available datasets. (You can also request available datasets for one WFS version only by appending the optional version
keyword.)
Inspect the overview of the content of a WFS server
Look at what versions of WFS the server has to offer (check whether the ice cream is fresh). For each version there is a
tag WFS_Capabilities
with attribute version, e,.g.
<wfs:WFS_Capabilities version="1.1.0" ...> ... </wfs:WFS_Capabilities>
In this case the VLIZ hosts a lot of dataset. The GetCapabilities request gives a complete list of data. Select a dataset (ice cream flavour) from the list through the FeatureType
tag. The name of the dataest is the name
tag, for instance World:worldcities
.
<FeatureType> <Name>World:worldcities</Name> <Title>World Cities</Title> <Abstract>World Cities represents the locations of major cities of the world.</Abstract> <ows:Keywords> <ows:Keyword>worldcities</ows:Keyword> <ows:Keyword>World</ows:Keyword> </ows:Keywords> <DefaultSRS>urn:x-ogc:def:crs:EPSG:4326</DefaultSRS> <ows:WGS84BoundingBox> <ows:LowerCorner>-176.152 \-54.792</ows:LowerCorner> <ows:UpperCorner>179.222 78.2</ows:UpperCorner> </ows:WGS84BoundingBox> </FeatureType>
Request some content of a WFS server
Now we can actually get a subset from the dataset want by using request=GetFeature
instead of the request=GetCapabilities
we used above to obtain the meta-data (order ice cream). The following <keyword,value> pairs are mandatory.
keyword | value | source |
---|---|---|
service | WFS | Mandatory WFS standard value |
request | GetFeature | Mandatory WFS standard value |
version | 1.0.0 | One of the mandatory WFS standard values returned by returned by the |
typename | value inside one of the <FeatureType><Name></Name><FeatureType> tags. | One of the features returned by returned by the |
BBOX (optional) | 0,50,10,55 | bounding box: min(longitude),min(latitude),max(longitude),max(latitude) . This is optional and return only the part of {{typename }} that is inside the bounding box. WFS is know to be a hotchpotch for coordinate order, this particular server configuration seems to prefer lat-lon swapped: 50,0,55,10). |
Filter (optional) |
| It is possible to add filters to a request, using the description returned by the |
http://geo.vliz.be/geoserver/wfs?service=WFS &request=GetFeature &typeName=World:worldcities &bbox=51,4,52,5
or
http://geo.vliz.be/geoserver/wfs?service=WFS &request=GetFeature &typeName=World:worldcities &filter=<PropertyIsEqualTo><PropertyName>World:city_name</PropertyName><Literal>Amsterdam</Literal></PropertyIsEqualTo>
Actually various types of filters can be combined. For more information visit the user manual of OGC WFS.
WFS features can be visualised and filtered very easy with QuantumGIS, just paste http://geo.vliz.be:80/geoserver/wfs?service=WFS in the WFS service menu of QuantumGIS.
See also: geoserver WFS, opengeo WFS
Accessing WFS by Python OWSLib library
# carry out necessary import (to install OWSLib, pip install owslib) from owslib import wfs,wms # give URL, this is the URL of Deltares Data Portal url = 'http://deltaresdata.openearth.nl/geoserver/ows?' # construct wfs awfs = wfs.WebFeatureService(url,version='1.0.0') # print available layers for layer in awfs.contents.keys(): print layer
Off course more information can be retrieved. Basic documentation on OWSLib can be found on geopython page and more detailed on the doctest section of this github repository.
There are no images attached to this page. |