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 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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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 sad sad sad sad

Dernière modification par Achref_geo (Wed 30 May 2012 14:42)

Hors ligne

 

#3 Wed 30 May 2012 15:07

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

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 smile
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&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=feature:afrique&amp;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

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

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 sad ?

Hors ligne

 

#7 Thu 31 May 2012 13:18

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

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 sad , si je n'ai pas arrivé je vais te demander de m'envoyer une imprime ecran smile

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 sad

Hors ligne

 

#10 Sun 03 June 2012 12:12

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

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 ! sad

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 sad , 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

 

Pied de page des forums

Powered by FluxBB