#1 Thu 10 May 2012 20:08
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Affichage d'une couche vecteur avec openlayers via WFS
bonjour, j'ai un probleme au niveau de l'affichage d'une couche vecteur issue de postgis, j'obtient le nom de la couche dans le layer switcher mais elle ne s'affiche pas réellement, voici ma définition de la couche:
Code:
var gouv = new OpenLayers.Layer.Vector("GOUVERNORAT", { strategies: [new OpenLayers.Strategy.Fixed()], projection: new OpenLayers.Projection("EPSG:4326"), protocol: new OpenLayers.Protocol.HTTP({ url: "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/gouvernorat.map", featureType: "gouvernorat" }) });
Est ce que quelqu'un a rencontré ce probleme et peut m'aider?
Meme si je change la strategie en BBOX j'obtient le meme resultat, j'ai toujours mes fonds google maps qui s'affichent sans probleme, ceux sont mes "base Layers" et les couches WFS je les trouve dans le layers switcher comme des "overlays" mais elles n'apparaissent pas sur les fonds google, noté bien que je n'ai pas des problemes de projection car j'ai testé l'affichage en tant que WMS et j'obtient mes couches avec superposition parfaite, donc là je ne comprend pas c'est du à quoi exactement, j'attend encore une lumière car je suis bloqué
Je veux aussi savoir c'est quoi "FeatureNS" ? et comment je connais le FeatureNS que je dois mettre ?
Hors ligne
#2 Thu 10 May 2012 20:35
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonsoir,
La stratégie n'a rien à voir, je pense qu'il te manque un moyen de dire que tu récupères du WFS :
Code:
var wfs = new OpenLayers.Layer.Vector( "Stavros Features", { strategies: [new OpenLayers.Strategy.BBOX()] ,projection: new OpenLayers.Projection("EPSG:4326") ,protocol: new OpenLayers.Protocol.WFS({ version: "1.1.0" ,srsName: "EPSG:4326" ,url: "http://localhost:8080/geoserver/wfs" ,featureNS : "http://postgis.org" ,featureType: "polygon" ,geometryName: "the_geom" }) });
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 10 May 2012 20:58
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Merci Yves pour ta réponse, mais ça n'a rien changé , je trouve toujours mes couches dans le layer switcher mais pas d'affichage
Hors ligne
#4 Thu 10 May 2012 23:44
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Peut t-il que j'ai une faute au niveau du mapfile??
Code:
MAP NAME "QGIS-MAP" SIZE 200 200 STATUS ON EXTENT 7.522091 30.239791 11.607518 37.347021 UNITS DD WEB IMAGEPATH "/ms4w/tmp/ms_tmp/" IMAGEURL "/ms_tmp/" METADATA "wms_title" "QGIS-MAP" ### WFS "wfs_title" "QGIS-MAP" "wfs_onlineresource" "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/gouvernorat.map" #required "wfs_srs" "EPSG:4326 EPSG:900913" #required 'wfs_enable_request' '*' # necessary 'ows_enable_request' '*' 'wfs_include_items' 'all' END END PROJECTION "init=epsg:4326" END LAYER CONNECTIONTYPE postgis CONNECTION "host=localhost dbname=Achref_INS user=postgres password=21952339 port=5432" DATA "the_geom FROM gouvernorat" NAME "GOUVERNORAT" TYPE POLYGON STATUS ON CLASS STYLE COLOR 255 210 100 OUTLINECOLOR 50 70 90 SYMBOL 0 END END END END
Hors ligne
#5 Fri 11 May 2012 09:27
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour,
Possible car de mémoire il faut le paramètre DUMP. Je t'invite à tester Firebug et à récupérer la requête envoyée par OL. Tu la testes dans ton navigateur. Avec Firebug tu peux aussi naviguer dans le DOM et voir si la couche contient des donnée (ou pas).
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
#6 Fri 11 May 2012 10:34
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: Affichage d'une couche vecteur avec openlayers via WFS
bonjour,
Comme te dis Yves regarde déjà avec Firebug si la requête OpenLayers retourne qq chose.
Ensuite qq pistes :
mettre un parametre size dans le style pour définir l'épaisseur de ta ligne de contour
par exemple "SIZE 2"
en général dans postgres, les noms de table et de champ ne doivent pas avoir de majuscules. Je ne sais pas si c'est pareil pour le nom de la base mais si tu as Achref_INS, soit tu la renommes en achref_ins soit tu dois mettre son nom entre double cote : "Achref_INS"
attention aux projections si elles sont différentes entre la map du .map et la layer il faut mettre
Code:
PROJECTION "init=epsg:2154" END
S'il y a reprojection du coté d'openlayer il faut installer et appeler proj4js dans ton projet.
Je ne sais pas comment fonctionne le wfs mais pour le WMS il faut créer une new Openlayers.layer.wms et donc un service wms qui fonctionne en localhost.
Et pour charger des données vecteur dans une couche Openlayers.layer.vector comme tu le fais, je ne crois pas que tu puisses le faire directement comme tu le fais. Il n'y a pas de lien entre ton .map et un Openlayers.layer.vector. Il faut charger les features dans ta couche et avoir un flux geojson (par exemple) à lire
voici une fonction qui charge un geojson depuis un script php qui fait une requête dans postgis. Attention, la requete ajex est faite avec EXTJS, tu peux la faire autrement si tu n'as pas ext fans ton projet.
Code:
,loadTerritoires: function() { function loadGeom() { Ext.Ajax.request({ url : 'get_territoires.php' , //params : { action : 'getDate' }, method: 'GET', success: function (result, request) { doJSON(result.responseText); }, failure: function ( result, request) { Ext.MessageBox.alert('Failed'); } }); }; function doJSON(str){ var featurecollection = str; var geojson_format = new OpenLayers.Format.GeoJSON(); application.layout_aigle.territoires.addFeatures(geojson_format.read(featurecollection)); }; //execution du chargement des géometries loadGeom(); }
le "get_territoires.php" doit retourner un geojson valide. Voir la fonction postgis st_asgeojson
Voici un exemple de geojson valide que j'utilise
Code:
{ "type": "FeatureCollection","features":[ { "geometry":{"type":"Point","coordinates":[909606.585900304955430,1965801.381597357569262]} ,"type": "feature","id": 680,"properties": {"nom": "nom_demo10","territoire": "Exemple toto","id_territoire": "200",} } ] }
Hors ligne
#7 Fri 11 May 2012 11:02
Re: Affichage d'une couche vecteur avec openlayers via WFS
Delu,
Pour du WFS le paramètre SIZE dans le mapfile aura très peu d'influence
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
#8 Sun 13 May 2012 00:09
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour Yves et Delu, j'ai testé avec firebug et j'ai trouvé les deux message d'erreur suivants:
XMLHttpRequest cannot load http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/delegation.map&. Origin null is not allowed by Access-Control-Allow-Origin.
et
Code:
event.layerX and event.layerY are broken and deprecated in WebKit. They will be removed from the engine in the near future.
je ne comprend pas est ce qu'il est un probleme d'accès ou quoi ? que je dois faire ?
Hors ligne
#9 Sun 13 May 2012 20:08
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonsoir,
L'erreur Access-Control-Allow-Origin signifie qu'un serveur que tu as accède via l'url xxx.com ne peut pas accéder à un serveur accédé via l'url YYY.com Pour cela il te faut un proxy (je fais simple et rapide).
Quelles sont les urls utilisées en plus de http://localhost/cgi-bin/ ?
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
#10 Sun 13 May 2012 21:14
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonsoir Yves,
j'ai ajouté un ficher proxy.cgi dans le répertoire Apache/cgi-bin et j'ai ajouté la ligne suivante dans mon code juste avant la fonction Ext.onReady(function() {
Code:
OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
maintenant pour une définition du WFS comme suit :
Code:
var gouv = new OpenLayers.Layer.Vector("GOUVERNORAT", { strategies: [new OpenLayers.Strategy.BBOX()], projection: new OpenLayers.Projection("EPSG:4326"), protocol: new OpenLayers.Protocol.WFS({ url: "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map", featureType: "afrique", srsName: "EPSG:4326", featureNS: "http://www.openplans.org/topp", }), styleMap: new OpenLayers.StyleMap({ strokeWidth: 3, strokeColor: "#ffffff" }) });
j'obtient dans firebug le message d'erreur suivant
Code:
Failed to load resource: file:///C:/cgi-bin/proxy.cgi?url=http%3A%2F%2Flocalhost%2Fcgi-bin%2Fmapserv.exe%3Fmap%3DC%3A%2FOSGeo4W%2Fapache%2Fhtdocs%2FMonTP%2FAppli_stage%2Fmapfile.map
et je n'obtient pas la couche, je ne comprend pas qu'est qu'il manque
Dernière modification par Achref_geo (Sun 13 May 2012 21:15)
Hors ligne
#11 Sun 13 May 2012 21:36
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonsoir,
Tu devrais essayer :
Code:
OpenLayers.ProxyHost = "http://localhost/cgi-bin/proxy.cgi?url=";
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 Sun 13 May 2012 21:46
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
j'ai changé le syntaxe comme tu m'as indiqué et j'obtient
Code:
Failed to load resource: the server responded with a status of 404 (Not Found)
Hors ligne
#13 Mon 14 May 2012 00:04
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Pour vérifier si le proxy que j'ai créé fonctionne je dois allez dans l'adresse suivante 'http://localhost/cgi-bin/proxy.cgi', hors en allant dans cette adresse j'obtient le message d'erreur
Code:
The requested URL /cgi-bin/proxy.cgi was not found on this server.
meme j'ai ajouté 'localhost' dans le fichier proxy.cgi dans la ligne 'allowedHosts' et encore ça ne fonctionne pas, cette étape me vole le temps du reste du projet
noté bien : je ne comprend pas bien pourquoi créer un proxy (question de sécurité ou qlq chose comme ça) mais pour mieux expliquer, je travaille sous windows, et je travail en local tout est sur ma machine, donc est ce que j'aurais besoin de céer un proxy ?
Dernière modification par Achref_geo (Mon 14 May 2012 00:42)
Hors ligne
#14 Mon 14 May 2012 09:19
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour,
Il y a toujours des moments où le projet bloque, c'est comme ca...
Tu as raison, si tout tes serveurs ont la même url (localhost) il doit avoir un autre problème mais comme tu ne m'as pas répondu quand je t'ai demandé les urls des serveurs que tu interrogeais, je ne peux pas tout deviner.
Mais du coup je ne comprend pas le message d'erreur qui est pourtant assez claire.
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
#15 Mon 14 May 2012 10:32
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour,
maintenant je comprend votre question à propos des url, j'utilise deux url:
1)
Code:
"http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/gouvernorat.map&layer=GOUVERNORAT&mode=map"
c'est pour afficher la couche seulement avec mapserver
2)
Code:
file:///C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/essai.html
c'est pour afficher l'interface openlayers y compris les couches issue de mapserver
donc est ce que c'est ça qui oblige la création d'un proxy? je ne sais pas qu'est ce qui ne marche pas
Hors ligne
#16 Mon 14 May 2012 11:04
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour,
Le problème vient de la 2eme qui n'est pas une url mais un chemin vers un fichier. Il faut y accéder via http://localhost/MonTP/Appli_stage/essai.html (sauf erreur).
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
#17 Mon 14 May 2012 11:35
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Maintenant je suis en travail et je n'ai pas mon application devant moi, mais pourquoi ce chemin me permet d'interroger le serveur et d'afficher les couche via WMS et non pas le via WFS??
Hors ligne
#18 Mon 14 May 2012 21:14
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonsoir,
J'accéde maintenant à travers l'url "http://localhost/MonTP/Appli_stage/essai.html" et j'ai l'erreur suivant:
Code:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
y a t-il une idée sur cette erreur ?
En plus mon fichier proxy.cgi n'est pas exécutable dans "http://localhost/cgi-bin/proxy.cgi?url=", à l'ouverture de la page j'obtient
Code:
The requested URL /cgi-bin/proxy.cgi was not found on this server.
Dernière modification par Achref_geo (Mon 14 May 2012 21:35)
Hors ligne
#19 Fri 18 May 2012 00:34
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: Affichage d'une couche vecteur avec openlayers via WFS
Comme te le dis Yves dans un message plus haut, je pense comme lui que si toutes tes données sont sur ton serveur en localhost, il est inutile de configurer un proxy. Je n'ai jamais eu besoin de proxy et je ne suis pas expert mais si j'ai bien compris, tu ne peux pas faire une requête Ajax vers un autre serveur que celui qui lance la requête Ajax (donc vers lui même). C'est une limite de l'xml http request. Dans le cas d'une requête ajax vers un autre serveur il te faut un proxy (si j'ai bien compris) mais ce n'est pas ton cas.
Hors ligne
#20 Fri 18 May 2012 10:50
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Merci Delu pour ta réponse
Mais donc que peut etre le probleme, jusqu'à présent ça m'empeche d'avancer
Hors ligne
#21 Tue 22 May 2012 09:22
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour,
Bonsoir,
J'accéde maintenant à travers l'url "http://localhost/MonTP/Appli_stage/essai.html" et j'ai l'erreur suivant:Code:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)y a t-il une idée sur cette erreur ?
En plus mon fichier proxy.cgi n'est pas exécutable dans "http://localhost/cgi-bin/proxy.cgi?url=", à l'ouverture de la page j'obtientCode:
The requested URL /cgi-bin/proxy.cgi was not found on this server.
Le serveur est configuré d'une certaine manière, que nous ne connaissons pas. Il nous est par conséquent difficile de trouver la bonne url pour accéder aux pages et services, cela dépend de la configuration d'Apache. Les url que j'ai données sont celles qui me paraissaient les plus logiques mais visiblement ce ne sont pas les bonnes.
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 Tue 05 June 2012 10:19
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Bonjour,
j'ai tout essayé, rien ne change et je ne comprend pad d'ou vient l'erreur:
Code:
Erreur d'analyse XML : aucun élément trouvé Emplacement : moz-nullprincipal:{fe5c2d4a-29d7-429b-9df3-40d8f8e511c8} Numéro de ligne 540, Colonne 447132 : ...55374,37.113521 10.15414, 37.113526 10.155453, 37. ...--------------------------------------------------^
Autre remarque!
que ce soit le type de fichier que je l'appelle (mapfile ou geojson) et quand je navigue dans le DOM du firebug je trouve :
Code:
Array [undefined]
ça ne vous dit pas quelque chose ?
help pleaaaase
Hors ligne
#23 Thu 14 June 2012 14:59
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Affichage d'une couche vecteur avec openlayers via WFS
Salut tout le monde!
enfin mon problème est reglé, j'ai pu affiché la couche vecteur, j'ai changé la définition de la couche dans le code js comme suit:
Code:
var style = new OpenLayers.Style({ 'strokeWidth': 1, 'strokeColor': '#000000', 'fillColor': '#FF3333', 'fillOpacity': '0.15' }); var gouv = new OpenLayers.Layer.Vector( "Vector SHP", { strategies: [new OpenLayers.Strategy.Fixed()], projection: new OpenLayers.Projection("EPSG:4326"), protocol: new OpenLayers.Protocol.WFS({ version: "1.0.0", srsName: "EPSG:4326", url: "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map", featureNS: "http://mapserver.gis.umn.edu/mapserver", featureType: "afrique", }), styleMap: style });
malgré que je n'ai pas vu dans aucun exemple l'utilisation de la stratégie "Fixed" avec le protocole WFS ! mais si je change la stratégie en "BBOX" la couche disparait
Aussi j'ai fait un changement dans le bloc METADATA du mapfile comme suit :
Code:
METADATA "ows_title" "afrique" ### WFS "gml_featureid" "code_gouv" "gml_include_items" "all" END
et voici tout le mapfile:
Code:
MAP NAME 'afrique' IMAGETYPE PNG EXTENT 7.522091 30.239791 11.607518 37.347021 UNITS DD SIZE 600 500 SHAPEPATH 'C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage' WEB IMAGEPATH "C:/OSGeo4W/tmp/ms_tmp/" IMAGEURL "/ms_tmp/" METADATA "wfs_title" "afrique" "wfs_onlineresource" "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map" "wfs_srs" "EPSG:4326 EPSG:900913" END END ############ LAYER CONNECTIONTYPE postgis CONNECTION "host=localhost dbname=Achref_INS user=postgres password=21952339 port=5432" DATA "the_geom FROM gouvernorat" NAME 'afrique' STATUS ON METADATA "ows_title" "afrique" ### WFS "gml_featureid" "code_gouv" "gml_include_items" "all" END PROJECTION "init=epsg:4326" END DUMP TRUE STATUS OFF TYPE POLYGON CLASS NAME 'afrique' STYLE COLOR 255 204 102 END STYLE OUTLINECOLOR 50 70 90 SIZE 5 END END END END
Ce qui me reste maintenant c'est que la couche s'affiche sans problème avec Firefox, mais avec google chrome elle ne s'affiche que si je fait un grand zoom, et quand je fait un zoom- elle disparait, quelqu'un qui a une idée sur ce problème?
Hors ligne