Le support du WFS est assuré dans l'API étendue.
L'ajout d'une couche WFS s'effectue de la façon suivante :
maCarte.getMap().addLayer(
"WFS",
nom_de_la_couche,
"url_du_wfs",
parametres_du_wfs,
options_couche
);
styleMap: new OpenLayers.StyleMap({
strokeColor: "black",
strokeWidth: 2,
strokeOpacity: 0.5,
fillOpacity: 0.2
fillColor: "black"
}
Quoiqu'il en soit il n'y a pas de différence notable entre l'utilisation OpenLayers.Layer.WFS et celle de Geoportal.Layer.WFS excepté pour la gestion de la gestion des droits des données géographiques qui sera :
GeoRM: Geoportal.GeoRMHandler.addKey(
gGEOPORTALRIGHTSMANAGEMENT.apiKey,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.url,
gGEOPORTALRIGHTSMANAGEMENT[gGEOPORTALRIGHTSMANAGEMENT.apiKey].tokenServer.ttl,
maCarte)
Tout d'abord, relire cette FAQ peut aider à comprendre !
Voici quelques résultats de tests effectués sur un service WFS :
| Taille de la réponse GetFeature | Nombre d'objets | Chargement |
| 1.8Mo | 205 | échoué |
| 564Ko | 699 | réussi |
| 483Ko | 36 | réussi |
| 283Ko | 406 | réussi |
| 89Ko | 89 | réussi |
Les diverses limitations sont une combinaison de plusieurs facteurs :
Finalement, que faire :

La capture d'écran ci-dessus repose sur le fragment de code suivant :
function overRiver(feature) {
if (feature) {
if (!feature.popup) {
var ll= feature.geometry.getBounds().getCenterLonLat();
var me= maCarte.getMap().getExtent();
var inView= me.containsLonLat(ll,false);
if (!inView) {//hors de la visualisation
ll= me.getCenterLonLat();
}
feature.popup= new OpenLayers.Popup.FramedCloud(
"chicken",
ll,
null,
// on affiche l'attribut 'NAME' dans l'info-bulle :
"<div style='font-size:.75em'>" + feature.attributes['NAME']+ "</div>",
null,
false);
}
if (feature.popup) {
maCarte.getMap().addPopup(feature.popup,true);
}
}
}
function outRiver(feature) {
if (feature && feature.popup) {
feature.popup.destroy();
feature.popup= null;
}
}
...
var rwbodyStyle= new OpenLayers.StyleMap({
"default": new OpenLayers.Style({
strokeColor:'#0000ff',
strokeWidth:3
}),
"select": new OpenLayers.Style({
strokeColor:'#3399ff',
strokeWidth:3
})
});
var sandre= maCarte.getMap().addLayer(
"WFS",
{
'sandre.layer.name':
{
'de':"Wasser kurses",
'en':"Water courses",
'es':"Cursos de agua",
'fr':"Cours d'eau",
'it':"Corsi d'acqua"
}
},
"http://services.sandre.eaufrance.fr/geo/zonage-shp?",
{
typename: 'RWBODY'
},
{
projection: 'EPSG:4326',
units:'degrees',
// maxExtent est exprimée en EPSG:4326 :
maxExtent: new OpenLayers.Bounds(-180,-90,180,90),
minZoomLevel:10,
maxZoomLevel:15,
isBaseLayer: false,
visibility: false,
originators: [
{
logo:'sandre',
pictureUrl: 'logo_sandre.gif',
url: 'http://sandre.eaufrance.fr'
}
],
extractAttributes:true,
styleMap:rwbodyStyle,
onSelect: overRiver,
onUnselect: outRiver,
hover: true
}
);