#1 Tue 29 May 2012 12:48
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Openlayers vector.layer
Bonjour,
J'essai il y a des jours sans succès d'afficher une couche vecteur avec openlayers, voici comment je définie ma couche:
Code:
var style = new OpenLayers.Style({ 'strokeWidth': 1, 'strokeColor': '#000000', 'fillOpacity': '0.4' }); var gouv = new OpenLayers.Layer.Vector( "geojson", { strategies: [new OpenLayers.Strategy.Fixed()], isBaseLayer:false, projection : new OpenLayers.Projection("EPSG:4326"), protocol: new OpenLayers.Protocol.HTTP({ url: "http://localhost/MonTP/Appli_stage/pg_connexion.php", format: new OpenLayers.Format.GeoJSON() }), styleMap: style } );
le résultat est que j'obtient le nom de la couche dans le layer switcher mais elle ne s'affiche pas réellement, et dans logs de la console javascript j'obtient le message d'erreur suivant :
Code:
XHR finished loading: "http://localhost/MonTP/Appli_stage/pg_connexion.php".
quelqu'un a rencontré le probleme ?
je vous joint une imprime ecran du resultat
Dernière modification par Achref_geo (Tue 29 May 2012 12:49)
Hors ligne
#2 Wed 30 May 2012 14:42
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
Bonjour,
quelqu'un peut m'aider svp je n'ai pas trouvé la solution
Dernière modification par Achref_geo (Wed 30 May 2012 14:42)
Hors ligne
#3 Wed 30 May 2012 15:07
Re: Openlayers vector.layer
Bonjour,
Si tu as firebug d'installer et si ton objet map est public, tu peux essayer de taper map.layers dans la console firebug, de retrouver la couche dans le tableau retournée : map.layers[1] et de voir si les données ont été récupéré ou non, si le problème vient du style ou pas ...
L'appli est elle publique ?
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 31 May 2012 11:19
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
Bonjour Yves,
Merci pour ta réponse, je suis un débutant, je sais que signifie le mot public mais je ne comprend pas quand et pourquoi une application est dite public,j'ai à l'entete de mon code:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
Est ce que cela indique que mon application est public ? explique moi stp ce truc dans deux mots
Voici quand par exemple je définie ma couche 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" }) });
dans la console du firebug j'obtient la ligne suivante :"POST http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map"
et dans l'anglet Réponse j'ai le code XML suivant:
Code:
<?xml version='1.0' encoding="ISO-8859-1" ?> <wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" 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-basic.xsd http://mapserver.gis.umn.edu/mapserver http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map&SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=feature:afrique&OUTPUTFORMAT=XMLSCHEMA"> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>7.522091,30.239791 11.607518,37.347021</gml:coordinates> </gml:Box> </gml:boundedBy> <!-- WARNING: FeatureId item 'NAME' not found in typename 'afrique'. --> <gml:featureMember> <ms:afrique> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>9.592882,36.000441 10.390449,36.661751</gml:coordinates> </gml:Box> </gml:boundedBy> <ms:msGeometry> <gml:Polygon srsName="EPSG:4326"> <gml:outerBoundaryIs> <gml:LinearRing> <gml:coordinates>10.018452,36.660716 10.018519,36.660667 10.018560,36.660638 10.018587,36.660618 10.018588,36.660617 10.018654,36.660570 10.018668,36.660560 10.018722,36.660522 10.018791,36.660475 10.018833,36.660446 10.018842,36.660440 10.018860,36.660428 10.018888,36.660409 10.018930,36.660381 10.019000,36.660335........
et dans l'anglet XML j'obtient le message d'erreur suivant:
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. ...--------------------------------------------------^
Est ce que ça signifie quelque chose ??? de quoi il s'agit là ?
Hors ligne
#5 Thu 31 May 2012 11:39
Re: Openlayers vector.layer
Bonjour,
Si l'url de ton appli est localhost cela signifie que tu l'as installé et y accède directement depuis ton pc. Pour qu'elle soit public il faut une url avec soit une ip (et qu'elle soit accessible de l'extérieur de ton réseau, l'ip de ton pc ne suffit pas il faut un router qui redirige les connexions entrantes vers ton pc) ou un nom de domaine.
Visiblement ton appli envoie les requêtes vers le serveur (tu visualises la requête POST dans firebug) et tu reçois une réponse (tu la visualises dans l'onglet "response"). Réponse en XML car tu utilises un standard OGC (WFS). Est ce que cette réponse est complète ? Ce que tu m'as envoyé ne l'est pas mais cela ne veut pas dire que ton serveur ne renvoie pas tout.
Après il faudra s'assurer que ton appli JS interprète bien cet XML.
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 Thu 31 May 2012 12:44
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
1) Mon application est donc locale
2)Oui mon réponse XML est complet et il est valide, je l'ai enregistré sous format xml et je l'ai ouvert dans Qgis et j'ai bien obtenu ma couche, mais dans le message précedent je n'ai pas mis tout le code vu qu'il est très long.
qu'est ce qui ne marche pas donc ?
Hors ligne
#7 Thu 31 May 2012 13:18
Re: Openlayers vector.layer
Bonjour,
Bien maintenant on va vérifier ce qui pose problème dans le code js. Après avoir lancer l'appli et ouvert Firebug avant, tape map.layers dans la console, retrouve la couche gouv dans le tableau, et navigue dans le dom (pour cela tu cliques sur l'entrée du tableau qui correspond à ta couche gouv).
Tu peux vérifier si les données ont été récupérées ou pas. Tu dois pouvoir aussi rajouter console.log(gouv); dans ton code js après le moment où tu as définie la variable. Elle apparaîtra dans la console firbug.
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 Thu 31 May 2012 13:35
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
Comment vérifier si les données ont été récupérées ? je vais essayé console.log(gouv) mais firebug me fatigue toujours , si je n'ai pas arrivé je vais te demander de m'envoyer une imprime ecran
Dernière modification par Achref_geo (Thu 31 May 2012 13:35)
Hors ligne
#9 Sat 02 June 2012 12:53
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
Bonjour Yves,
Je n'arrive toujours pas à afficher la couche vecteur
voici comment je définie les variables et j'ai ajouté console.log(gouv); à la fin :
Code:
var gouv = new OpenLayers.Layer.Vector('Test', { strategies: [new OpenLayers.Strategy.BBOX()], protocol: new OpenLayers.Protocol.WFS({ url: "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map", featureType: 'afrique' }) }); console.log(gouv);
dans la console du google chrome j'obtient :
Code:
OpenLayers.Layer.Vector.OpenLayers.Class.initialize EVENT_TYPES: Array[28] alwaysInRange: true div: HTMLDivElement drawn: true events: OpenLayers.Events.OpenLayers.Class.initialize features: Array[24] id: "OpenLayers.Layer.Vector_39" inRange: true map: OpenLayers.Map.OpenLayers.Class.initialize maxExtent: OpenLayers.Bounds.OpenLayers.Class.initialize maxResolution: 156543.0399 maxScale: 1692.750128677457 minExtent: null minResolution: 0.5971643062591553 minScale: 443744289.7320233 name: "Test" numZoomLevels: 19 options: Object projection: OpenLayers.Projection.OpenLayers.Class.initialize protocol: C renderer: OpenLayers.Renderer.SVG.OpenLayers.Class.initialize resolutions: Array[19] scales: Array[19] selectedFeatures: Array[0] strategies: Array[1] styleMap: OpenLayers.StyleMap.OpenLayers.Class.initialize tileSize: OpenLayers.Size.OpenLayers.Class.initialize units: "m" unrenderedFeatures: Object __proto__: F
je vais mettre mon code JS entiere et mon mapfile peut etre que vous remarquez quelque chose :
code js:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>BUILDING APPLICATION</title> <style> #map { width: 850px; height: 435px; } </style> <script type="text/javascript" src="http://extjs.cachefly.net/ext-3.2.1/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="http://extjs.cachefly.net/ext-3.2.1/ext-all.js"></script> <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-3.2.1/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-3.2.1/examples/shared/examples.css" /> <script src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script> <script src="http://www.openlayers.org/api/2.11/OpenLayers.js"></script> <script type="text/javascript" src="http://api.geoext.org/1.0/script/GeoExt.js"></script> <script type="text/javascript"> var mapPanel, tree; Ext.onReady(function() { var extent = new OpenLayers.Bounds(7.522091, 30.239791, 11.607518, 37.347021); var map = new OpenLayers.Map ("map", { projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326"), maxResolution: 156543.0399, numZoomLevels: 19, maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34), //maxExtent: new OpenLayers.Bounds(7.522091, 30.239791, 11.607518, 37.347021), units: 'm' } ); var gouv = new OpenLayers.Layer.Vector('Test', { strategies: [new OpenLayers.Strategy.BBOX()], protocol: new OpenLayers.Protocol.WFS({ url: "http://localhost/cgi-bin/mapserv.exe?map=C:/OSGeo4W/apache/htdocs/MonTP/Appli_stage/mapfile.map", featureType: 'afrique' }) }); console.log(gouv); gstr = new OpenLayers.Layer.Google("Google Streets",{type: "roadmap", sphericalMercator: true, displayInLayerSwitcher:true, isBaseLayer:true, numZoomLevels: 20}); var cyclemap = new OpenLayers.Layer.OSM("cyclemap","http://tile.opencyclemap.org/cycle/${z}/${x}/${y}.png",{'sphericalMercator': true, isBaseLayer:true}); //ajout de la couche OpenStreetMap var osmLayer = new OpenLayers.Layer.OSM(); var gsat = new OpenLayers.Layer.Google("googlesatellite", {type: google.maps.MapTypeId.SATELLITE, 'sphericalMercator': true, isBaseLayer:true, visibility: false, numZoomLevels: 22}); //carte du relief google var gphy = new OpenLayers.Layer.Google("googlephysical", {type: google.maps.MapTypeId.TERRAIN}); var ghyb = new OpenLayers.Layer.Google("Google Hybrid", {type: google.maps.MapTypeId.HYBRID, 'sphericalMercator': true, numZoomLevels: 20, isBaseLayer:true, visibility: false}); map.addLayers([cyclemap]); map.addLayer(ghyb); map.addLayer(osmLayer); map.addLayer(gsat); map.addLayer(gphy); map.addLayer(gstr); map.addLayers([gouv]); map.addControl(new OpenLayers.Control.PanZoomBar()); map.addControl(new OpenLayers.Control.OverviewMap()); map.addControl(new OpenLayers.Control.MousePosition()); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.setCenter(new OpenLayers.LonLat(10,34) // Center of the map .transform( new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection ), 6 // Zoom level ); }); </script> </head> <body> <div id="map" class="smallmap"></div> </body> </html>
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 "/ms4w/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=**** port=5432" DATA "the_geom FROM gouvernorat" NAME 'afrique' STATUS ON METADATA "wms_title" "afrique" "wfs_title" "afrique" "gml_featureid" "NAME" "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
Merci d'avance
Hors ligne
#10 Sun 03 June 2012 12:12
Re: Openlayers vector.layer
Bonjour,
Ton flux WFS a une projection en 4326 donc ta couche vecteur s'affiche probablement mais complètement décalé. Il faut trouver pourquoi ces données sont en 4326 : est ce qu'openLayers envoie un requête avec une projection en 4326 ? Si oui il faut modifier le code js quelque part, je n'ai pas le temps de trop m'y pencher et je n'ai rien vue de choquant.
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
#11 Sun 03 June 2012 16:30
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
Bonjour Yves,
Mes données sont à l'origine en 4326, et je voulais les superposer avec les fonds google map c'est pour ça que j'ai mis dans le mapfile "EPSG:4326 EPSG:900913", et ça a marché parfaitement en WMS ! est ce que je dois maintenant utiliser la bibliothèque proj4js ? et si ma couche s'affiche en décalage complet elle doit donc apparaitre quelque part dans la carte lorsque je fais un zoom- , c'est logique non ? je serais trèèèèèèèèèèèèèèèès content si je l'aperçois meme en décalage !
Hors ligne
#12 Mon 04 June 2012 00:08
- Achref_geo
- Participant actif
- Date d'inscription: 19 Feb 2012
- Messages: 107
Re: Openlayers vector.layer
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. ...--------------------------------------------------^
Est ce que je dois configurer un proxy? mais je travail en locale et sur un seul serveur "mapserver" ! donc je n'aurais pas besoin d'un proxy non?
d'après les recherches j'ai remarqué que cette erreur est toujours liée à l'URL, probablement que l'URL dont j'y accède n'est pas la bonne , comment je peut savoir quelle est la bonne url ?
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]
Est ce que c'est normal ou etrange ? ça ne vous dit pas quelque chose ?
Dernière modification par Achref_geo (Mon 04 June 2012 16:00)
Hors ligne