banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 09 December 2010 14:42

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

[OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour à tous,

je souhaiterai afficher avec OpenLayers, une layer contenu dans un mapfile en WFS.
J'ai lu quelque fils de discussion sur ce forum évoquant des soucis WFS avec du Geoserver, mais cela ne m'a pas vraiment aidé.
Le but ultime étant de gérer par les listeners, l'enregistrement SQL des WFS.
Cependant, je n'y arrive déjà pas à afficher une layer en WFS.
Ci-dessous le code. Je fais appel à 2 layers, un en WMS et un autre en WFS.
L'appel seul du WMS se passe sans souci.
Quand j'appelle les 2, rien ne s'affiche sur ma carte.
J'ai suivi le tuto de geotribu, mais comme cela est évoqué dans les commentaires déposés sur cet article, Openlayers.Layer.WFS ne fonctionne pas. J'ai le message d'erreur "OpenLayers.Layer.WFS isn't a constructor ...". J'ai employé Vector à la place, mais sans savoir précisément le rôle de chaque paramètre.

Code:

map = new OpenLayers.Map('map', {
        scales: [6400000, 3200000, 1600000, 800000, 400000, 200000, 100000, 50000, 25000, 15000, 10000, 5000, 3000],
        minScale: 6400000,
        maxScale: 3000,
        projection: new OpenLayers.Projection("EPSG:27572"),
        units: 'm',
        maxExtent: new OpenLayers.Bounds(paramXmin,paramYmin,paramXmax,paramYmax),
        controls: []
    });

map.addControl(new OpenLayers.Control.PanZoomBar()); //affiche la barre de niveau de zoom & de déplacement
    //affiche les coordonnées lors du survol de la souris
    map.addControl (new OpenLayers.Control.MousePosition({prefix:"Position souris : X : ",suffix:"m",separator:"m, Y : ",numDigits : 2, div: document.getElementById("positionSouris")}));
    map.addControl(new OpenLayers.Control.Navigation());//apporte les fonctionnalités Double clic, roulette avant/arrière, shift + rectangle de sélection
    
    map.addControl(new OpenLayers.Control.ScaleBar({'prefix':"Barre d'échelle : ","title":"TITRE",div:document.getElementById("scaleBar"),abbreviateLabel: true}));
    //map.addControl(new OpenLayers.Control.DrawFeature(wmsLayerCommunes,OpenLayers.Handler.Polygon,{'displayClass': 'olControlDrawFeaturePolygon'}));
alert('avant addlayer');
    
    var wmsBaseLayer = new OpenLayers.Layer.WMS("Scan25", wmsMapFile,
              {
               srs: 'EPSG:27572',
               width: '600',height: '450',
               layers: 'scan25',
               format: 'image/jpeg',
               "onMapResize":function() {alert('map resize dans wmsBaseLayer');},
               "loadstart":function(){ChargementCouche();},
                "loadend":function() {ChargementCoucheTerminee();}
              },
              {isBaseLayer: true,visibility:true}
            );

var wfsLayerParcellesCulturales = new OpenLayers.Layer.Vector(
        "Parcelles culturales",
        {
             strategies: [new OpenLayers.Strategy.BBOX()],
            projection: new OpenLayers.Projection("EPSG:27572"),
            protocol: new OpenLayers.Protocol.WFS({
                srsName: "EPSG:27572",
                url: "http://IPduServeur/cgi-bin/wfs?map=CheminVersMonMapFile/sc_test.map&",
                featureType: "parcelles_poly"
            })
        }
    );

map.addLayers([wmsBaseLayer,wfsLayerParcellesCulturales]);

Voici le mapfile

Code:

#
# Start of map file
#
# $Id: gmap75.map,v 1.21 2001/05/17 19:19:16 daniel Exp $
#
NAME sc_parcelles
STATUS ON
SIZE 600 450
SYMBOLSET ../etc/symbols.sym
EXTENT 0 2288000 801000 2681000
UNITS METERS
SHAPEPATH "/usr/share/carto/"
IMAGECOLOR 255 255 255
FONTSET ../etc/fonts.txt
IMAGETYPE jpeg

 OUTPUTFORMAT
  NAME jpeg
  DRIVER "GD/JPEG"
  MIMETYPE "image/jpeg"
  IMAGEMODE RGB
  EXTENSION "jpg"
  FORMATOPTION "QUALITY=80"
 END

#
# Start of web interface definition
#
WEB
  MINSCALE 500
  MAXSCALE 500000
#
# On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root 
# of the drive where the .MAP file resides.
#
    METADATA
        "wfs_title"            "WFS"
        "wfs_onlineresource"   "http://IPserveur/cgi-bin/wfs?"  ## Recommended
        "wfs_srs"              "epsg:27572"  ## Recommended
        "wfs_abstract"         "This describes my WFS service." ## Recommended
    END
  IMAGEPATH "/var/www/tmp/" 
  IMAGEURL "/tmp/"
  LOG "/tmp/gmap.log"
END

#
# Start of reference map
#
REFERENCE
   IMAGE images/aisne.gif
   EXTENT 625000 2400000 750000 2600000
   STATUS ON
  COLOR -1 -1 -1
  OUTLINECOLOR 255 0 0
  SIZE 120 90      
END

#
# Start of legend
#
LEGEND
  KEYSIZE 18 12
  LABEL
    TYPE BITMAP
    SIZE MEDIUM
    COLOR 0 0 89
  END
  STATUS ON
  TEMPLATE "legend.html"
END

#
# Start of scalebar
#
SCALEBAR
  IMAGECOLOR 255 255 255
  LABEL
    COLOR 0 0 0 
    SIZE SMALL
  END
  SIZE 200 5
  COLOR 255 255 255
  BACKGROUNDCOLOR 0 0 0
  OUTLINECOLOR 0 0 0
  UNITS kilometers
  INTERVALS 4
  STATUS ON
END


QUERYMAP
  STYLE HILITE
  COLOR 255 255 0
END


PROJECTION
  "init=epsg:27572" ##recommended
END  

#
# Start of layer definitions
#


LAYER
  NAME "parcelles_poly"
  METADATA
    "DESCRIPTION" "Parcelles culturales"
    "RESULT_FIELDS" "idparcelleculturale idexploitation nom millesime"
    "FILTERING" "idexploitation millesime"
      "wfs_title"     "parcelles_poly"
    "wfs_srs"       "EPSG:27572"
    "gml_include_items"     "all" ## Optional (serves all attributes for layer)
    "gml_featureid"         "ID" ## REQUIRED
    #"LEGENDE "parcelles_poly"
    #WMS_SRS       "EPSG:27572"
    #WMS_NAME      "parcelles_poly"
    #WMS_ABSTRACT "Parcelles poly"
  END
  DUMP TRUE
  TYPE POLYGON
  STATUS ON
  CONNECTIONTYPE postgis
  CONNECTION "host=*** dbname=*** user=*** password=***"
  DATA "geom from ***"
  FILTER "idexploitation = *** AND millesime=****"
  LABELITEM "nom"
  SIZEUNITS pixels
  CLASS
    NAME "Parcelles"
    OUTLINECOLOR 255 255 0
    COLOR 255 102 0
    LABEL
      COLOR  0 0 200 
      FONT arial-italic
      TYPE truetype
      SIZE 8
    BACKGROUNDCOLOR 255 255 255
      POSITION cr            
      PARTIALS TRUE
    MAXSIZE 20
    MINSIZE 4
      #OUTLINECOLOR 255 255 255
    END
    TEMPLATE "ttt_query.html"
  END
TRANSPARENCY 20
    PROJECTION
      "init=epsg:27572" ##recommended
    END  
END # layer

#LAYER
#  NAME "parcelles_poly_outline"

END # Map File

N'hésitez pas si j'ai oublié de vous donner des informations.


Je vous remercie d'avance de vos aides/suggestions.

Hors ligne

 

#2 Thu 09 December 2010 15:01

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

Rapidement : pour reprojeter des données en lambert 2 étendue (new OpenLayers.Projection("EPSG:27572"), il faut au moins la bibliothèque proj4js.js dans le fichier html. Est ce le cas ?

Il faut aussi s'assurer que l'hôte (dans l'url) lors de la l'appel de la page html soit identique que celui de l'url du WFS.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Thu 09 December 2010 15:02

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

PS : vérifie avec Firebug si les données sont bien chargées : http://georezo.net/wiki/main/logiciels/ … rs/firebug

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#4 Thu 09 December 2010 15:58

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour Yves et merci pour les pistes. Je vais exploiter cela.

Je n'avais pas le fichier proj4js.js inclus. Je viens de le télécharger. Je vais essayer.
Sinon, quand j'appele mon fichier html (enfin php), j'appelais le nom d'hôte du serveur, et dans mon code javascript, c'était l'adresse ip du serveur.
J'ai appelé mon fichier html (enfin pgp) avec l'adresse ip, mais cela ne change rien.

J'ai toujours mon firebug activé, mais je n'ai aucune erreur en fait.
Et en utilisant la fonction "inspecter", je vois que dans mon div devant contenir la carte, il n'y a aucune tuile !

C'est grave docteur Yves ?

Je vais include proj4js.js, je poste à nouveau juste après avoir essayé.

Hors ligne

 

#5 Thu 09 December 2010 16:46

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Alors, j'ai téléchargé le zip de proj4js
J'ai extrait le fichier proj4js.js du répertoire lib, pour le mettre sur mon serveur, et j'y fais appel dans mon code.
Cela me génère des erreurs, comme le fait qu'il manque les fichiers"defs/EPSG27572.js" et "projCode/lcc.js".
J'ai regardé dans le zip de proj4js que j'ai téléchargé, il n'existe pas de EPSG27572.
Je me pose aussi la question suivante :
Suis-je réellement obligé d'utiliser le paramètre "projection" dans mon constructeur OpenLayers.Layer.Vector ?

En fait, j'ai utilisé plusieurs fois new OpenLayers.Projection("EPSG:27572") pour mon objet map dans d'autres codes, et je n'avais pas eu de souci spécifique.

En fait j'ai du 27572, et je reste toujours en 27572.


J'ai testé mon wfs sur quantum GIS en ajoutant un serveur WFS et cela fonctionne.
Il y a des choses que je ne dois pas bien faire dans mon code.

Hors ligne

 

#6 Thu 09 December 2010 17:29

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonsoir,

Ok si tu utilises la projection lambert 2 étendue dans toutes tes couches tu n'as qu'à la définir dans l'objet map etpifetout comme dirait l'autre.

concernant firebug, dans ton code tu rajoutes ceci :

Code:

console.log(map)
console.log(vector)

Et tu regardes le contenu de ton objet vector (est ce que les donnés sont stockés ? etc.)

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#7 Thu 09 December 2010 18:39

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 947
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonsoir,

J'ai regardé dans le zip de proj4js que j'ai téléchargé, il n'existe pas de EPSG27572.


Pour le récupérer, il faut aller sur http://spatialreference.org, chercher 27572 et cliquer sur le résultat. Vous verrez "Proj4js format", vous cliquez dessus puis enregistrez la page dans un fichier texte nommé EPSG27572.js et le placez dans le répertoire defs.

Cordialement

ThomasG

Hors ligne

 

#8 Fri 10 December 2010 08:43

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

ThomasG a écrit:

Bonsoir,

J'ai regardé dans le zip de proj4js que j'ai téléchargé, il n'existe pas de EPSG27572.


Pour le récupérer, il faut aller sur http://spatialreference.org, chercher 27572 et cliquer sur le résultat. Vous verrez "Proj4js format", vous cliquez dessus puis enregistrez la page dans un fichier texte nommé EPSG27572.js et le placez dans le répertoire defs.

Cordialement

ThomasG


Les fichiers sont égtalement dans le trac du projet ainsi que d'autres projection française.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#9 Fri 10 December 2010 14:15

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour à vous 2,

alors le console.log(map) donne un bon résultat :
Object { tileSize=w=256,h=256, maxExtent=left-bottom=(630000,2410000) right-top=(750000,2550000), more...}

par contre, le consol.log(wfsLayerParcellesCulturales) donne le résultat :
undefined

Après avoir fait des alert avant et après la déclaration du    -->  new OpenLayers.Layer.Vector

J'ai le "alert" avant mais le "alert" après ne s'affiche pas, l'exécution doit s'arrêter.
Mais dans ce cas, je devrai avoir une erreur non ? Hors, je n'en vois aucune dans ma console Firebug !
Etrange non ?


Merci pour la précision de l'EPSG27572.js
Faudrait-il que j'essaie de l'inclure et de retester ?

Merci d'avance.

Dernière modification par sigdu80 (Fri 10 December 2010 14:30)

Hors ligne

 

#10 Fri 10 December 2010 15:18

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

J'ai déclaré directement dans la console de firebug, la déclaration du layer WFS "wfsLayerParcellesCulturales".

J'obtiens le message d'erreur suivant :
"Unsupported WFS version: 1.0.0"


Pourtant, quand j'ai testé dans Quantum GIS, je n'ai eu aucun problème.
Même en ajoutant &SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature dans l'url dans la déclaration du layer, cela ne change rien.

Voici le début du fichier xml restitué quand j'ai fait le test pour savoir si l'on pouvait l'exploiter en tant que serveur WFS :

Code:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
- <WFS_Capabilities version="1.0.0" updateSequence="0" xmlns="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.0.0/WFS-capabilities.xsd">
- <!--  MapServer version 5.2.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS INPUT=EPPL7 INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE 
  --> 
- <Service>
  <Name>MapServer WFS</Name> 
  <Title>WFS Demo Server</Title> 
  <OnlineResource>http://xxx.xxx.xxx.xxx/cgi-bin/wfs?</OnlineResource> 
  </Service>

Dernière modification par sigdu80 (Fri 10 December 2010 15:30)

Hors ligne

 

#11 Fri 10 December 2010 15:37

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Peux tu essayer en définissant une version à 1.1.0 dans OpenLayers. Ce texte est renvoyé par le constructeur WFS d'OpenLayers :

Code:

16     OpenLayers.Protocol.WFS = function(options) {
17         options = OpenLayers.Util.applyDefaults(
18             options, OpenLayers.Protocol.WFS.DEFAULTS
19         );
20         var cls = OpenLayers.Protocol.WFS["v"+options.version.replace(/\./g, "_")];
21         if(!cls) {
22             throw "Unsupported WFS version: " + options.version;
23         }
24         return new cls(options);
25     };

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#12 Fri 10 December 2010 15:45

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Toujours directement dans la console Firebug, j'ai donc recollé l'appel du constructeur Vector, en précisant la version 1.1.0 :

Code:

wfsLayerParcellesCulturales = new OpenLayers.Layer.Vector(
        "Parcelles culturales",
        {
             strategies: [new OpenLayers.Strategy.BBOX()],
            //projection: new OpenLayers.Projection("EPSG:27572"),
            protocol: new OpenLayers.Protocol.WFS({
                //srsName: "EPSG:27572",
                version: "1.1.0",
                url: "http://IPduServeur/cgi-bin/wfs?SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&map=CheminVersLeMapfile/sc_test.map&",
                featureType: "parcelles_poly"
            })
        }
    );

//console.log(map);
console.log(wfsLayerParcellesCulturales);

Il me répond :
"Unsupported WFS version: 1.1.0"

Hors ligne

 

#13 Fri 10 December 2010 15:47

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Cette partie là ne sert à rien SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature car OpenLayers se charge de rajouter les bons paramètres.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#14 Fri 10 December 2010 15:52

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

C'est noté. Je l'ai enlevé.
J'ai toujours le même message d'erreur.

Normalement, en version 1.0.0, cela devrait fonctionner compte-tenu des précisions obtenues dans le fichier xml :

Code:

WFS_Capabilities version="1.0.0"

Qu'en penses-tu ?

Je récapitule si certains lecteurs souhaitent un résumé bref : le problème se situe dans l'objet OpenLayers.Protocol.WFS (message d'erreur : "Unsupported WFS version: 1.0.0") :

Code:

var tmpWFS = new OpenLayers.Protocol.WFS({
                //srsName: "EPSG:27572",
                version: "1.1.0",
                url: "http://IPduServeur/cgi-bin/wfs?map=CheminVersLeMapfile/sc_test.map&",
                featureType: "parcelles_poly"
});

Dernière modification par sigdu80 (Fri 10 December 2010 16:08)

Hors ligne

 

#15 Fri 10 December 2010 16:11

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

J'en pense qu'OpenLayers n'arrive pas à lire ou à comprendre ce que renvoie le serveur WFS. Probablement parce que l'objet WFS est mal instancié.

Il faudrait regarder plus en détail un ou 2 exemples d'OL sur l'utilisation de service WFS.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#16 Fri 10 December 2010 16:52

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Oui, je vais essayer de regarder des exemples d'utilisation sur le site d'openlayers, je n'aurai pas d'autres sites web ayant des exemples.

J'ai ajouté "wfs_version" "1.0.0" dans le metadata du bloc WEB et du bloc "LAYER" qui m'intéresse mais cela ne change rien.


Je répondrai dans les 1-2h qui viennent.
Merci en tous cas Yves pour ton aide.

Hors ligne

 

#17 Fri 10 December 2010 17:48

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Je me demandais s'il n'y avait pas un souci de communication entre mon mapfile et l'appel de mon layer en mode WFS.
Mais j'ai recopié la déclaration WFS d'un exemple provenant du site officiel d'openlayers directement dans la console firebug :
http://openlayers.org/dev/examples/wfs-filter.html

Code:

var jessaie= new OpenLayers.Protocol.WFS({
                    url:  "http://demo.opengeo.org/geoserver/wfs",
                    featureType: "tasmania_roads",
                    featureNS: "http://www.openplans.org/topp",
                });

et j'obtiens le même message d'erreur :

"Unsupported WFS version: 1.0.0"


Étrange non ?

Dernière modification par sigdu80 (Fri 10 December 2010 17:55)

Hors ligne

 

#18 Fri 10 December 2010 18:14

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 947
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonsoir,

Vous cherchez à utiliser une déclaration WFS pour se connecter à Geoserver alors que vous utilisez Mapserver. Or il y a quelques différences dans les paramètres à passer.
Voir dans le topic chez nos "voisins" http://www.forumsig.org/showthread.php?t=28034

Cordialement

ThomasG

Hors ligne

 

#19 Fri 10 December 2010 18:35

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour Thomas G,

Il faut que je revérifie les paramètres dans mon mapfile alors. Désolé des étourderies, mais j'avoue être en train de patauger et de paniquer.
Je vais revoir cette partie.

Il s'agirait de paramètres non renseignés dans mon mapfile ?

Je repars avec un OpenLayers.Layer.WFS donc.
J'ai une réponse. Je n'ai plus de message d'erreur, et l'exécution du code javascript au chargement de mon document HTML se déroule correctement.
Je regarde dans la console firebug le GET de ce layer en mode WFS.

J'ai le message suivant :

Code:

Erreur d'analyse XML : aucun élément trouvé Emplacement : moz-nullprincipal:{ba88269f-0db8-486f-8d45-fa0bf68e8fa2} Numéro de ligne 1, Colonne 1 :

^

Les paramètres envoyés en GET sont :

Code:

BBOX    530666.75810662,2373000.06858,869333.24189338,2626999.93142
REQUEST    GetFeature
SERVICE    WFS
SRS    EPSG:27572
TYPENAME    parcelles_poly
VERSION    1.0.0
map    /var/www/xxx/include/mapfiles/editeur-cartographique/sc_test.map

J'ai collé cet url dans un navigateur internet, il me génère un fichier avec toutes les infos importantes.

Je peux décrire ce contenu si cela peut vous aiguiller. Dîtes moi.

Dernière modification par sigdu80 (Mon 13 December 2010 11:39)

Hors ligne

 

#20 Mon 13 December 2010 12:21

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour à tous,

mon wfs s'affiche correctement !
Et voilà ce que j'ai changé :

Code:

var tmpWFS = new OpenLayers.Layer.WFS
    (
    "Test", 
    "http://[b]IPduServeur[/b]/cgi-bin/wfs?map=CheminVersLeMapfile/sc_test.map&",
        {
        typename:'parcelles_poly'
        }
    ,
        {
        extractAttributes:true
        }
    );

Code:

var tmpWFS = new OpenLayers.Layer.WFS
    (
    "Test", 
    "http://[b]NomDHôteDuServeur[/b]/cgi-bin/wfs?map=CheminVersLeMapfile/sc_test.map&",
        {
        typename:'parcelles_poly'
        }
    ,
        {
        extractAttributes:true
        }
    );

Je n'avais fait que du WMS jusqu'à présent, et je mettais toujours l'adresse ip du serveur.
Le WFS doit respecter le Same Origin Policy a priori.
Et après coup, comme les données peuvent être potentiellement modifiées, cela se comprend.

Donc, il fallait entrer le nom d'hôte pour respecter cette règle (l'adresse ip ne convient pas).

Dîtes moi s'il manque des explications car qui sait, çà pourrait servir à d'autres personnes (même les experts Yves et ThomasG qui m'ont été d'une aide précieuse peuvent)

Merci à vos aides précieuses, je continue d'avancer, et sûrement à bientôt car j'aurai sûrement d'autres obstacles à franchir.

Dernière modification par sigdu80 (Mon 13 December 2010 18:55)

Hors ligne

 

#21 Mon 13 December 2010 13:41

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

Donc, il fallait entrer le nom d'hôte pour respecter cette règle (l'adresse ip ne convient pas).


Je n'avais peut être pas été assez précis dans ma réponse wink :

Il faut aussi s'assurer que l'hôte (dans l'url) lors de la l'appel de la page html soit identique que celui de l'url du WFS.


Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#22 Mon 13 December 2010 17:06

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

oui, c'est vrai !
En tous cas, avec le message d'erreur que j'avais, je me voyais bien mal embarqué !

Merci encore. A très bientôt sur les forums.

Hors ligne

 

#23 Mon 13 December 2010 18:28

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Par contre,

j'essaie d'avancer et j'ai besoin d'avoir les events sur les features, pour ensuite, les enregistrer moi-même dans ma base PostgreSQL.
Je vais devoir utiliser OpenLayers.Layer.Vector surtout qu'il est dit au sujet de OpenLayers.Layer.WFS (Deprecated.  To be removed in 3.0.  Instead use OpenLayers.Layer.Vector with a Protocol.WFS and one or more Strategies.).
Je sais, je ne sais pas ce que je veux :-)  C'est surtout que je navigue à vue.

Code:

wfs1 = new OpenLayers.Layer.Vector('Test', {
        strategies: [new OpenLayers.Strategy.BBOX()],
        protocol: new OpenLayers.Protocol.WFS({
            url: "http://Nom_d_hote_du_serveur/cgi-bin/wfs?map=/cheminVersLeMapfile/editeur-cartographique/sc_test.map&",
            featureType: 'parcelles_poly'//,
            //featureNS: 'http://mapserver.gis.umn.edu/mapserver'
        })
    });

J'ai mis bien le nom d'hôte, et contrairement à la dernière fois, je n'ai plus d'erreur, mais par contre, je ne vois pas mes features à l'écran.
Le GET issu du OpenLayers.Layer.Vector renvoie plein de résultats pourtant.


J'ai fait dans la console de firebug un :

Code:

document.write(wfs1);

L'objet existe bien.
Par contre, j'ai été voir le tableau features présent dans wfs1, il est vide ! Ce n'est pas normal non ?


Merci d'avance et bonne soirée.

Dernière modification par sigdu80 (Mon 13 December 2010 19:26)

Hors ligne

 

#24 Tue 14 December 2010 15:49

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

j'ai décommenté featureNS, et cela s'affiche à présent.

Maintenant, j'ai un autre problème (eh oui, c'est éternel !).
Ma map se charge bien, mes layers s'affichent bien aussi.
Ensuite, suite à un choix dans une liste déroulante, je veux ajouter (map.addLayer) un layer en wfs.
Et cela ne fonctionne pas correctement.

Il n'y a aucune erreur, mais je ne vois aucun traitement GET ou POST se produire.
par contre, si je fais un :

Code:

document.write(map);

Je regarde dans le paramètre "layers", ma layer wfs lancé après avoir fait un choix dans la liste déroulante est bien présente !

Dîtes moi si vous avez besoin d'une information supplémentaire pour m'aider.

Hors ligne

 

#25 Tue 14 December 2010 15:51

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

Peut-être que recharger la map résoudra le problème map.redraw().

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#26 Tue 14 December 2010 17:34

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Merci Yves.

il fallait effectivement utiliser une méthode redraw, mais plutôt sur la layer en fait.
Donc, sur l'évènement onchange de la liste déroulante, je fais un map.removeLayer() du layer précédemment chargé par cette liste déroulante, puis un :

Code:

layerEnCours.redraw();

Hors ligne

 

#27 Wed 15 December 2010 10:57

sigdu80
Participant actif
Date d'inscription: 2 Sep 2010
Messages: 112

Re: [OpenLayers, MapServer, WFS] Affichage layer WFS

Bonjour,

Le redraw sur la layer affichait bien la nouvelle layer à insérer. Mais dès que j'effectuais un zoom, il disparaissait.
J'ai utilisé à la place :

Code:

layerEnCours.refresh({force: true });

suite à au fil de discussion suivant :
//http://osgeo-org.1803224.n2.nabble.co … 17657.html

Une consommation mémoire sous IE était décelé mais semble avoir été résolu, il y a plusieurs mois.

Par contre, comme parfois je regènère ma carte sans recharger la page, je dois réappeler ma "layerEnCours".
Cela doit fonctionner uniquement quand map a fini de se charger je pense.
Mais je ne vois pas de méthode permettant de détecter cela (du style "loadend").

Quelqu'un aurait-il une idée ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB