Latauspalvelut toteutetaan tyypillisesti OGC:n Web Feature Service (WFS) -standardilla. Latauspalvelut (WFS) ovat ns. kyselypalveluita, jotka mahdollistavat kyselyiden tekemisen halutuin hakuehdoin.
Tyypillinen prosessi paikkatietojen hakemiseksi kyselypalvelun WFS-palvelurajapinnasta koostuu seuraavista vaiheista (silloin kun asiakassovellus ei etukäteen tunne palvelun yksityiskohtia):
- Asiakassovellus kysyy rajapintapalvelun metatietoja (GetCapabilities -kysely). Esimerkki: "http://geodata.tampere.fi/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities". Vastauksesta käy ilmi mm. palvelun tukemat kyselyoperaatiot ja tarjolla olevien kohdeluokkien nimet ja kattavuusalueet.
- Asiakassovellus kysyy valitsemansa kohdeluokan tietomallin (DescribeFeatureType -kysely). Esimerkki: "http://geodata.tampere.fi/geoserver/ows?service=WFS&version=1.0.0&request=DescribeFeatureType&typeName=hallinnolliset_yksikot:KH_TILASTO". Vastauksesta selviää kysytyn kohdeluokan sisältämät ominaisuudet, niiden tietotyypit ja pakollisuus/toistuvuusmääreet.
- Saamiensa palvelun ja kohdeluokkien tietojen perusteella asiakassovellus pystyy muodostamaan paikkatietokyselyn ja lähettämään sen rajapintapalveluun (GetFeature -kysely). Esimerkki: "http://geodata.tampere.fi/geoserver/ows?service=WFS&version=2.0.0&request=GetFeature&typeName=hallinnolliset_yksikot:KH_TILASTO". Rajapintapalvelu prosessoi kyselyn ja palauttaa vastauksen (GML-muotoinen data) tai mahdollisen virheviestin, jos prosessointi syystä tai toisesta epäonnistui.
Haluttu tietosisältö voidaan rajata tarkasti rajauskielen avulla ilmaistavilla kyselykohtaisilla parametreilla. Kohdekyselyllä (GetFeature) palautetaan rajauksen mukaisten kohteiden tiedot kohdetyypin skeeman mukaisessa XML-rakenteessa. Kyselyt perustuvat W3C:n XPath -kieleen. Kyselyt voidaan välittää joko KVP- (nimi-arvo-pari) tai XML -koodattuina käyttäen HTTP:n GET ja POST -metodeja. Kyselyjen rajaamisessa voidaan käyttää, joko CQL -kyselykieltä (Common Query Language) tai OGC:n spesifikaatiota Filter Encoding. WFS-kysely palauttaa XML-pohjaisen GML-muotoon koodatun paluusanoman, jonka jatkokäsittely on helppoa.
Esimerkki CQL-kyselystä
Haetaan katuosoite -tuotteesta haluttu osoite ja numero:
http://geodata.tampere.fi/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=osoitteet:ONK_NMR_MVIEW_GSVIEW&cql_filter=(KADUNNIMI='Vasamakatu' AND NUMERO=2).
Esimerkki Filter Encoding -kyselystä
Haku kadunnimellä
HTML XML POST request:
<wfs:GetFeature service="WFS" version="1.1.0″
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<wfs:Query typeName="osoitteet:ONK_NMR_MVIEW_GSVIEW">
<ogc:Filter>
<PropertyIsEqualTo>
<PropertyName>KADUNNIMI</PropertyName>
<Literal>Vasamakatu</Literal>
</PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>
Esimerkki katuosoitteen haku halutussa koordinaatistossa
Hakulauseeseen annetaan parametri srsName ja sille halutun koordinaatiston EPSG-koodi (ETRS-TM35FIN = EPSG:3067) eli &srsName=EPSG:3067.
Esimerkki: http://geodata.tampere.fi/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=osoitteet:ONK_NMR_MVIEW_GSVIEW&cql_filter=(KADUNNIMI='Vasamakatu' AND NUMERO=2)&srsName=EPSG:3067.
Esimerkki katuosoitteen haku halutussa koordinaatistossa ja GeoJSON formaatissa
Hakulauseeseen annetaan parametri &srsName ja sille halutun koordinaatiston EPSG-koodi (ETRS-TM35FIN = EPSG:3067) eli &srsName=EPSG:3067. GeoJSON tulosformaatti määritellään parametrilla &outputFormat=application/json.
Esimerkki: http://geodata.tampere.fi/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=osoitteet:ONK_NMR_MVIEW_GSVIEW&cql_filter=(KADUNNIMI='Vasamakatu' AND NUMERO=2)&srsName=EPSG:3067&outputFormat=application/json.
WFS -pyyntöjen mahdolliset tulosformaatit Geoserver palvelimella
http://docs.geoserver.org/stable/en/user/services/wfs/outputformats.html
WMS -pyyntöjen mahdolliset tulosformaatit Geoserver palvelimella
http://docs.geoserver.org/stable/en/user/services/wms/outputformats.html